admin
发表于 2026-10-13 09:41:14
Grok支持以正则表达式的方式提取所需要的信息,正则表达式又分两种,一种是内置的正则表达式,一种是自定义的正则表达式,例如:<br><br>内置的正则表达式方式,下面的写法表示从输入的消息中提取IP字段,并命名为sip;<br><br>%{IP:sip}<br><br>自定义的正则表达式,开始与终止符分别为(?与?),下面的写法表示获取除,以外的字符,并命名为log_type;<br><br>(?<log_type>[^,]+?)<br><br>Grok具体的语法参数如下:<br><br>%{SYNTAX:SEMANTIC}<br><br>`SYNTAX`代表匹配值的类型,例如,`0.11`可以`NUMBER`类型所匹配,`10.222.22.25`可以使用`IP`匹配;<br><br>`SEMANTIC`表示存储该值的一个变量声明,它会存储在`elasticsearch`当中方便`kibana`做字段搜索和统计,你可以将一个`IP`定义为客户端IP地址`client_ip_address`<br><br>例如:`%{IP:client_ip_address}`,所匹配到的值就会存储到`client_ip_address`这个字段里边,类似数据库的列名,也可以把event log中的数字当成数字类型存储在一个指定的变量当中,响应时间`http_response_time`;<br><br>Grok文本片段切分的案例一:<br><br>input {<br><br>stdin {}<br><br>}<br><br>filter {<br><br>grok {<br><br>match => { "message" => "%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:http_response_time}" }<br><br>}<br><br>}<br><br>output {<br><br>stdout {<br><br>codec => "rubydebug"<br><br>}<br><br>}<br><br>192.168.0.111 GET /index.html 13843 0.059<br><br><img src="https://bbs.jfedu.net/jf_imgs/image1120.png" alt="" style="max-width:100%;"><br><br>Grok文本片段切分的案例二:
页:
[1]