Splunk正则匹配Spring Batch作业运行时长问题求助
解决Spring Batch作业运行时长正则匹配问题
适配三种格式的正则表达式(无数字后缀捕获组)
直接使用以下正则即可同时匹配709ms、59s709ms、1m59s709ms三种格式,且捕获组无需添加数字后缀:
(?:(?<minutes>\d+)m)?(?:(?<seconds>\d+)s)?(?:(?<milliseconds>\d+)ms)?
正则说明
(?:...)是非捕获组,仅用于逻辑分组,不会生成额外捕获结果(?<minutes>\d+)m?:匹配可选的分钟部分,捕获值存入minutes组(?<seconds>\d+)s?:匹配可选的秒部分,捕获值存入seconds组(?<milliseconds>\d+)ms?:匹配毫秒部分,捕获值存入milliseconds组
无论哪种格式,对应存在的时间单位都会被正确捕获,不存在的组会返回空值。
Splunk中转换为总毫秒数(用于统计)
要制作日均运行时长面板,需要将捕获的各单位转换为总毫秒数,可在Splunk查询中添加eval命令:
| eval total_ms = coalesce(minutes, 0)*60000 + coalesce(seconds, 0)*1000 + coalesce(milliseconds, 0)
coalesce函数用于将空值替换为0,避免计算出错- 计算完成后,即可用
stats avg(total_ms) by date_mday等命令生成日均运行时长统计面板
原正则失效原因
你之前的正则使用|分支匹配,导致多单位格式(如1m59s709ms)会被第一个分支(?<jobRunTimeMs1>\d*)ms?优先匹配毫秒部分,忽略前面的分钟、秒数,因此失效。新正则通过顺序匹配可选单位的方式,避免了分支优先级问题。
内容的提问来源于stack exchange,提问作者Trance339
相关产品推荐
相关产品推荐

