如何为不存在的时间段生成行?

时间:2018-03-05 13:32:58

标签: splunk splunk-query splunk-formula

我制作了这样一张桌子:

+----------+---------+---------+-------+
| _time    | field_1 | field_2 | count |
+----------+---------+---------+-------+
| 08:00:00 | A       | 1       | 2     |
+----------+---------+---------+-------+
| 08:00:00 | B       | 1       | 4     |
+----------+---------+---------+-------+
| 08:00:03 | B       | 3       | 1     |
+----------+---------+---------+-------+
| 08:00:03 | A       | 2       | 3     |
+----------+---------+---------+-------+

我想知道: 什么是平均值&最大计数,每(field_1 + field_2)组合,每秒。 问题是_time缺少几秒钟,因此stats count结果只给出了现有时间段的聚合结果。

如何为每个(field_1 + field_2)组合扩展此表以包含每个缺失时间秒,只需填充count = 0?只要我能做到这一点,我就可以通过stats avg(count) max(count) by field_1 field_2来获得结果。

2 个答案:

答案 0 :(得分:1)

我也在这里发布了我的问题:https://answers.splunk.com/answers/624043/how-to-produce-rows-for-non-existing-time-buckets.html,我得到了一个很好的答案来填补丢失的时间段。

<your base search> 
| eval field= field_1 + "|" + field_2 
| timechart limit=0 span=1s count by field
| fillnull value=0
| untable _time field count 
| eval temp = split(field,"|") 
| eval field_1 = mvindex(temp,0) 
| eval field_2 = mvindex(temp,1) 
| stats sum(count) as count by field_1 field_2 _time | sort- _time

答案 1 :(得分:0)

没有数据就很难调试。但是,不是为每个field1 / field2组合的每个缺失秒添加额外的条目,而是可以执行以下操作:

your_query
| eventstats earliest(_time) as etime, latest(_time) as ltime by field1, field2
| stats sum(count) as c, max(count) as maxCount, values(etime) as etime, values(ltime) as ltime by field1, field2
| eval avgCount = c/(ltime-etime)
| table field1, field2, avgCount, maxCount

这将找到每个field1 + field2组合的最新时间和最早时间。然后,通过将field1 + field2组合的所有计数的总和除以秒数(最新最早)来手动计算平均值。