指纹过滤器插件

编辑
  • 插件版本:v3.4.4
  • 发布日期:2024-03-19
  • 更新日志

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

获取帮助

编辑

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

描述

编辑

创建一个或多个字段的一致哈希值(指纹),并将结果存储在一个新字段中。

当事件插入 Elasticsearch 时,您可以使用此插件来创建一致的文档 ID。这种方法意味着可以更新现有文档,而不是创建新文档。

method 选项设置为 UUID 时,结果将不是一致的哈希值,而是一个随机的 UUID。要生成 UUID,请首选 uuid 过滤器

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

编辑

此插件将哈希值作为标识符添加到事件中。您可以配置 target 选项来更改输出字段。

当禁用 ECS 兼容性时,哈希值存储在 fingerprint 字段中。启用 ECS 时,该值存储在 [event][hash] 字段中。

以下是 ECS 兼容模式如何影响输出。

禁用 ECS ECS v1 可用性 描述

fingerprint

[event][hash]

总是

事件的哈希值

指纹过滤器配置选项

编辑

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

设置 输入类型 必需

base64encode

布尔值

concatenate_sources

布尔值

concatenate_all_fields

布尔值

ecs_compatibility

字符串

key

密码

method

字符串,可以是 ["SHA1", "SHA256", "SHA384", "SHA512", "MD5", "MURMUR3", "MURMUR3_128", IPV4_NETWORK", "UUID", "PUNCTUATION"] 中的一个

source

数组

target

字符串

另请参阅通用选项,以获取所有过滤器插件支持的选项列表。

 

base64encode

编辑

设置为 true 时,SHA1SHA256SHA384SHA512MD5MURMUR3_128 指纹方法将生成 base64 编码而不是十六进制编码的字符串。

concatenate_sources

编辑

当设置为 truemethod 不是 UUIDPUNCTUATION 时,插件会将 source 选项中给出的所有字段的名称和值连接成一个字符串(如旧的 checksum 过滤器),然后再进行指纹计算。

如果 false 并且给出了多个源字段,则目标字段将是最后一个源字段的单个指纹。

示例:concatenate_sources=false

此示例生成一个从 “birthday”(最后一个源字段)计算的单个指纹。

fingerprint {
  source => ["user_id", "siblings", "birthday"]
}

输出为

"fingerprint" => "6b6390a4416131f82b6ffb509f6e779e5dd9630f".

示例:concatenate_sources=false 与数组

如果最后一个源字段是一个数组,您将获得一个指纹数组。

在此示例中,“siblings” 是一个数组 ["big brother", "little sister", "little brother"]。

fingerprint {
  source => ["user_id", "siblings"]
}

输出为

 "fingerprint" => [
        [0] "8a8a9323677f4095fcf0c8c30b091a0133b00641",
        [1] "2ce11b313402e0e9884e094409f8d9fcf01337c2",
        [2] "adc0b90f9391a82098c7b99e66a816e9619ad0a7"
    ],

concatenate_all_fields

编辑

当设置为 truemethod 不是 UUIDPUNCTUATION 时,插件会将事件的所有字段的名称和值连接成一个字符串(如旧的 checksum 过滤器),然后再进行指纹计算。如果 false 且至少给出了一个源字段,则目标字段将是包含给定源字段指纹的数组。

ecs_compatibility

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

    • disabled:在根级别添加非结构化数据
    • v1:使用与 Elastic Common Schema 兼容的 [event][hash] 字段

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

  • 值类型为 密码
  • 此设置没有默认值。

IPV4_NETWORK 方法一起使用时,请填写子网前缀长度。对于其他方法,可选择填写 HMAC 密钥。

method

编辑
  • 这是一个必需的设置。
  • 值可以是:SHA1SHA256SHA384SHA512MD5MURMUR3MURMUR3_128IPV4_NETWORKUUIDPUNCTUATION 中的任何一个
  • 默认值为 "SHA1"

要使用的指纹方法。

如果设置为 SHA1SHA256SHA384SHA512MD5 且设置了密钥,则使用相应的加密哈希函数和密钥哈希 (HMAC) 摘要函数来生成指纹。

如果设置为 MURMUR3MURMUR3_128,则将使用非加密 MurmurHash 函数(分别为 32 位或 128 位实现)。

如果设置为 IPV4_NETWORK,则输入数据需要是 IPv4 地址,哈希值将是使用 key 选项中指定的位数屏蔽的地址。例如,如果输入为“1.2.3.4”,并且 key 设置为 16,则哈希值变为“1.2.0.0”。

如果设置为 PUNCTUATION,则所有非标点字符将从输入字符串中删除。

如果设置为 UUID,将生成一个 UUID。结果将是随机的,因此不是一致的哈希值。

source

编辑
  • 值类型为 数组
  • 默认值为 "message"

将使用其内容来创建指纹的源字段的名称。如果给出了一个数组,请参阅 concatenate_sources 选项。

target

编辑
  • 值类型为 字符串
  • 当禁用 ECS 时,默认值为 "fingerprint"
  • 当启用 ECS 时,默认值为 "[event][hash]"

将存储生成的指纹的字段的名称。该字段的任何当前内容都将被覆盖。

通用选项

编辑

所有过滤器插件都支持这些配置选项

add_field

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

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

示例

    filter {
      fingerprint {
        add_field => { "foo_%{somefield}" => "Hello world, from %{host}" }
      }
    }
    # You can also add multiple fields at once:
    filter {
      fingerprint {
        add_field => {
          "foo_%{somefield}" => "Hello world, from %{host}"
          "new_field" => "new_static_value"
        }
      }
    }

如果事件具有字段 "somefield" == "hello",则此过滤器在成功时将添加字段 foo_hello (如果存在),其值如上所示,并且 %{host} 部分将替换为事件中的该值。第二个示例还将添加一个硬编码字段。

add_tag

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

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

示例

    filter {
      fingerprint {
        add_tag => [ "foo_%{somefield}" ]
      }
    }
    # You can also add multiple tags at once:
    filter {
      fingerprint {
        add_tag => [ "foo_%{somefield}", "taggedy_tag"]
      }
    }

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

enable_metric

编辑

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

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

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

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

id 字段中的变量替换仅支持环境变量,不支持使用 secret store 中的值。

periodic_flush

编辑

以固定时间间隔调用过滤器刷新方法。可选。

remove_field

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

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

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

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

remove_tag

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

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

示例

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

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