按 Splunk 中的日期按字段值分组的输出计数
Output counts grouped by field values by for date in Splunk
我有一个名为 http_logs
的 Splunk 索引,其中包含以下字段:
- _时间
- status_code
- status_text
- 请求者
我正在尝试使用此数据创建一个 table,如下所示:
Requester
Today
Yesterday
Last Seven Days
Service 1
100 (2)
300 (4)
2000 (7)
Service 2
120 (3)
275 (3)
2400 (9)
...
如上面的table所示,每列有两个值:
- 时间范围(即今天、昨天、过去 7 天)
status_code
在 200-299 范围内的 http_logs
的数量
- 在时间范围内(即今天、昨天、过去 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"
我有一个名为 http_logs
的 Splunk 索引,其中包含以下字段:
- _时间
- status_code
- status_text
- 请求者
我正在尝试使用此数据创建一个 table,如下所示:
Requester | Today | Yesterday | Last Seven Days |
---|---|---|---|
Service 1 | 100 (2) | 300 (4) | 2000 (7) |
Service 2 | 120 (3) | 275 (3) | 2400 (9) |
...
如上面的table所示,每列有两个值:
- 时间范围(即今天、昨天、过去 7 天)
status_code
在 200-299 范围内的http_logs
的数量 - 在时间范围内(即今天、昨天、过去 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"