Logstash Json 过滤器插件

1. Json Filter

功能概述

这是一个JSON解析过滤器。它接受一个包含JSON的现有字段,并将其扩展为Logstash事件中的实际数据结构。

默认情况下,它将把解析过的JSON放在Logstash事件的根(顶层)中,但是这个过滤器可以配置为使用目标配置将JSON放到任意的事件字段中。

如果JSON解析在数据上失败了,事件将不会受到影响,它将被标记为_jsonparsefailure,然后您可以使用条件来清理数据。您可以使用tag_on_failure选项配置此标记。

如果解析后的数据包含@timestamp字段,我们将尝试将其用于事件的@timestamp,如果解析失败,该字段将被重命名为_@timestamp,事件将被标记为_timestampparsefailure。


Json 过滤器配置选项

Setting Input type Required

skip_on_invalid_json

boolean

No

source

string

Yes

tag_on_failure

array

No

target

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"]当没有成功匹配时,将值附加到标记字段

例如:

image

target:

定义放置已解析数据的目标字段。如果省略此设置,则JSON数据将存储在事件的根(顶层)。源字段值中的JSON将扩展为目标字段中的数据结构。

例如将解析后的结果放到MyMessage字段

filter {
  json {
    target => "MyMessage"
  }
}

通用配置项

下述选项所有的过滤器都支持
Setting Input type Required

add_field

hash

No

add_tag

array

No

enable_metric

boolean

No

id

string

No

periodic_flush

boolean

No

remove_field

array

No

remove_tag

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
posted @ 2018-10-22 19:42  阿木木在发呆  阅读(11861)  评论(0编辑  收藏  举报