正则表达式从Splunk中的单个字符串中提取两个值

时间:2018-02-27 22:42:31

标签: regex splunk-query

我在Splunk中出现的日志语句如下所示。

info Request method=POST, time=100, id=12345

info Response statuscode=200, time=300, id=12345

我试图编写一个Splunk查询,该查询将从以“请求”和“信息响应”开始的行中提取时间参数,并基本上找到时差。有没有办法在查询中执行此操作?我能够从每个语句中分别提取值,但不能同时提取两个值。

我希望得到类似下面的内容,但我想管道不会起作用:

... | search log="info Request*" | rex field=log "time=(?<time1>[^\,]+)" | search log="info Response*" | rex field=log "time=(?<time2>[^\,]+)" | table time1, time2

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

一般过程:

  1. 将类型提取到字段
  2. 计算响应和请求时间
  3. 按ID分组
  4. 计算差异
  5. 您可能希望使用除(最新)统计信息以外的其他内容,但如果每个ID只有一个请求/响应,则无关紧要。

    | rex field=_raw "info (?<type>\w+).*"
    | eval requestTime = if(type="Request",time,NULL)
    | eval responseTime = if(type="Response",time,NULL)
    | stats latest(requestTime) as requestTime latest(responseTime) as responseTime by id
    | eval diff = responseTime - requestTime