如何使用grok从日志中提取服务URL组件

时间:2019-06-28 08:10:56

标签: regex logstash logstash-grok

我正在尝试使用grok表达式从下面发布的表达式中提取服务URL和时间,但是由于存在多个URL,我的解决方案经常检索到错误的URL,因此它并不是真正的一致。

我尝试过%{URIPATH:Path1}%{SPACE}%{URIPATH:ServiceURI}%{SYSLOGTIMESTAMP:time}

这根本不起作用,但是如果我删除了{SYSLOGTIMESTAMP:time}-它给了我我想要的结果,但是它与其他日志格式不同,因此不一致。因此,我试图找到一种一致的方式来节省时间,并从日志中获取服务URL。

  

6月12日04:27:35 1560306455传入:信息22.244.42.41 6月12日04:27:22 DPPRD01 [host_services] [0x80e0013a] [mpgw] [info]来源-https(IMS_SSL_29982):trans(2797190703)[12.6 .1.16]:从10.6.17.166接收到针对/ services / NHgetInternetLimitsV1的HTTP / 1.1 POST

我期望的是类似

  

时间:6月12日04:27:35   服务:NHgetInternetLimitsV1或/ services / NHgetInternetLimitsV1

1 个答案:

答案 0 :(得分:0)

您可以使用

%{SYSLOGTIMESTAMP:time}.*POST for %{URIPATH:ServiceURI}

它将提取

{
  "time": [
    [
      "Jun 12 04:27:35"
    ]
  ],
  "ServiceURI": [
    [
      "/services/NHgetInternetLimitsV1"
    ]
  ]
}

请注意,由于.*POST for部分的存在,POST for子字符串之后的最后一个服务URI将被匹配。