如何在Splunk中统计工单总数及3天内同电路重复工单次数
Splunk 工单统计解决方案
以下是满足你需求的Splunk查询语句,包含工单总数统计和符合条件的重复工单次数统计:
// 替换为你的实际索引、数据源类型和工单时间字段 index=your_index sourcetype=your_ticket_source | eval create_time=strptime(ticket_create_time, "%Y-%m-%d %H:%M:%S") // 按电路ID分组,提取首个工单时间及所有工单时间列表 | stats earliest(create_time) as first_ticket_time values(create_time) as all_ticket_times by circuit_id // 计算非首个工单与首个工单的时间差(单位:秒) | eval time_diffs=mvmap(mvfilter(all_ticket_times != first_ticket_time), all_ticket_times - first_ticket_time) // 判断该电路ID是否存在首个工单3天内的后续工单 | eval is_qualified=if(mvfind(time_diffs, "<=".tostring(3*86400)) != -1, 1, 0) // 统计符合条件的电路ID数量(即重复工单次数) | stats sum(is_qualified) as 重复工单数量 // 追加工单总数统计 | appendcols [ search index=your_index sourcetype=your_ticket_source | stats count as 工单总数 ] // 整理输出字段 | table 工单总数 重复工单数量
关键步骤解释:
- 时间格式转换:用
strptime将工单创建时间字段转换为Splunk可计算的时间戳,需根据你实际的时间格式调整第二个参数(比如%Y/%m/%d)。 - 分组提取时间:通过
stats按circuit_id分组,获取每个电路的首个工单时间和所有工单时间列表。 - 计算时间差:用
mvfilter排除首个工单时间,mvmap批量计算剩余工单与首个工单的时间差。 - 判断符合条件的电路:
mvfind检查时间差列表中是否存在≤3天(3*86400秒)的值,存在则标记为1。 - 合并统计结果:
appendcols将工单总数和重复工单次数合并到同一张结果表中。
注意事项:
- 替换查询中
your_index、your_ticket_source、ticket_create_time为你的实际数据源信息。 - 如果一个电路ID下存在多个工单,只要首个工单后3天内出现第二个工单,该电路ID会被统计为1次,完全匹配你“同一电路ID下首个工单创建后3天内生成第二个工单的次数”的需求。
内容的提问来源于stack exchange,提问作者Stroud
相关产品推荐
相关产品推荐

