Splunk Search

Problems with rounding

rgcox1
Communicator

Having difficulty with simple rounding.

 index=_internal  group=per_sourcetype_thruput | eval gb=round(kb/1048576, 2)| stats sum(gb) sum(kb) by series |sort -sum(gb) 

Incorrect GB in result:
series                      sum(gb)                sum(kb)
wineventlog:security 1.66                      4727905.487416

index=_internal  group=per_sourcetype_thruput | eval gb=kb/1048576| stats sum(gb) sum(kb) by series |sort -sum(gb) 

Correct GB in result without rounding:
series                      sum(gb)                sum(kb)
wineventlog:security 4.5088820335775   4727905.487416

Have tried various versions of the base formula:
gb=round(kb/104856)
gb=round((kb/1024/1024), 2)
gb=round(((kb/1024)/1024), 2)
gb=round(kb/1024/1024)

But nothing works. What am I doing wrong?

Tags (1)
0 Karma
1 Solution

gkanapathy
Splunk Employee
Splunk Employee

If you round before summing up the values, you round off most of it before you can actually add it up. Most of the kb values are small. If you divide any number less than 10,000 by 1,000,000 (or 1,048,576) and round to 2 places, it comes out to zero, so you end up adding up a whole bunch of zeros.

The solution is to round after you sum, e.g.:

index=_internal group=per_sourcetype_thruput
| stats sum(kb) as sum_kb by series
| eval sum_gb=round(sum_kb/1048576,2)

View solution in original post

ashishganger
New Member

I think you need to sum the data in KB by Host rather than series. Each host has multiple sources and source types. It would be better to monitor the data throughput per host then series. Use the below search query:

index=_internal group=per_sourcetype_thruput | stats sum(kb) as DataKB, avg(kbps) as AVG-KBPS by host | eval DataGB=round(DataKB/1048576,2) | sort DataGB

0 Karma

ashishganger
New Member

Also mind that there should be no space while using the round function 🙂

0 Karma

assaftoval
New Member

The solution above it not working..

0 Karma

gkanapathy
Splunk Employee
Splunk Employee

If you round before summing up the values, you round off most of it before you can actually add it up. Most of the kb values are small. If you divide any number less than 10,000 by 1,000,000 (or 1,048,576) and round to 2 places, it comes out to zero, so you end up adding up a whole bunch of zeros.

The solution is to round after you sum, e.g.:

index=_internal group=per_sourcetype_thruput
| stats sum(kb) as sum_kb by series
| eval sum_gb=round(sum_kb/1048576,2)

rishiaggarwal
Explorer

I downvoted this post because solution is not working

0 Karma
Get Updates on the Splunk Community!

Unlock Database Monitoring with Splunk Observability Cloud

  In today’s fast-paced digital landscape, even minor database slowdowns can disrupt user experiences and ...

Purpose in Action: How Splunk Is Helping Power an Inclusive Future for All

At Cisco, purpose isn’t a tagline—it’s a commitment. Cisco’s FY25 Purpose Report outlines how the company is ...

[Upcoming Webinar] Demo Day: Transforming IT Operations with Splunk

Join us for a live Demo Day at the Cisco Store on January 21st 10:00am - 11:00am PST In the fast-paced world ...