Splunk按服务统计平均TPS时添加by service后无返回结果问题咨询
问题根因
你语法执行无返回的核心原因是timechart命令的输出特性:执行timechart span=1s count as TPS之后,结果仅会保留_time、TPS两个字段,你需要的service维度字段在这一步已经被聚合丢弃,后续stats by service找不到对应字段,自然返回空结果。
正确实现方案
要实现按服务维度拆分统计平均TPS,需要在秒级计数的步骤保留service字段,推荐使用如下两种写法:
写法1:直接使用timechart的by参数拆分维度
index="index" | transaction "correlationId" keepevicted=true | timechart span=1s count as TPS by service | stats avg(*) as avg_TPS_*
该写法输出结果会把每个服务的平均TPS作为独立字段展示,适合服务数量少的场景。
写法2:先分桶再二次统计(输出更规整)
index="index" | transaction "correlationId" keepevicted=true | bucket span=1s _time | stats count as per_second_tps by _time service | stats count as total_stat_seconds avg(per_second_tps) as avg_TPS by service
该写法每个服务独占一行结果,附带统计覆盖的总秒数可用于结果校验,适合服务数量多的场景。
可选优化建议
如果你的数据量较大,transaction命令性能会比较差,可以用stats命令替代实现相同的事务聚合逻辑:
index="index" | stats min(_time) as _time by correlationId service | bucket span=1s _time | stats count as per_second_tps by _time service | stats count as total_stat_seconds avg(per_second_tps) as avg_TPS by service
内容的提问来源于stack exchange,提问作者Erfan Tavoosi
相关产品推荐
相关产品推荐

