SumoLogic中如何在单查询内完成API请求多指标条件聚合
SumoLogic 单查询实现API多指标统计
需求说明
现有两类SumoLogic日志:
APIRequestStart:标记API请求发起APIRequestEnd:标记API请求结束,携带time_taken字段记录处理耗时
需按endpoint维度统计以下指标:
- 请求总数(
no_of_api_calls):APIRequestStart日志的数量 - 成功请求数(
successful_api_calls):APIRequestEnd日志的数量 - 成功率:成功请求数/请求总数的百分比
- 平均响应时间:所有
APIRequestEnd日志的time_taken平均值
完整查询方案
_source=logs | parse "* - event_type:* - endpoint:* - *" as rest1, event_type, endpoint, rest2 | parse field=rest2 "time_taken:*" as time_taken onlyif(event_type="APIRequestEnd") | eval api_start = if(event_type="APIRequestStart", 1, 0), api_end = if(event_type="APIRequestEnd", 1, 0), valid_time = if(event_type="APIRequestEnd", time_taken, null()) | stats sum(api_start) as no_of_api_calls, sum(api_end) as successful_api_calls, avg(valid_time) as avg_response_time, round(sum(api_end)/sum(api_start)*100, 2) as success_rate_percent by endpoint | sort endpoint
关键步骤解释
解析核心字段:
- 第一行
parse语句新增解析endpoint字段,确保后续能按该维度分组统计 - 第二行
parse仅在APIRequestEnd类型日志中提取time_taken,避免无效数据干扰
- 第一行
标记与过滤数据:
- 通过
eval生成三个辅助字段:api_start:标记请求发起日志,用于统计请求总数api_end:标记请求结束日志,用于统计成功请求数valid_time:仅保留结束日志的耗时数据,为计算平均响应时间做准备
- 通过
聚合计算指标:
- 使用
stats按endpoint聚合,一次性计算所有需求指标:- 求和得到请求总数、成功请求数
- 求平均值得到平均响应时间
- 通过除法+百分比转换计算成功率,用
round保留两位小数
- 使用
排序优化:最后用
sort endpoint让结果按接口名排序,提升可读性
内容的提问来源于stack exchange,提问作者monte
相关产品推荐
相关产品推荐

