Splunk 排序 - > 流统计在 100 个数百万个事件上非常慢



我下面有一个简化的查询,它被sort 0 start_time语句阻塞了(我想(,因为我有数亿个事件要处理。

...
| sort 0 start_time
| streamstats current=t first(start_time) by id
...

从理论上讲,我不需要按start_time对所有事件进行排序。

我只需要在具有相同id的每组事件中按start_time对事件进行排序。

因此,如果我可以让Splunk首先在id上构建一个哈希表,然后它可以使用该哈希表对id进行分组,然后在每个组中按start_time进行排序。我想这会快得多。

注意:每组(按id(包含1-10个事件,这就是为什么在每组内排序而不是对所有事件排序要快得多。

有没有办法让我这么做?还是一种完全替代的方法?

编辑

谢谢你的评论@charlie。也许这可以用stats来完成

以下是我的活动的简化结构:

id: str
n: int
start: timestamp
end: timestamp

在每个id组中,我需要:

  1. 最小start
  2. 最大end
  3. n之和
  4. 与具有最小CCD_ 14的事件相关联的CCD_。以上(

我有一个起点:

| stats min(start), max(end), sum(n) by id

但如上所述,我失踪了。我怎么能得到那个?

tl;dr:earliest/earliest_time统计函数可能会有所帮助:(

如果您的数据被摄入,使得start被解析到_time字段中,那么:

| stats min(start) max(end) sum(n) earliest(n) by id

我脑海中浮现出一个挥之不去的想法记忆,即事件需要按时间顺序排列,earliestearliest_time函数才能工作。。。但文档中没有提到

在我的测试堆栈上使用makeresults和random似乎做得不错,所以我想知道你的事件是否不使用startas_time,那么假设你的开始字段是Unix epoch时间格式。。。

| eval _time = start
| stats min(start) max(end) sum(n) earliest(n) by id

由于evalmin(start)应该与earliest_time(n)相同,如果所有具有id和start(_time(字段的事件都有一个n字段,否则您可能也需要在统计数据之前有一个| fillnull n

最新更新