这是一个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