JSON 过滤器插件

编辑
  • 插件版本: v3.2.1
  • 发布日期: 2023-12-18
  • 变更日志

对于其他版本,请参阅版本化插件文档

获取帮助

编辑

有关插件的问题,请在Discuss论坛中打开一个主题。 对于错误或功能请求,请在Github中打开一个问题。有关 Elastic 支持的插件列表,请查阅Elastic 支持矩阵

描述

编辑

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

默认情况下,它会将解析后的 JSON 放置在 Logstash 事件的根(顶层)中,但可以使用 target 配置将此过滤器配置为将 JSON 放置到任何任意事件字段中。

当事件解析过程中出现问题时,此插件有一些回退方案。 如果 JSON 解析在数据上失败,则事件将保持不变,并且将被标记为 _jsonparsefailure;然后您可以使用条件来清理数据。您可以使用 tag_on_failure 选项配置此标记。

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

事件元数据和 Elastic Common Schema (ECS)

编辑

无论 ECS 兼容性如何,插件的行为都相同,只是在启用 ECS 且未设置 target 时会发出警告。

设置 target 选项以避免潜在的模式冲突。

JSON 过滤器配置选项

编辑

此插件支持以下配置选项,以及稍后描述的通用选项

另请参阅通用选项,其中列出了所有过滤器插件支持的选项。

 

ecs_compatibility

编辑
  • 值类型为字符串
  • 支持的值为

    • disabled:不使用与 ECS 兼容的字段名称
    • v1:符合 Elastic Common Schema 的行为(当未设置 target 时会发出警告)

控制此插件与Elastic Common Schema (ECS)的兼容性。 有关详细信息,请参阅事件元数据和 Elastic Common Schema (ECS)

skip_on_invalid_json

编辑

允许在无效 JSON 上跳过过滤器(这允许您在没有警告的情况下处理 JSON 和非 JSON 数据)

source

编辑
  • 这是一个必需设置。
  • 值类型为字符串
  • 此设置没有默认值。

JSON 过滤器的配置

    source => source_field

例如,如果您在 message 字段中有 JSON 数据

    filter {
      json {
        source => "message"
      }
    }

以上操作将从 message 字段解析 JSON。

tag_on_failure

编辑
  • 值类型为数组
  • 默认值为["_jsonparsefailure"]

当没有成功匹配时,将值附加到 tags 字段

target

编辑
  • 值类型为字符串
  • 此设置没有默认值。

定义用于放置解析数据的目标字段。如果省略此设置,JSON 数据将存储在事件的根(顶层)中。

例如,如果您希望将数据放入 doc 字段

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

source 字段的值中的 JSON 将扩展到 target 字段中的数据结构中。

如果 target 字段已存在,它将被覆盖!

通用选项

编辑

所有过滤器插件都支持以下配置选项

add_field

编辑
  • 值类型为哈希
  • 默认值为{}

如果此过滤器成功,则将任何任意字段添加到此事件。字段名称可以是动态的,并使用 %{field} 包含事件的一部分。

示例

    filter {
      json {
        add_field => { "foo_%{somefield}" => "Hello world, from %{host}" }
      }
    }
    # You can also add multiple fields at once:
    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}" ]
      }
    }
    # You can also add multiple tags at once:
    filter {
      json {
        add_tag => [ "foo_%{somefield}", "taggedy_tag"]
      }
    }

如果事件具有字段 "somefield" == "hello",则此过滤器在成功后,将添加一个标签 foo_hello(第二个示例当然会添加一个 taggedy_tag 标签)。

enable_metric

编辑

禁用或启用此特定插件实例的指标日志记录。默认情况下,我们会记录所有可以记录的指标,但是您可以禁用特定插件的指标收集。

  • 值类型为字符串
  • 此设置没有默认值。

向插件配置添加唯一的 ID。 如果未指定 ID,Logstash 将生成一个。强烈建议在您的配置中设置此 ID。当您有两个或多个相同类型的插件时,这尤其有用,例如,如果您有 2 个 json 过滤器。在这种情况下添加命名 ID 将有助于在使用监视 API 时监视 Logstash。

    filter {
      json {
        id => "ABC"
      }
    }

id 字段中的变量替换仅支持环境变量,不支持使用来自密钥存储的值。

periodic_flush

编辑

定期调用过滤器刷新方法。可选。

remove_field

编辑
  • 值类型为数组
  • 默认值为[]

如果此过滤器成功,则从此事件中删除任意字段。字段名称可以是动态的,并使用 %{field} 包含事件的一部分。示例

    filter {
      json {
        remove_field => [ "foo_%{somefield}" ]
      }
    }
    # You can also remove multiple fields at once:
    filter {
      json {
        remove_field => [ "foo_%{somefield}", "my_extraneous_field" ]
      }
    }

如果事件具有字段 "somefield" == "hello",则此过滤器在成功后,如果存在,将删除名称为 foo_hello 的字段。第二个示例将删除一个额外的、非动态字段。

remove_tag

编辑
  • 值类型为数组
  • 默认值为[]

如果此过滤器成功,则从此事件中删除任意标签。 标签可以是动态的,并使用 %{field} 语法包含事件的一部分。

示例

    filter {
      json {
        remove_tag => [ "foo_%{somefield}" ]
      }
    }
    # You can also remove multiple tags at once:
    filter {
      json {
        remove_tag => [ "foo_%{somefield}", "sad_unwanted_tag"]
      }
    }

如果事件具有字段 "somefield" == "hello",则此过滤器在成功后,如果存在,将删除标签 foo_hello。第二个示例也将删除一个不需要的悲伤标签。