1. 程式人生 > >Logstash使用grok進行日誌過濾

Logstash使用grok進行日誌過濾

轉自: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
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯絡作者獲得授權並註明出處。