Based on an event log we would like to find event type which frequency changed by 50% or more over a 5 min window.
Using my limited Splunk knowledge and heavy Googling, I came up with something like this:
index=index_of_events | eval cnt=1 | timechart span=20s limit=40 per_second(cnt) as ev by ev_typeuseother=f usenull=f |
streamstats window=40 global=false first(ev) as start last(ev) as end by ev_type |
eval diff=abs(start-end) | eval max_val=max(start, end) |
where diff > 0 AND max > 0 | eval prc=100*diff/max_val | where prc > 50
I'm getting reasonable output after streamstats
, but then I'm losing the data.
Was it OK to pipe timechart
directly into streamstats
? Did I need untable
(or something) in between?
How do I get it right?
See if this gets you what you're looking for
index=index_of_events | bin span=5m _time | stats count by _time evtype | streamstats window=1 current=f global=f first(count) as start by evtype | eval diff=(abs(start-count)/start)*100 | where diff>50
Unfortunately I do not believe it solves my problem, as it compares adjacent number of events, while I need to compare frequencies. In physics terms, I need to measure drops of speed and not distance. That's why I used per_second()
.
Have I missed something in your solution?
What is wrong with my query? Can it be somehow salvaged?