Fingerprint 过滤器插件
编辑Fingerprint 过滤器插件
编辑- 插件版本:v3.4.4
- 发布日期:2024-03-19
- 变更日志
其他版本,请参见 版本化插件文档。
获取帮助
编辑如有任何关于插件的问题,请在 Discuss 论坛发帖提问。如发现错误或有功能需求,请在 Github 上提交 issue。如需查看 Elastic 支持的插件列表,请查阅 Elastic 支持矩阵。
描述
编辑创建一或多个字段的一致哈希值(指纹),并将结果存储在新字段中。
您可以使用此插件在将事件插入 Elasticsearch 时创建一致的文档 ID。这种方法意味着可以更新现有文档,而不是创建新文档。
事件元数据和 Elastic 通用架构 (ECS)
编辑此插件将哈希值作为标识符添加到事件中。您可以配置 target
选项来更改输出字段。
禁用 ECS 兼容性时,哈希值存储在 fingerprint
字段中。启用 ECS 时,该值存储在 [event][hash]
字段中。
以下是 ECS 兼容模式如何影响输出。
ECS 已禁用 | ECS v1 | 可用性 | 描述 |
---|---|---|---|
fingerprint |
[event][hash] |
始终 |
事件的哈希值 |
Fingerprint 过滤器配置选项
编辑此插件支持以下配置选项以及稍后描述的 常用选项。
设置 | 输入类型 | 必填 |
---|---|---|
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
字符串,以下之一 |
是 |
|
否 |
||
否 |
另请参见 常用选项,了解所有过滤器插件支持的选项列表。
base64encode
编辑- 值类型为 布尔值
- 默认值为
false
设置为 true
时,SHA1
、SHA256
、SHA384
、SHA512
、MD5
和 MURMUR3_128
指纹方法将生成 base64 编码的字符串,而不是十六进制编码的字符串。
concatenate_sources
编辑- 值类型为 布尔值
- 默认值为
false
设置为 true
且 method
不是 UUID
或 PUNCTUATION
时,插件会将 source
选项中给出的所有字段的名称和值连接成一个字符串(类似于旧的校验和过滤器),然后再进行指纹计算。
如果为 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
编辑- 值类型为 布尔值
- 默认值为
false
设置为 true
且 method
不是 UUID
或 PUNCTUATION
时,插件会将事件的所有字段的名称和值连接成一个字符串(类似于旧的校验和过滤器),然后再进行指纹计算。如果为 false
并且至少给出一个源字段,则目标字段将是一个包含给定源字段指纹的数组。
ecs_compatibility
编辑- 值类型为 字符串
-
支持的值为
-
disabled
:在根级别添加非结构化数据 -
v1
:使用与 Elastic 通用架构兼容的[event][hash]
字段
-
控制此插件与 Elastic 通用架构 (ECS) 的兼容性。有关详细信息,请参见 事件元数据和 Elastic 通用架构 (ECS)。
method
编辑- 这是一个必填设置。
- 值可以是以下任何一个:
SHA1
、SHA256
、SHA384
、SHA512
、MD5
、MURMUR3
、MURMUR3_128
、IPV4_NETWORK
、UUID
、PUNCTUATION
- 默认值为
"SHA1"
要使用的指纹方法。
如果设置为 SHA1
、SHA256
、SHA384
、SHA512
或 MD5
并且设置了密钥,则将使用相应的加密哈希函数和带密钥的哈希 (HMAC) 摘要函数来生成指纹。
如果设置为 MURMUR3
或 MURMUR3_128
,则将使用非加密 MurmurHash 函数(分别为 32 位或 128 位实现)。
如果设置为 IPV4_NETWORK
,则输入数据需要是 IPv4 地址,哈希值将是使用 key
选项中指定的位数屏蔽的地址。例如,如果输入为“1.2.3.4”并且 key
设置为 16,则哈希变为“1.2.0.0”。
如果设置为 PUNCTUATION
,则将从输入字符串中删除所有非标点符号字符。
如果设置为 UUID
,则会生成一个 UUID。结果将是随机的,因此不是一致的哈希值。
常用选项
编辑所有过滤器插件都支持这些配置选项
设置 | 输入类型 | 必填 |
---|---|---|
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
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
标签)。
id
编辑- 值类型为字符串
- 此设置没有默认值。
在插件配置中添加唯一的ID
。如果未指定ID,Logstash将生成一个。强烈建议在您的配置中设置此ID。当您有两个或多个相同类型的插件时,这尤其有用,例如,如果您有两个fingerprint过滤器。在这种情况下,添加命名ID将有助于在使用监控API监控Logstash时提供帮助。
filter { fingerprint { id => "ABC" } }
id
字段中的变量替换仅支持环境变量,不支持使用密钥存储中的值。
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
。第二个示例还将删除一个令人不快的,不需要的标签。