如何基于requestID在Splunk中按企业和API路径统计请求耗时
Splunk 按企业维度统计
/org接口请求耗时方案 需求说明
- 单请求总耗时计算规则:同一个
requestId关联的所有日志条目中,最后一条日志时间戳与第一条日志时间戳的差值 - 统计范围:
path="/org"的接口请求 - 统计维度:请求所属企业
- 输出指标:各企业对应请求的平均耗时(Avg)、最小耗时(Min)、最大耗时(Max)
现有日志样例
Entry 1 00:00:00 {company:"A",requestId:123, path:"/org"} Entry 2 00:00:01: {company:"A",requestId:123} Entry 3 00:00:01: {company:"B",requestId:111, path:"/org"} Entry 4 00:00:05: {company:"B",requestId:111, url:...} Entry 5 00:00:08: {company:"B",requestId:111, url:...} Entry 6 00:00:10: {company:"B",requestId:111} Entry 7 00:01:00: {company:"A",requestId:123, url:...} Entry 8 00:02:00: {company:"A",requestId:123}
目标输出格式
| Org | Avg | Min | Max |
|---|---|---|---|
| Company A | .. | ... | ... |
| Company B | .. | ... | ... |
可用Splunk检索语句
# 筛选/org接口相关日志,自动提取JSON结构字段 path="/org" | spath # 关联同requestId下的所有链路日志,避免漏算后续不带path字段的请求日志 | eventstats values(path) as req_paths by requestId | where in(req_paths, "/org") # 按单请求维度计算总耗时,补全同请求下缺失的企业字段 | stats min(_time) as first_time, max(_time) as last_time, values(company) as company by requestId | eval duration = last_time - first_time # 按企业维度聚合计算耗时指标 | stats avg(duration) as Avg, min(duration) as Min, max(duration) as Max by company # 格式化输出匹配要求表头 | eval Org = "Company ".company | table Org, Avg, Min, Max
注意事项
- 默认输出的耗时单位为秒,如需毫秒级结果,可将
eval duration行修改为| eval duration = (last_time - first_time)*1000 - 如果日志中的
company/requestId/path字段未被Splunk自动识别,可在spath行后添加rex正则提取逻辑适配你的日志格式 - 关联逻辑覆盖了同请求下部分日志缺失企业、路径字段的场景,保证耗时计算不会遗漏链路节点
内容的提问来源于stack exchange,提问作者Peter Jones
相关产品推荐
相关产品推荐

