- Mark as New
- Bookmark Message
- Subscribe to Message
- Mute Message
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
guywood13
Path Finder
02-13-2024
07:14 AM
index=myindex source="/var/log/nginx/access.log" |
eval status_group=case(status!=200, "fail", status=200, "success") |
stats count by status_group |
eventstats sum(count) as total |
eval percent= round(count*100/total,2) |
where status_group="fail"
Looking at nginx access logs for a web application. This query tells me the amount of failures (non 200), total amount of calls (all msgs in log) and the % of failures vs total. As follows:
status_group | count | percent | total |
fail | 20976 | 2.00 | 1046605 |
What I'd like to do next is timechart these every 30m to see what % of failures I get in 30 min windows but the only attempt where I got close did it as a % of the total calls in the log skewing the result completely. Basically a row like above but for every 30 min of my search period. Feel free to rewrite the entire query as I cobbled this together anyway.
1 Solution
- Mark as New
- Bookmark Message
- Subscribe to Message
- Mute Message
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
ITWhisperer

SplunkTrust
02-13-2024
08:45 AM
Try something like this
index=myindex source="/var/log/nginx/access.log"
| bin _time span=30m
| stats count as total count(eval(status!=200)) as fail by _time
| eval percent= round(fail*100/total,2)
- Mark as New
- Bookmark Message
- Subscribe to Message
- Mute Message
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
ITWhisperer

SplunkTrust
02-13-2024
08:45 AM
Try something like this
index=myindex source="/var/log/nginx/access.log"
| bin _time span=30m
| stats count as total count(eval(status!=200)) as fail by _time
| eval percent= round(fail*100/total,2)
- Mark as New
- Bookmark Message
- Subscribe to Message
- Mute Message
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
guywood13
Path Finder
02-15-2024
02:51 AM
Works perfect, thanks!
