Splunk:使用唯一字段记录重复数据删除
Splunk : Record deduplication using an unique field
我们正在考虑将日志分析解决方案从 ElasticSearch/Kibana 移至 Splunk。
我们目前在 ElasticSearch 中使用“文档 ID”在索引时删除重复记录:
https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-index_.html
我们使用每个日志记录的内容的哈希值生成 id。
在Splunk中,我找到了Splunk索引中每条记录唯一的内部字段“_cd”:https://docs.splunk.com/Documentation/Splunk/8.1.0/Knowledge/Usedefaultfields
但是,使用 HTTP 事件收集器获取记录时,我找不到任何方法将此“_cd”字段嵌入到请求中:
https://docs.splunk.com/Documentation/Splunk/8.1.0/Data/HECExamples
关于如何在 Splunk 中实现此目的的任何提示?
HEC 输入不通过通常的摄取管道,因此并非所有内部字段都存在。
这并不重要,真的,因为 Splunk 不会在索引时删除重复数据。没有提供搜索数据以查看给定记录是否已经存在的规定。任何重复数据删除都必须在搜索时完成。
不能在搜索时使用 _cd 字段进行重复数据删除,因为两个相同的记录将具有不同的 _cd 值。
考虑使用 Cribl 等工具为每条提取的记录添加哈希,并在 Splunk 中使用该哈希在您的搜索中删除重复数据。
你想达到什么目的?
如果您向 HEC 发送“唯一”事件,或者您是“唯一”日志上的 运行 UF,您永远不会得到重复的“索引时的记录”。
它听起来像你一样(也许是例行公事?)将相同的数据重新发送到你的聚合平台——这不是聚合器[=46=的问题],但使用您的 发送 流程。
几乎就像您在执行 MySQL/PostgreSQL“如果不存在则插入”操作。如果那是对你的情况的正确理解,根据你的说法
We currently use "document id" in ElasticSearch to deduplicate records when indexing:
https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-index_.html
We generate the id using hash of the content of the each log-record.
那么您需要评估在您的发送过程中出现了什么“错误”,您认为您需要在接收数据之前预先清理数据。
Splunk 确实不会“在编制索引时删除重复记录”- 因为它假定 传入的数据是 'correct' 来自任何提交数据的数据.
您首先是如何获得重复数据的?
Splunk 中以下划线开头的字段(例如 _time
、_cd
等)是 not editable/sendable - 它们由 Splunk 在接收数据时生成。 IOW,它们都是 内部 字段。可搜索。可用。但不可覆盖。
如果你真的有[很多of/too很多]重复数据的问题,并且没有办法修复您的发送过程[es],然后您将需要依赖重复数据删除operations in SPL when searching for/reporting on whatever you've ingested (primarily by using stats
and, when absolutely necessary/unavoidable, dedup
)。
@RichG 打得好。 Cribl
对此用例有一些不错的选择。
https://cribl.io/blog/streaming-data-deduplication-with-cribl/
请注意,如果您使用 Cribl LogStream
,您可以向 HEC
数据添加其他字段。使用 LogStream
可以获得更多选项。它为我的老团队节省了很多时间和精力。
我们正在考虑将日志分析解决方案从 ElasticSearch/Kibana 移至 Splunk。
我们目前在 ElasticSearch 中使用“文档 ID”在索引时删除重复记录:
https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-index_.html
我们使用每个日志记录的内容的哈希值生成 id。
在Splunk中,我找到了Splunk索引中每条记录唯一的内部字段“_cd”:https://docs.splunk.com/Documentation/Splunk/8.1.0/Knowledge/Usedefaultfields
但是,使用 HTTP 事件收集器获取记录时,我找不到任何方法将此“_cd”字段嵌入到请求中: https://docs.splunk.com/Documentation/Splunk/8.1.0/Data/HECExamples
关于如何在 Splunk 中实现此目的的任何提示?
HEC 输入不通过通常的摄取管道,因此并非所有内部字段都存在。
这并不重要,真的,因为 Splunk 不会在索引时删除重复数据。没有提供搜索数据以查看给定记录是否已经存在的规定。任何重复数据删除都必须在搜索时完成。
不能在搜索时使用 _cd 字段进行重复数据删除,因为两个相同的记录将具有不同的 _cd 值。
考虑使用 Cribl 等工具为每条提取的记录添加哈希,并在 Splunk 中使用该哈希在您的搜索中删除重复数据。
你想达到什么目的?
如果您向 HEC 发送“唯一”事件,或者您是“唯一”日志上的 运行 UF,您永远不会得到重复的“索引时的记录”。
它听起来像你一样(也许是例行公事?)将相同的数据重新发送到你的聚合平台——这不是聚合器[=46=的问题],但使用您的 发送 流程。
几乎就像您在执行 MySQL/PostgreSQL“如果不存在则插入”操作。如果那是对你的情况的正确理解,根据你的说法
We currently use "document id" in ElasticSearch to deduplicate records when indexing:
https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-index_.html
We generate the id using hash of the content of the each log-record.
那么您需要评估在您的发送过程中出现了什么“错误”,您认为您需要在接收数据之前预先清理数据。
Splunk 确实不会“在编制索引时删除重复记录”- 因为它假定 传入的数据是 'correct' 来自任何提交数据的数据.
您首先是如何获得重复数据的?
Splunk 中以下划线开头的字段(例如 _time
、_cd
等)是 not editable/sendable - 它们由 Splunk 在接收数据时生成。 IOW,它们都是 内部 字段。可搜索。可用。但不可覆盖。
如果你真的有[很多of/too很多]重复数据的问题,并且没有办法修复您的发送过程[es],然后您将需要依赖重复数据删除operations in SPL when searching for/reporting on whatever you've ingested (primarily by using stats
and, when absolutely necessary/unavoidable, dedup
)。
@RichG 打得好。 Cribl
对此用例有一些不错的选择。
https://cribl.io/blog/streaming-data-deduplication-with-cribl/
请注意,如果您使用 Cribl LogStream
,您可以向 HEC
数据添加其他字段。使用 LogStream
可以获得更多选项。它为我的老团队节省了很多时间和精力。