Splunk:如何避免子搜索/appendpipe实现两种含bucket的stats操作?
解决Splunk单搜索完成多维度统计的方案
直接用两次stats命令就能搞定,不用子搜索、join或者appendpipe,性能比你之前的方案好很多,具体步骤如下:
- 先按1秒时间桶分组,计算每个
app_name每秒的请求数(tps)和每秒错误请求数 - 基于第一步的结果,汇总每个
app_name的总请求数、总错误数,以及每秒请求数的最大值(max_tps)
完整的搜索语句:
<你的基础搜索> | bucket span=1s _time | stats count as tps sum(eval(http_code>=400)) as errors_by_sec by _time app_name | stats sum(tps) as requests sum(errors_by_sec) as errors max(tps) as max_tps by app_name
各部分说明:
bucket span=1s _time:把所有事件按1秒的时间间隔分组,为计算每秒请求数做准备- 第一次
stats:按时间桶和app_name统计,count as tps得到每秒请求数;sum(eval(http_code>=400))统计每秒错误请求数(符合条件的请求被eval转为1,不符合为0,求和后就是每秒错误数) - 第二次
stats:按app_name汇总,sum(tps)是总请求数,sum(errors_by_sec)是总错误数,max(tps)就是每秒请求数的最大值
这种方式是线性处理数据,没有分支或关联操作,性能远优于appendpipe这类分支命令,完全满足你仅用stats相关命令的需求。
内容的提问来源于stack exchange,提问作者JosephCHW
相关产品推荐
相关产品推荐

