1. Json Filter
功能概述
這是一個JSON解析過濾器。它接受一個包含JSON的現有字段,並將其擴展為Logstash事件中的實際數據結構。
默認情況下,它將把解析過的JSON放在Logstash事件的根(頂層)中,但是這個過濾器可以配置為使用目標配置將JSON放到任意的事件字段中。
如果JSON解析在數據上失敗了,事件將不會受到影響,它將被標記為_jsonparsefailure,然后您可以使用條件來清理數據。您可以使用tag_on_failure選項配置此標記。
如果解析后的數據包含@timestamp字段,我們將嘗試將其用於事件的@timestamp,如果解析失敗,該字段將被重命名為_@timestamp,事件將被標記為_timestampparsefailure。
Json 過濾器配置選項
Setting | Input type | Required |
---|---|---|
|
boolean |
No |
|
string |
Yes |
|
array |
No |
|
string |
No |
skip_on_invalid_json:
允許在無效的json上跳過過濾器(允許不帶警告地處理json和非json數據)
source:
source => source_field
例如json數據在message字段中,將會從message字段中解析json數據
filter { json { source => "message" } }
tag_on_failure:
默認值["_jsonparsefailure"]當沒有成功匹配時,將值附加到標記字段
例如:
target:
定義放置已解析數據的目標字段。如果省略此設置,則JSON數據將存儲在事件的根(頂層)。源字段值中的JSON將擴展為目標字段中的數據結構。
例如將解析后的結果放到MyMessage字段
filter { json { target => "MyMessage" } }
通用配置項
下述選項所有的過濾器都支持
Setting | Input type | Required |
---|---|---|
|
hash |
No |
|
array |
No |
|
boolean |
No |
|
string |
No |
|
boolean |
No |
|
array |
No |
|
array |
No |
add_field:
如果過濾成功,則向此事件添加任意字段。字段名可以是動態的,並使用%{Field}包含事件的一部分。
例如:
filter { json { add_field => { "foo_%{somefield}" => "Hello world, from %{host}" } } }
filter { json { add_field => { "foo_%{somefield}" => "Hello world, from %{host}" "new_field" => "new_static_value" } } }
如果事件具有字段“somefield”==“hello”,那么在成功時,這個過濾器將添加字段foo_hello(如果存在的話),上面的值和%{host}塊將被事件中的值替換。第二個示例還將添加硬編碼字段。
add_tag:
如果過濾成功,則向事件添加任意標記。標記可以是動態的,並使用%{field}語法包含事件的一部分。
例如:
filter { json { add_tag => [ "foo_%{somefield}" ] } }
filter { json { add_tag => [ "foo_%{somefield}", "taggedy_tag"] } }
如果事件有字段“somefield”==“hello”,這個過濾器在成功時,會添加一個標簽foo_hello(第二個例子當然會添加一個taggedy_tag標簽)。
enable_metric:
默認情況下,我們會記錄所有可以記錄的指標,但您可以為特定的插件禁用指標集合。
id:
向插件配置中添加唯一的ID。如果沒有指定ID, Logstash將生成一個ID。強烈建議在配置中設置此ID。如果您有兩個或多個相同類型的插件,例如,如果您有兩個json過濾器,
那么這是非常有用的。在這種情況下,在使用監視api時添加一個命名ID將有助於監視Logstash。
例如:
filter { json { id => "ABC" } }
periodic_flush:
定期調用filter flush方法。可選的。
periodic_flush:
如果過濾成功,則從此事件中刪除任意字段。例如:
filter { json { remove_field => [ "foo_%{somefield}" ] } }
filter { json { remove_field => [ "foo_%{somefield}", "my_extraneous_field" ] } }
如果事件中有字段“somefield”==“hello”,那么在成功時,如果存在名為foo_hello的字段,這個過濾器將刪除該字段。第二個示例將刪除一個額外的非動態字段。
remove_tag:
如果過濾成功,則從事件中刪除任意標記。標記可以是動態的,並使用%{field}語法包含事件的一部分。
例如:
filter { json { remove_tag => [ "foo_%{somefield}" ] } }
filter { json { remove_tag => [ "foo_%{somefield}", "sad_unwanted_tag"] } }
如果事件有字段“somefield”==“hello”,過濾成功時將會刪除foo_hello標記。第二個示例還將不想要的標記。
2. Json_encode Filter
功能概述
JSON編碼過濾器。獲取一個字段並將其序列化為JSON
如果沒有指定目標,則用JSON文本覆蓋源字段。(此過濾器非默認安裝的,需手動安裝bin/logstash-plugin install logstash-filter-json_encode)
例如,如果您有一個名為foo的字段,並且希望將JSON編碼的字符串存儲在bar中,例如:
filter { json_encode { source => "foo" target => "bar" } }
source :
需要轉換為json的字段
target:
寫入JSON的字段。如果沒有指定,源字段將被覆蓋。
本文內容主要翻譯自官方文檔:https://www.elastic.co/guide/en/logstash/current/plugins-filters-json.html