Splunk Search

Stats Count with Moving AVG for a given time

hartfoml
Motivator

OK this one might be a challenge

I 7 services that restart at midnight. I have a report that comes out at 7 AM that shows the volume of events since midnight. easy so far "start at 7 check back -7 hours stats count by host" simple right. well here is the hard part. I would like to put an AVG event number next to each reported event number line this "host Todays_count AVG_count". And harder the avg count should get the avg count of events for each host from 00:00 to 07:00 each day for the last 7 days. this will make it posable from the morning report to see A. is the server reporting event (this is the primary goal) B. is the server reporting about the right number of events (Secondary goal).

Any takers!!!

this is what I have now

sourcetype=foo earliest=-7h@h | stats count as events by host | sort host

Thanks in advance for your help

Mike H.

Tags (3)
0 Karma

jonuwz
Influencer

What about :

earliest=-14d@d <other search stuff here> date_hour>0 date_hour<7 | bin _time span=1d | stats count as "Todays Count" by host _time | streamstats window=7 avg("Todays Count") as "7 day Average" by host | tail 7

add current=false to streamstats if you dont want todays values affecting todays 7day average

This gives the the 7 day average derived from the previous 7 days, per day.

If this is just an operations check and you dont really need a 'rolling' average, just the average over the previous 7 days for the current day :

earliest=-7d@d date_hour>0 date_hour<7 | bin _time span=1d | stats count by host _time | eventstats avg(count) as average by host | eval average=round(average) | where _time >= relative_time(now(),"@d") | eval Day=strftime(_time,"%Y-%m-%d") | table Day host count average

sdaniels
Splunk Employee
Splunk Employee

That looks a lot cleaner to me. @hartfomi - let us know how it goes.

0 Karma

pierrejordonnel
Explorer

Worked like a champ for me! Love it!

0 Karma

sdaniels
Splunk Employee
Splunk Employee

This isn't elegant or efficient and someone else can hopefully make this better. This is for the last two days and you'd just have to expand it for the 7 days prior avg. I didn't know of a better way to reference your time period for the past days 7 hour window.

  sourcetype=foo earliest=-7h@h | stats count as currentDayCount by host 
    | appendcols [search sourcetype=foo earliest=-31h@h latest=-24h@h  | stats count as daybefore by host]
    | appendcols [search sourcetype=foo earliest=-55h@h latest=-48h@h | stats count as 2daysbefore by host]
    | eval avgLast2Days = (daybefore + 2daysbefore)/2 
    | table host currentDayCount avgLast2Days
0 Karma
Get Updates on the Splunk Community!

Fastest way to demo Observability

I’ve been having a lot of fun learning about Kubernetes and Observability. I set myself an interesting ...

September Community Champions: A Shoutout to Our Contributors!

As we close the books on another fantastic month, we want to take a moment to celebrate the people who are the ...

Splunk Decoded: Service Maps vs Service Analyzer Tree View vs Flow Maps

It’s Monday morning, and your phone is buzzing with alert escalations – your customer-facing portal is running ...