日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

logstash filter grok 用法

發布時間:2024/4/17 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 logstash filter grok 用法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在elk+filebeat都安裝好,且明白了基本流程后,主要的就是寫logstash的filter了,以此來解析特定格式的日志

logstash的filter是用插件實現的,grok是其中一個,用來解析自定義結構的日志,就是說可以完全自定義的去解析

grok的語法是%{pattern:field}

pattern是指模板(或者說是類型),logstash內置了很多,也可以自定義(用正則)

field是指解析后的鍵值中的鍵,當然值就是從日志解析出來的內容

(無論用什么pattern解析到elasticsearch默認都是用string存儲,可以通過%{pattern:field:int}將之轉換為number類型就可以進行加減計算了,只支持int和float)

比如,一個日志文件中是序號+ip,這樣

1 127.0.0.1 2 127.0.0.2 3 127.0.0.3

filter就可以這樣寫(input省略了,肯定是從filebeat來的,output中指定index,方便測試)

filter {grok {match => { "message" => "%{NUMBER:myid} %{IP:myip}"}} } output {elasticsearch {hosts => "localhost"index => "mytest"} }

那么日志到 elasticsearch中,就是這樣:

{..."hits" : {..."hits" : [ {..."_source" : {"message" : "1 127.0.0.1",..."myid" : "1","myip" : "127.0.0.1"}}, {..."_source" : {"message" : "2 127.0.0.2",..."myid" : "2","myip" : "127.0.0.2"}}, {..."_source" : {..."myid" : "3","myip" : "127.0.0.3"}} ]} }

kibana中的效果

grok的基礎用法就是這樣了,一般來說內置的pattern就夠用了

更多pattern可以看https://github.com/logstash-plugins/logstash-patterns-core/blob/master/patterns

像IP、NUMBER這樣的基本pattern位于grok-patterns中,常用的有:

INTint類型
NUMBER數字
DATA數據,可以對應字符串
GREEDYDATA數據,可以對應字符串,貪婪匹配
QUOTEDSTRING帶引號的字符串,可以簡寫為QS
WORD一個詞
IPip地址,v4 或 v6
DATE日期
TIME時間
DATESTAMP日期+時間
PATH系統路徑
HOSTNAME計算機名
MACmac地址
UUIDuuid
LOGLEVEL日志等級
EMAILADDRESSemail地址

另外,還有可以直接用的模板集合,比如官方文檔中的例子:

filter {grok {match => { "message" => "%{COMBINEDAPACHELOG}"}} }

這個COMBINEDAPACHELOG就是一個內置的集合,這種集合還有很多,也在上面那個鏈接中,COMBINEDAPACHELOG就位于httpd,它的定義是:

COMBINEDAPACHELOG %{HTTPD_COMBINEDLOG} HTTPD_COMBINEDLOG %{HTTPD_COMMONLOG} %{QS:referrer} %{QS:agent} HTTPD_COMMONLOG %{IPORHOST:clientip} %{HTTPDUSER:ident} %{HTTPDUSER:auth} ...

(HTTPD_COMMONLOG的定義有點長,就省略了~~)

當日志的結構比較多,就需要自定義為模板集合,方便管理(自定義模板是一樣的方式,感覺沒必要,用內置的組合成自己的集合就行了)

mkdir -p /etc/logstash/patterns

vi /etc/logstash/patterns/test.conf

MYPATTERN %{NUMBER:myid} %{IP:myip}

filter改為

filter {grok {patterns_dir => ["/etc/logstash/patterns"]match => { "message" => "%{MYPATTERN}"}} }

測試下,效果當然跟上面是一樣的。

還有一點,pattern本質都是正則,%{}之間的空格不是結構要求,而是因為日志就是空格分隔的,如果日志都用空格和-來分隔,那就是:

MYPATTERN %{TIME:mytime} - %{DATA:mythread} - %{LOGLEVEL:mylevel} - %{DATA:myclass} - %{GREEDYDATA:myinfo}

特別說明一個情況,java中log4j的日志會出現日志級別ERROR和DEBUG后面一個空格,而其他INFO那些后面兩個空格

原因應該是ERROR和DEBUG比INFO那些多一個字母,為了對齊,這種情況難在不知道以致浪費時間到處查解析正確的原因,知道了當然就簡單了

%{LOGLEVEL:mylevel} %{DATA:myclass} 改為 %{LOGLEVEL:mylevel}\s{1,2}%{DATA:myclass}

over

轉載于:https://www.cnblogs.com/toSeek/p/6117845.html

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的logstash filter grok 用法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。