Splunk如何生成类似数据库的自增identity列解决同时间戳日志乱序问题
问题解答
Splunk 本身没有内置类似数据库 identity 的全局自增列,因为 Splunk 是分布式架构,全局强制自增会带来极大的性能损耗,不过你可以通过以下两种成熟方案解决同时间戳日志的排序乱序问题:
方案1:直接使用 Splunk 内置字段
_cd排序
Splunk 会为每个写入的事件自动生成内置唯一标识_cd,格式为「桶ID:事件在桶内的偏移量」,同一分片内的事件偏移量严格随写入顺序递增。你只需要在搜索语句末尾加上排序规则即可:your search query | sort _time _cd单实例部署的 Splunk 用这个方法可以直接保证所有日志的正确顺序;如果是分布式集群,只要保证同业务来源的日志路由到同一个索引分片,也可以保证同来源日志的顺序完全正确,不需要改动任何写入侧的配置。
方案2:写入侧显式增加序列字段
如果你需要更可控的全局排序能力,可以在 .NET 侧的 NLog 配置中新增两个自定义字段随日志一起上传到 HEC:- 纳秒级精度的业务生成时间戳
- 同进程内的自增序列ID
搜索时按_time+ 自定义时间戳 + 自定义序列ID排序即可,即使多节点写入也可以通过标识节点ID的前缀来保证同节点日志的顺序。
注意:不建议在 Splunk 写入侧的 ingest pipeline 中生成自增序列,分布式场景下 pipeline 处理的顺序和事件实际写入顺序不一致,无法保证排序准确性。
内容的提问来源于stack exchange,提问作者user3401331
相关产品推荐
相关产品推荐

