Splunk并发计算场景下如何定位指定事件对应的全部并发请求
解决方案
一、核心逻辑说明
不要使用固定的_time前后10秒偏移来匹配,这种方式会因为不同请求运行时长不一致出现漏判。两个请求并发的准确判断条件是时间窗口存在重叠,即:
待匹配请求的开始时间 < 目标事件的结束时间 AND 待匹配请求的结束时间 > 目标事件的开始时间
你现有逻辑里每个事件的时间窗口边界为:
- 开始时间:
Start Time(原permitAcquiredTime字段) - 结束时间:
_time(你原有逻辑里定义的endTime,即请求跑完的时间点)
二、手动查询目标事件的所有并发请求SPL
先从你现有查询结果中,复制要排查的事件的Start Time(时间戳格式)和_time(时间戳格式),替换到下面的查询中即可:
index="sfdc" source="sfdc_event_log://EventLog_SFDC_Production_eventlog_hourly" EVENT_TYPE IN (API, RestAPI) RUN_TIME>20000 | eval endTime=_time | eval permitAcquiredTime=endTime-(RUN_TIME-20000)/1000 # 替换下面两个值为你要排查的事件的对应字段值 | where permitAcquiredTime < [目标事件的_endTime_值] AND endTime > [目标事件的_Start Time_值] | eval dbTotalTime=DB_TOTAL_TIME/1000000 | fieldformat dbTotalTime=round(dbTotalTime,0) | rename permitAcquiredTime as "Start Time", endTime as "End Time", API_TYPE as "API Type", EVENT_TYPE as "Event Type", ENTITY_NAME as "Entity Name", apimethod as "API Method", RUN_TIME as "Run Time", CPU_TIME as "CPU Time", dbtotalTime as "DB Total Time", REQUEST_ID as "Request ID", USER_ID as "User ID" | sort "Start Time" asc
三、仪表盘下钻配置方法
- 给原有展示并发列表的表格面板添加下钻,设置点击行时传递两个参数:
- 参数1:
target_start,值为当前行的Start Time字段 - 参数2:
target_end,值为当前行的_time字段
- 参数1:
- 新建下钻展示的结果面板,SPL使用上面的查询逻辑,把固定值替换为传入的参数即可:
index="sfdc" source="sfdc_event_log://EventLog_SFDC_Production_eventlog_hourly" EVENT_TYPE IN (API, RestAPI) RUN_TIME>20000 | eval endTime=_time | eval permitAcquiredTime=endTime-(RUN_TIME-20000)/1000 | where permitAcquiredTime < $target_end$ AND endTime > $target_start$ | eval dbTotalTime=DB_TOTAL_TIME/1000000 | fieldformat dbTotalTime=round(dbTotalTime,0) | rename permitAcquiredTime as "Start Time", endTime as "End Time", API_TYPE as "API Type", EVENT_TYPE as "Event Type", ENTITY_NAME as "Entity Name", apimethod as "API Method", RUN_TIME as "Run Time", CPU_TIME as "CPU Time", dbtotalTime as "DB Total Time", REQUEST_ID as "Request ID", USER_ID as "User ID" | sort "Start Time" asc - 调整下钻面板的时间范围:建议设置为相对传入参数的前后1小时,避免全局时间范围过窄导致漏匹配,可在面板查询的最前面加时间范围限定:
| addinfo | where _time >= relative_time($target_start$, "-1h") AND _time <= relative_time($target_end$, "+1h")
内容的提问来源于stack exchange,提问作者SBB
相关产品推荐
相关产品推荐

