按 Splunk 中的日期按字段值分组的输出计数

Output counts grouped by field values by for date in Splunk

我有一个名为 http_logs 的 Splunk 索引,其中包含以下字段:

我正在尝试使用此数据创建一个 table,如下所示:

Requester Today Yesterday Last Seven Days
Service 1 100 (2) 300 (4) 2000 (7)
Service 2 120 (3) 275 (3) 2400 (9)

...

如上面的table所示,每列有两个值:

  1. 时间范围(即今天、昨天、过去 7 天)status_code 在 200-299 范围内的 http_logs 的数量
  2. 在时间范围内(即今天、昨天、过去 7 天)status_code 超出 200-299 的 http_logs 的数量

目前,我有以下 Splunk 查询:

index="http_logs"
earliest=-6d@d
latest=now
| fields requester status_code _time
| table requester 

我不知道如何在对具有特定值的字段进行分组时格式化 table。这甚至可以通过 Splunk 查询实现吗?

Splunk 表通常在每个单元格中有一个值。要将多个值放入一个单元格,我们通常将这些值连接成一个值。

为了获得不同时间段的计数,我们通常运行 分开搜索并合并结果。

请注意在 stats 命令中使用 sum 而不是 count。这是因为 eval 函数总是 returns 一个值(0 或 1)并对它们进行计数会得出结果总数,而不是符合条件的事件数。

```Get today's events```
index=http_logs earliest=@d
| eval success=if(status_code>=200 status_code<=299, 1, 0)
```Count successes and failures```
| stats sum(eval(success=1)) as today_success, sum(eval(success=0)) as today_fail by requester
```Repeat for yesterday's events```
| append [ search index=http_logs earliest=-1d@d latest=@d
  | eval success=if(status_code>=200 status_code<=299, 1, 0)
  | stats sum(eval(success=1)) as yesterday_success, sum(eval(success=0)) as yesterday_fail by requester ]
```Repeat for the last 7 days' events```
| append [ search index=http_logs earliest=-7d@d latest=now
  | eval success=if(status_code>=200 status_code<=299, 1, 0)
  | stats sum(eval(success=1)) as sevenday_success, sum(eval(success=0)) as sevenday_fail by requester ]
```Put the results together```
| stats values(*) as * by requester
```Build the display values```
| eval Today = today_success . " (" . today_fail . ")"
| eval Yesterday = yesterday_success . " (" . yesterday_fail . ")"
| eval "Last Seven Days" = sevenday_success . " (" . sevenday_fail . ")"
| rename requester as Requester
```Display the results```
| table Requester Today Yesterday "Last Seven Days"