You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Splunk中无需子查询过滤出占99.9%流量的请求详情

单遍数据处理实现保留99.9%流量请求分类的散点图数据生成

问题描述

我需要基于服务访问日志构建散点图:X轴为每小时总请求数,Y轴为特定请求分类每小时的请求次数,最终输出格式为requestDetails, per_hour, count。

当前使用的查询语句为:

<base query setting requestDetails>| bucket _time span=1h| stats count by _time, requestDetails| eventstats sum(count) as per_hour by _time| table requestDetails, per_hour, count

但存在低频请求干扰图表的问题,希望仅保留占99.9%流量的requestDetails。尝试过子查询方案,但两次提取数据成本高,且预过滤会导致per_hour值缺失被过滤行的数据,因此想通过eventstats或streamstats单遍处理数据实现后过滤,请问是否可行?若可行,查询语句是什么?

解决方案

可行,通过eventstats结合累积百分比计算可以实现单遍处理后过滤。具体查询语句如下:

<base query setting requestDetails>
| bucket _time span=1h
| stats count as req_count by _time, requestDetails
| eventstats sum(req_count) as per_hour by _time
| eventstats sum(req_count) as total_by_req by requestDetails
| eventstats sum(total_by_req) as global_total
| eval req_pct = total_by_req / global_total
| sort -req_pct
| streamstats sum(req_pct) as cumulative_pct
| where cumulative_pct <= 0.999
| table requestDetails, per_hour, req_count
| rename req_count as count

语句解释

  • 先按小时和请求分类统计每类请求的小时次数req_count,同时用eventstats计算每小时总请求数per_hour。
  • 再用eventstats统计每个requestDetails的全局总请求量total_by_req,以及所有请求的全局总流量global_total。
  • 计算每个请求分类的流量占比req_pct,按占比降序排序后,用streamstats计算累积占比cumulative_pct。
  • 过滤累积占比≤99.9%的请求分类,最后调整字段名并输出所需格式。

这种方式仅遍历一次原始数据,避免了子查询的重复提取,同时per_hour基于完整小时数据计算,不会因过滤出现数据缺失。

内容的提问来源于stack exchange,提问作者John Arrowwood

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 21:18:38