一、概述
Logstash是一個開源數據收集引擎,在大數據日誌的處理與分析中受到了廣泛的使用。而Grok是一種基於文本模式匹配的流行處理方法,可以解析和標準化日誌數據並將其轉換為可讀的格式。
LogstashGrok是將兩者結合起來使用的插件,它使用Grok的規則管理系統,自定義模式匹配字段(field)的值,進而提高數據的可視化與分析工作的效率。
二、常用變量設置
在LogstashGrok中,可以通過變量自定義匹配模式,下面是一些常用變量的設置方法。
1、Match模塊中使用變量進行正則匹配
filter {
grok {
match => { "message" => "%{COMBINEDAPACHELOG}" }
}
}
其中message是匹配的字段(field)名,COMBINEDAPACHELOG是預定義的匹配規則,將匹配Apache日誌文件中的格式(如IP地址、用戶代理、狀態碼等)。
2、自定義字段名稱
filter {
grok {
match => { "message" => "%{COMBINEDAPACHELOG}" }
overwrite => [ "message" ]
}
mutate {
rename => { "message" => "apache_message" }
}
}
其中overwrite將會覆蓋原有的message字段名。
mutate中的rename將apache_message字段重新定義為message。
3、基於條件的判斷
filter {
grok {
match => { "message" => "%{COMBINEDAPACHELOG}" }
}
if [apache_response_code] == "404" {
drop { }
}
}
該配置意為,如果匹配到的響應碼(apache_response_code)為404,則刪除該日誌記錄。
三、常用模式匹配語法
1、根據常規字符串進行匹配
filter {
grok {
match => { "message" => "Hello %{WORD}" }
}
}
該配置意為,在匹配字段(message)中尋找“Hello”關鍵詞,並把找到的WORD(字母、數字、下劃線)定義為新的字段(field)。
2、多行文本匹配
filter {
grok {
match => { "message" => "\[%{WORD}\] \[%{DATA}\] \[%{WORD}\] %{GREEDYDATA:message}" }
break_on_match => false
}
}
該模式將匹配多行文本格式中的message字段。
3、匹配數字類型
filter {
grok {
match => { "message" => "%{NUMBER:num:int}" }
}
}
該配置意為,匹配數字類型,將數字類型存儲在名為num且類型為整型的新字段(field)中。
四、常見問題及應對方法
1、Grok匹配失敗
如果Grok匹配失敗,可以通過日誌中的錯誤信息來進行排查。例如,可以檢查 Grok模式的正確性,或檢查匹配字段(field)是否存在錯誤。
2、Grok性能問題
如果Grok匹配處理時間太長,可以進行一些性能優化。例如,可以使用更具體的模式(pattern)來提高匹配效率,也可以通過使用正則表達式引擎來提高匹配速度。
3、多行日誌的處理
在匹配多行文本字符時,可以使用multiline選項進行處理,以分隔多行文本字符。
input {
file {
path => "/var/logs/application.log"
start_position => "beginning"
type => "multiline"
codec => multiline {
pattern => "^%{TIMESTAMP_ISO8601} "
negate => true
what => "previous"
}
}
}
五、總結
LogstashGrok是一個常用的日誌處理模塊,將Grok與Logstash結合,使得日誌處理的效率更高、更準確,同時提供了豐富的模式匹配語法及變量設置選項,方便了從壓縮數據中提取信息。
原創文章,作者:PXJI,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/142800.html