Splunk仪表板API每日成功率百分比图表查询需求及优化
按天统计ABC API成功率的Splunk查询方案
原查询的问题分析
- 语法错误:
stats(unique_failure_string)写法错误,正确格式应为stats count(unique_failure_string) - 拼写错误:
sucessCall、fialuresCall应为successCall、failuresCall - 缺少按天聚合逻辑:原查询仅统计整个时间段的总调用数,无法生成每日数据图表
- 成功率计算逻辑错误:正确公式应为 *成功数/(成功数+失败数)100,而非成功数/失败数
- 数据对齐风险:使用
appendcols可能因两个子查询时间范围不匹配导致数据对应错误,推荐单搜索合并统计
正确的查询语句
场景1:成功/失败日志在同一索引中(推荐)
如果成功日志含关键词"ABC Api call success",失败日志含"ABC Failure call",用单搜索合并统计更高效:
index=app_index ("ABC Api call success" OR "ABC Failure call") | eval call_status=if(searchmatch("ABC Api call success"), "success", "failure") | bin _time span=1d // 按天对时间分箱,实现每日聚合 | stats count(unique_success_string) as successCall, count(unique_failure_string) as failuresCall by _time, call_status | stats sum(successCall) as total_success, sum(failuresCall) as total_failure by _time | eval success_rate=round((total_success/(total_success + total_failure))*100, 2) | eval availability=success_rate // 可用性与成功率逻辑一致,需调整可自行修改 | fields _time success_rate availability
场景2:成功/失败日志需分开搜索(兼容需求)
若必须拆分搜索,需保证时间维度对齐,避免数据错位:
index=app_index "ABC Api call success" | bin _time span=1d | stats count(unique_success_string) as successCall by _time | join _time type=outer [ search index=app_index "ABC Failure call" | bin _time span=1d | stats count(unique_failure_string) as failuresCall by _time ] | eval successCall=coalesce(successCall, 0) // 处理某天无成功调用的空值情况 | eval failuresCall=coalesce(failuresCall, 0) // 处理某天无失败调用的空值情况 | eval success_rate=round((successCall/(successCall + failuresCall))*100, 2) | eval availability=success_rate | fields _time success_rate availability
关键说明
bin _time span=1d:是实现每日数据聚合的核心,确保图表按天展示coalesce:避免因某天无成功/失败调用出现空值,导致计算报错round(...,2):将成功率保留两位小数,提升图表数据可读性- 若
unique_success_string是请求唯一标识(如请求ID),count(unique_success_string)用于统计去重后的真实调用数;无需去重则直接用count即可
内容的提问来源于stack exchange,提问作者fregp
相关产品推荐
相关产品推荐

