首页 > 解决方案 > 如何使用 grok 从日志中提取服务 url 组件

问题描述

我正在尝试使用 grok 表达式从下面发布的表达式中提取服务 url 和超时,但是因为有多个 url——我的解决方案经常检索错误的 url——所以它并不是真正一致的。

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

这根本不起作用,但如果我删除{SYSLOGTIMESTAMP:time}- 它会给我我正在寻找的结果,但它与其他日志不一致,因为它们具有不同的格式。所以我试图找到一种一致的方式来获取时间和服务 URL 从日志中。

Jun 12 04:27:35 1560306455 INCOMING:信息 22.244.42.41 Jun 12 04:27:22 DPPRD01 [host_services][0x80e0013a][mpgw][info] source-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

标签: regexlogstashlogstash-grok

解决方案


您可以使用

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

它会提取

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

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


推荐阅读