如何在Splunk中以表格形式展示两次同索引搜索的同字段差值?
Splunk 计算同索引下不同Sourcetype字段差值的解决方案
先分析你之前方法的问题:
- multisearch方案:该命令是将两个搜索的事件流合并,每个事件仅包含
field1或field2其中一个字段,因此计算field2 - field1时,总有一个字段为null,最终无法得到有效差值。 - 条件判断方案:搜索条件
sourcetype=regression1 AND sourcetype=regression2逻辑矛盾,没有事件会同时属于两个不同的sourcetype,因此无搜索结果。
可行解决方案
场景1:两组数据存在关联字段(如时间戳、唯一ID)
如果regression1和regression2的数据是一一对应的(例如有共同的_time或自定义关联字段id),可以用stats按关联字段聚合计算:
index=main sourcetype IN (regression1, regression2) | eval seed_val = seed | stats values(eval(if(sourcetype="regression1", seed_val, null()))) as field1 values(eval(if(sourcetype="regression2", seed_val, null()))) as field2 by _time // 将_time替换为你的实际关联字段,如id | eval field3 = field2 - field1 | table field1 field2 field3
场景2:仅需计算两组数据的整体差值(如单条记录的差值)
如果两个sourcetype各只有一条数据,或只需取每组的第一个/所有值的差值,可直接用stats聚合:
index=main sourcetype IN (regression1, regression2) | stats first(eval(if(sourcetype="regression1", seed, null()))) as field1 first(eval(if(sourcetype="regression2", seed, null()))) as field2 | eval field3 = field2 - field1 | table field1 field2 field3
备选方案:使用append+stats
如果需要明确拆分两次搜索再合并,也可以用append:
index=main sourcetype=regression1 | eval field1 = seed | fields field1 | append [ search index=main sourcetype=regression2 | eval field2 = seed | fields field2 ] | stats values(field1) as field1 values(field2) as field2 | eval field3 = field2 - field1 | table field1 field2 field3
内容的提问来源于stack exchange,提问作者A.G.Progm.Enthusiast
相关产品推荐
相关产品推荐

