使用Splunk查询计算时间差时ft-st列显示为空的问题求解
Splunk时间差计算为空的原因及解决方法
问题根因
table命令仅支持引用已创建的字段,不支持直接在参数内执行计算表达式。你直接在table后写ft-st,Splunk会将其识别为一个名为ft-st的独立字段,由于你没有提前创建该字段,所以输出为空。- 未展开数组字段导致多值计算异常。你直接重命名
per_stage_info{}.starttime、per_stage_info{}.finishtime得到的是多值字段,所有阶段的时间都存储在同一个字段的多值列表中,两个多值列表直接做减法无法匹配对应阶段的时间计算,最终返回空。
修正后的查询语句
# 先展开数组,每个阶段拆分为单独的行 | mvexpand per_stage_info # 从展开的单个数组元素中提取对应字段 | eval stage_name = json_extract(per_stage_info, "stage_name") | eval starttime = json_extract(per_stage_info, "starttime") | eval finishtime = json_extract(per_stage_info, "finishtime") # 转换为时间戳 | eval st=strptime(starttime, "%Y/%m/%d %H:%M:%S") | eval ft=strptime(finishtime, "%Y/%m/%d %H:%M:%S") # 提前计算时间差字段,单位为秒 | eval duration = ft - st # 展示需要的字段 | table stage_name, starttime, finishtime, ft, st, duration
可选优化
如果需要将秒级的时间差转换为易读的时分秒格式,可以在计算duration后新增一行:
| eval duration_str = tostring(duration, "duration")
得到的格式为HH:MM:SS,更方便直接查看耗时。
内容的提问来源于stack exchange,提问作者Geeta Chaitanya
相关产品推荐
相关产品推荐

