Logstash使用grok進行日誌過濾
阿新 • • 發佈:2018-11-19
轉自:https://www.jianshu.com/p/49ae54a411b8
一、前言
Logstash是Elastic stack 中的一個開源元件,其不僅能夠對日誌進行抓取收集,還能對抓取的日誌進行過濾輸出。Logstash的過濾外掛有多種,如:grok、date、json、geoip等等。其中最為常用的為grok正則表示式過濾。
二、grok的匹配語法
grok的匹配語法分為兩種:grok自帶的基本匹配模式、使用者自定義的匹配模式。
- Grok的基本匹配模式
Grok模組提供了預設內嵌了一些基本匹配模式,其使用語法為:
%{SYNTAX:SEMANTIC}
其中SYNTAX為匹配模式的名稱,用於呼叫相應的匹配模式匹配文字,如:3.44 會被NUBER模式所匹配,而10.10.10.1會被IP模式所匹配。
而SEMANTIC則是用於標記被匹配到的文字內容,如10.10.10.1被IP模式所匹配,並編輯為ClientIP。
其使用例子:
%{NUMBER:duration} %{IP:ClientIP}
- Grok的自定義模式
Grok模組是基於正則表示式做匹配的,因此當基本匹配模式不足以滿足我們的需求時,我們還自定義模式編譯相應的匹配規則。
Grok的自定義模式的語法:
(?<field_name>the pattern here)
其中filed_name為自定義模式的名稱,pattern即指正則表示式。
如:
#匹配時間的自定義模式
(?<Date>(\d*[./-]\d*[./-]\d* \d*:\d*:\d*[.,][0-9]+))
三、grok的過濾配置選項和通用選項
grok支援下述的過濾配置選項
選項 | 型別 | 是否為必須 | 描述 |
---|---|---|---|
break_on_match | 布林型 | 否 | 預設值為true,只會匹配第一個符合匹配條件的值,如果需要匹配多個值,則需要設定為false |
keep_empty_captures | 布林型 | 否 | 預設值為false,如果為true,則保留空欄位為事件欄位 |
match | 雜湊型 | 否 | 意思為匹配一個欄位的雜湊值,單一欄位可設定匹配多個匹配模式 |
named_captures_only | 布林型 | 否 | 預設值為true,意味著只儲存從grok中獲取的名稱 |
overwrite | 陣列 | 否 | 此選項用於複寫欄位中的值 |
pattern_definitions | 雜湊型 | 否 | 定義被當前過濾器所使用的自動模式的名稱和元組名稱,如果命名的名稱已存在,則會覆蓋此前配置 |
patterns_dir | 陣列 | 否 | 指定用於儲存定義好的匹配模式的檔案目錄 |
patterns_files_glob | 字串 | 否 | 用於在patterns_dir指定的目錄中過濾匹配的檔案 |
tag_on_failure | 陣列 | 否 | 預設值為_grokparsefailure,當匹配不成功時追加指定值到tags欄位 |
tag_on_timeout | 字串 | 否 | 預設值為_groktimeout,當grok正則表示式匹配超時追加的tag |
timeout_millis | 數值 | 否 | 預設值為30000毫秒,當正則匹配執行超過指定的時間後,嘗試終結此匹配操作。設定為0將關閉超時 |
grok的通用選項:
下述選項是被所有過濾外掛都支援的通用選項。
選項 | 型別 | 是否為必須 | 描述 |
---|---|---|---|
add_field | 雜湊型 | 否 | 如果此過濾選項匹配成功,則會向匹配的事件中新增指定的欄位,欄位名和內容可以呼叫相關的變數進行定義命名 |
add_tag | 陣列 | 否 | 用於當過濾成功時,向匹配的事件中新增tag |
enable_metric | 布林型 | 否 | 預設值為true,預設情況下,啟用或禁用此功能,能記錄特定外掛的相關度量值。 |
id | 字串 | 否 | 新增一個唯一ID到指定的外掛配置中,當有多個同一型別的外掛時,可更好地去區別監控logstash |
periodic_flush | 布林型 | 否 | 預設值為false,可選項,用於在規定的間隔時間呼叫過濾器的重新整理功能 |
remove_field | 陣列 | 否 | 當此外掛匹配成功時,從事件中移除指定的欄位 |
remove_tag | 陣列 | 否 | 當此外掛匹配成功時,從事件中移除指定的tags |
四、grok使用示例
新增和移除指定的欄位
input {
beats {
port => 5044
type => "nginx"
}
}
filter {
if [type] == "nginx" {
grok {
match => { "message" => ["(?<RemoteIP>(\d*.\d*.\d*.\d*)) - %{DATA:[nginx][access][user_name]} \[%{HTTPDATE:[nginx][access][time]}\] \"%{WORD:[nginx][access][method]} %{DATA:[nginx][access][url]} HTTP/%{NUMBER:[nginx][access][http_version]}\" %{NUMBER:[nginx][access][response_code]} %{NUMBER:[nginx][access][body_sent][bytes]} \"%{DATA:[nginx][access][referrer]}\" \"%{DATA:[nginx][access][agent]}\""] }
add_field => {
"Device" => "Charles Desktop"
}
remove_field => "message"
remove_field => "beat.version"
remove_field => "beat.name"
}
}
}
output {
if [type] == "nginx" {
elasticsearch {
hosts => "10.10.10.6:9200"
index => "logstash-testlog"
} }
}
小禮物走一走,來簡書關注我
作者:小尛酒窩
連結:https://www.jianshu.com/p/49ae54a411b8
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯絡作者獲得授權並註明出處。