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 可以获得更多选项。它为我的老团队节省了很多时间和精力。