這是一個JSON解析過濾器。它接受一個包含JSON的現有字段,並將其擴展爲Logstash事件中的實際數據結構。html
默認狀況下,它將把解析過的JSON放在Logstash事件的根(頂層)中,可是這個過濾器能夠配置爲使用目標配置將JSON放到任意的事件字段中。web
若是JSON解析在數據上失敗了,事件將不會受到影響,它將被標記爲_jsonparsefailure,而後您可使用條件來清理數據。您可使用tag_on_failure選項配置此標記。json
若是解析後的數據包含@timestamp字段,咱們將嘗試將其用於事件的@timestamp,若是解析失敗,該字段將被重命名爲_@timestamp,事件將被標記爲_timestampparsefailure。api
Setting | Input type | Required |
---|---|---|
|
booleanide |
Nojsonp |
|
string編碼 |
Yesspa |
|
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標記。第二個示例還將不想要的標記。
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