使用Logstash filter grok過濾日志文件
Logstash Filter Plugin Grok
Logstash提供了一系列filter過濾plugin來處理收集到的log event,根據(jù)log event的特征去切分所需要的字段,方便kibana做visualize和dashboard的data analysis。所有l(wèi)ogstash支持的event切分插件查看這里。下面我們主要講grok切分。
Grok基本介紹
1.Grok 使用文本片段切分的方式來切分日志事件,語法如下:

SYNTAX代表匹配值的類型,例如,0.11可以NUMBER類型所匹配,10.222.22.25可以使用IP匹配。
SEMANTIC表示存儲該值的一個變量聲明,它會存儲在elasticsearch當(dāng)中方便kibana做字段搜索和統(tǒng)計(jì),你可以將一個IP定義為客戶端IP地址client_ip_address,eg:%{IP:client_ip_address},所匹配到的值就會存儲到client_ip_address這個字段里邊,類似數(shù)據(jù)庫的列名,也可以把event log中的數(shù)字當(dāng)成數(shù)字類型存儲在一個指定的變量當(dāng)中,比如響應(yīng)時間http_response_time,假設(shè)event log record如下:

可以使用如下grok pattern來匹配這種記錄

在logstash conf.d文件夾下面創(chuàng)建filter conf文件,內(nèi)容如下

以下是filter結(jié)果

grok內(nèi)置的默認(rèn)類型有很多種,讀者可以自行查看。
2.使用自定義類型更多時候logstash grok沒辦法提供你所需要的匹配類型,這個時候我們可以使用自定義。
第一種,直接使用oniguruma語法去匹配文本片段,語法如下

假設(shè)你需要匹配的文本片段為一個長度為10或11的十六進(jìn)制的值,使用下列語法可以獲取該片段,并把值賦予queue_id

第二種,創(chuàng)建自定義pattern文件
創(chuàng)建文件夾patterns,在此文件夾下面創(chuàng)建一個文件,文件名隨意,eg:?postfix

然后將patterns file引入,告訴logstash你的自定義類型文件,以下面的event log record為例子:

在logstash conf.d文件夾下面創(chuàng)建filter conf文件,內(nèi)容如下

匹配結(jié)果如下:

推薦使用grokdebugger來寫匹配模式,輸入event log record,再逐步使用pattern微調(diào)切分,下方會根據(jù)你所寫的模式將輸入切分字段。


3.其他常用內(nèi)置方法
add_field:?當(dāng)pattern匹配切分成功之后,可以動態(tài)的對某些字段進(jìn)行特定的修改或者添加新的字段,使用%{fieldName}來獲取字段的值Exmaple:


如果somefield=dad,logstash會將foo_dad新字段加入elasticsearch,并將值Hello world, dad賦予該字段
add_tag:?為經(jīng)過filter或者匹配成功的event添加標(biāo)簽Example:


馬哥想聽你動人的成長故事,所以發(fā)起了一個征文活動。
點(diǎn)擊閱讀原文或長按二維碼添加我的個人微信,立刻了解詳情。
