一、codec
1、簡介
codec plugin 作用於input 和output plugin,負責將數據在原始與logstash event之間切換,常見的 codec如下:
- plain 讀取原始數據
- dots 將內容簡化爲點進行輸出
- rubydebug 將 logstash event 按照ruby 格式輸出,方便調試
- line 處理帶有換行符的內容
- json 處理json 格式的內容
- multiline 處理多行數據的內容,將其作爲一條數據輸出(多行變一條)
2、multiline 介紹
當一個event 的 message 有多行組成時,需要使用multiline,常見的場景是堆棧日誌信息的處理,如:
// 此種數據特點:一是多行二是開頭有空格
Caused by: java.net.SocketTimeoutException: connect timed out
at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
主要設置參數如下:
- pattern: 設置行匹配的正則表達式,可以使用 grok
- what:取值爲previous或next,如果匹配成功,那麼匹配行是歸屬於上一個事件還是下一個事件
- negate:取值爲true或false,意爲是否對 pattern 的結果取反
舉例:收集時間開頭的數據
input {
stdin {
codec => multiline {
pattern => "^\[%{TIMESTAMP_ISO8601}\]"
negate => true
what => "previous"
}
}
}
二、filter
1、簡介
filter 是 logstash 功能強大的主要原因,他可以對logstash event 進行豐富的處理,比如解析數據、刪除字段、類型轉換等等,常見如下:
- date 日期解析
- grok 正則匹配解析
- dissect 分隔符解析
- mutate 對字段進行處理,如重命名、刪除、替換等
- json 按照json 解析字段內容到指定字段
- geoip 增加地理位置數據
- ruby 利用ruby 代碼來動態修改 logstash event
2、date 介紹
將日期字符串解析爲日期類型,然後替換@timestamp 字段或者指定的其他字段。
參數:
- match:類型爲數組,用於指定日期匹配的格式,可設置多個
- target:類型爲字符串,用於指定賦值的字段名,默認是@timestamp
- timezone:類型爲字符串,用於指定時區
3、grok 介紹
參數:
- match:匹配多種樣式
- overwrite:替換目標字段值(區別於追加)
- tag_on_fail
補充:熱加載
啓動命令加上 -r 即可。此時修改配置文件,就會被加載,無需重啓。
4、dissect 介紹
基於分隔符原理解析數據,解決 grok 解析時消耗過多 cpu 資源的問題。
語法:
- %{}:大括號之間的是字段
- %{}:這個格式之間的是分隔符
- %{}:如果大括號之間什麼也不寫,就相當於佔位符,但是不輸出到結果
- +:追加到某個字段
- /:設置字段的順序
參數:
dissect分割後的字段值都是字符串類型,可以使用convert_datatype 屬性進行類型轉化,如下:
filter {
dissect {
convert_datatype => {
age => "int"
}
}
}
5、mutate 介紹
可以對字段進行各種操作,如重命名、刪除、替換、更新等,主要操作如下:
- convert:類型轉換
- gsub:字符串替換,清洗數據
- split/join/merge:字符串切割 / 數組合併爲字符串 /2個 數組合併爲1個數組
- rename:字段重命名
- update/replace:字段內容更新或替換
- remove_field:刪除字段
6、json 介紹
將字段內容爲json 格式的數據進行解析
參數:
- source:需要解析的字段
- target:解析完成的數據存儲的字段