定義處理器
在filebeat將數據發送到配置的輸出之前,可以使用處理器來過濾和增強數據。要定義處理器,需要制定處理器名稱,可選條件和一組參數:
processors: - <processor_name>: ##指定執行某種操作的處理器 when: <condition> ##指定可選條件,如果條件成立則執行 <parameters> ##是傳遞給處理器的參數列表 - <processor_name>: when: <condition> <parameters>
處理器再哪里有效?
處理器所處位置:
1)在配置的頂層,處理器應用於filebeat收集的所有數據
2)在具體的輸入下,處理器應用於為該輸入收集的數據,example:
- type:<input_type> processor: - <processor_name>: when: <condition> <parameters>
同樣,對於filebeat模塊,可以在input下定義處理器模塊。
支持的處理器:
①add_cloud_metadata
②add_locale
③decode_json_fields
④drop_event
刪除事件,如果處理器下關聯的條件被滿足則刪除整個事件,條件時強制性的:
processors: - drop_event: when: condition
⑤drop_fields
指定哪些字段如果特定條件被滿足下降,條件時可選的。如果缺少,則始終刪除指定的指定。@timestamp和type字段不能被drop,即使它們顯示在drop_fields列表中。
processors: - drop_fields: when: condition fields: ["field1", "field2", ...]
⑥include_fields
處理器指定哪些字段滿足條件到出口。條件時可選的,如果缺少,則始終導出到出口。@timestamp和type始終被導出。
processors: - include_fields: when: condition fields: ["field1", "field2", ...]
⑦rename
處理器指定字段命名列表;類似一個key對,每個key對包含一個old-key和一個new-key,form是源名,to是目標名。
在字段名稱導致沖突的情況下,重命名字段非常有用;重命名字段不能用於覆蓋字段,要覆蓋字段,請先重命名目標字段,或使用drop_fields處理器刪除字段,然后重新命名字段:
processors: - rename: fields: - from: "a.g" to: "e.d" ignore_missing: false ##(可選)如果設置為true,則在缺少重命名的鍵的情況下不會記錄錯誤,默認是false。 fail_on_error: true ##(可選)如果設置為true,則在發生錯誤時停止重命名字段並返回原始事件。如果設置為false,則在重命名期間發生錯誤時,重命名也會繼續,默認是true。
⑧add_kubernetes_metadata
⑨add_docker_metadata
⑩dissect
使用定義的模式對傳入的字符串進行標記。
processors: - dissect: tokenizer: "%{key1} %{key2}" field: "message" ##(可選),要標記的事件字段,默認是message target_prefix: "dissect" ##(可選)提取字段名稱,處理器將在事件的根目錄中創建密鑰。默認是dissect
條件
每個條件都要接收一個要比較的字段,支持的條件有:
①equals
使用equals條件,可以比較字段是否具有特定值,條件僅接受整數或字符串。
example,以下條件檢查http事務的響應代碼是否為200:
equals:
http.response.code: 200
②contains
所述contains條件檢查如果一個值是一個字段的一部分。該字段可以是字符串或字符串屬組,條件僅接受字符串值。
example,以下條件檢查錯誤時否是事務狀態的一部分:
contains: status: "Specific error"
③regexp
regxep以正則表達式來核對條件,條件只能是字符串。
example,以下條件檢查進程名是否以foo開頭:
regexp: system.process.name: "foo.*"
④range
range條件檢查字段是在一定范圍內的值,支持條件lt、lte、gt和gte。條件僅接受整數或浮點數。
example,以下通過http.response.code字段與400進行比較來檢查失敗的http事務:
range: http.response.code: gte: 400
##or can be written as:
range: http.response.code.gte: 400
##The following condition checks if the CPU usage in percentage has a value between 0.5 and 0.8.
range: system.cpu.user.pct.gte: 0.5 system.cpu.user.pct.lt: 0.8
⑤has_fields
has_fields檢查是否給定的fields存在於事件中,條件接受表示字段名稱和字符串列表。
example,以下條件檢查http.response.code事件中是否存在該字段:
has_fields:['http.response.code']
⑥or
操作者接收的條件列表:
or: - <condition1> - <condition2> - <condition3> ...
example,要配置條件http.response.code = 304 或者 http.response.code = 404:
or: - equals: http.response.code:304 - equals: http.response.code:404
⑦and
操作接收的條件列表,格式同or相同。也可以同or配合使用:
example:
or: - <condition1> - and: - <condition2> - <condition3>
⑧not
操作接收否定的條件:
not: <condition>
example,配置條件NOT status = ok
not: equals: status: OK
可以在相同條件下使用and指定多個字段,(如:field1 AND fields)