使用Splunk rex从日志提取字段并统计耗时大于10ms的方法数量
Splunk统计耗时大于10ms方法总数量实现方案
参考日志样例
c.s.m.c.advice.ExecutionTimeAdvice : <>
relationId = aa12 | Method Name = methodA() Time taken is = 0msc.s.m.c.advice.ExecutionTimeAdvice : <>
relationId = ab12 | Method Name = methodA(). Time taken is = 15msc.s.m.c.advice.ExecutionTimeAdvice : <>
relationId = ab12 | Method Name = methodB(). Time taken is = 1ms
完整实现SPL命令
# 请替换开头的索引、sourcetype为你自己的实际配置 index=业务索引 sourcetype=日志类型 | rex "Method Name = (?<method_name>[^ |\.]+).*Time taken\s+is = (?<cost_time>\d+)ms" | eval cost_time=tonumber(cost_time) | where cost_time > 10 # 统计总数量用下面这句 | stats count as 耗时大于10ms的方法总次数 # 若需要按不同方法分别统计,替换上面的stats为下面这句 # | stats count as 触发次数 by method_name
命令说明
- rex部分的正则兼容日志里
Time taken和is之间空格数量不一致、方法名后带多余.的情况,会准确提取方法名和耗时数值 - eval将提取到的字符串格式的耗时转为数字,避免字符串比较出现逻辑错误
- 你给出的样例日志执行后统计结果为1,对应methodA触发的15ms记录
内容的提问来源于stack exchange,提问作者k.jones
相关产品推荐
相关产品推荐

