logstash grok

来源:互联网 发布:伊芙蕾雅淘宝店 编辑:程序博客网 时间:2024/05/19 18:36
grokeditVersion: 3.3.1Released on: 2016-12-26Changelog解析任意文本并构造它:Grok 是当前 最好的方式在logstash 来解析非结构化日志数据到一些结构化和可查询的这个工具对于syslog logs是完美的, apache和其他webserver日志,mysqllogs 和通常的,任何日志格式是对人可读的Grok 基础:Grok 通过结合文本模式来匹配你的日志grok 模式是  %{SYNTAX:SEMANTIC}语法是 模式的名字 会匹配你的文本,比如,3.44 通过NUMBER 模式来匹配55.3.244.1 会通过一个IP模式匹配语义是识别你给定的一个被匹配的文本片段。比如,3.44 可以是一个事件的持续事件,这样你可以称为它一个简单的持续事件此外,一个字符串55.3.244.1 可能客户端发出的请求在上述的例子中,你获得的过滤器是这个样子:%{NUMBER:duration} %{IP:client}你可以增加一个数据类型转换到你的Grok 模式。默认 所有的语义都保存为字符串。如果你希望转一个语义的数据类型,比如改变一个字符串为一个整型 然后 在后面为目标数据类型。比如 %{NUMBER:num:int}  转换num语义从一个字符串为一个整型。例子:55.3.244.1 GET /index.html 15824 0.043The pattern for this could be:%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}更现实的例子,让我们从文件读取这些日志:input {  file {    path => "/var/log/http.log"  }}filter {  grok {    match => { "message" => "%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}" }  }}正则表达式:Grok 基于正则表达式,因此任何正则表达式是正确的在grok里。正则表达式库是 OnigurumaCustom Patterns自定义模式:有时候 logstash 没有你需要的模式,为此,你有一些选项:1.你可以使用Oniguruma 语法用于捕获让你匹配的文本部分 保存它作为一个字段:(?<field_name>the pattern here)比如,后缀日志有一个队列id 是10或者11字符的十六进制,你可以像这样轻易的捕获:(?<queue_id>[0-9A-F]{10,11})或者,你可以创建自定义模式文件:创建一个目录 名为pattern 里面文件称为额外的(文件名不重要,但命名得有意义)在该文件,写下你需要的模式简介:详情:add_field如果第一个filter是成功的,增加另外的任意的字段到这个事件。字段名字可以是动态的包含事件的部分 使用 %{field}.Example:filter {  grok {    add_field => { "foo_%{somefield}" => "Hello world, from %{host}" }  }}# You can also add multiple fields at once:filter {  grok {    add_field => {      "foo_%{somefield}" => "Hello world, from %{host}"      "new_field" => "new_static_value"    }  }}如果event 有字段  "somefield" == "hello"  这个过滤器,成功,会增加字段foo_hello 如果它是存在的,add_tag如果这个过滤器成功,增加任意的tags到这个事件。Tag 可以是动态的包含事件的部分 使用%{field} syntax.Example:filter {  grok {    add_tag => [ "foo_%{somefield}" ]  }}# You can also add multiple tags at once:filter {  grok {    add_tag => [ "foo_%{somefield}", "taggedy_tag"]  }}break_on_match:在第一次匹配后终止,第一次成功匹配通过grok 会导致filter 完成。如果你需要grok 尝试所有的模式,设置为false

0 0