无法使用 Filebeat 在 Grok 中解析没有 IP 地址的 haproxy 日志

Can't parse haproxy logs without IP address in Grok using Filebeat

当 Haproxy 给出日志时,Grok 解析成功 - 来自 var/log/haproxy.log - 类似于:

May 21 08:25:56 ha haproxy[5089]: 12.3.45.67:89012 [21/May/2021:08:25:56.055] www-https~ wss/wssnode website.domain.com 1/1/1/1/111 111 111 - - ---- 11111/11111/11111/111/0 0/0 "GET /ws/site/V3L235F/d88r3567pssllp/ HTTP/1.1"

但是当 ip_address:port 不是 -:port 时,例如:

May 21 08:25:56 ha haproxy[5089]: -:89012 [21/May/2021:08:25:56.055] www-https~ wss/wssnode website.domain.com 1/1/1/1/111 111 111 - - ---- 11111/11111/11111/111/0 0/0 "GET /ws/site/V3L235F/d88r3567pssllp/ HTTP/1.1"

我有一个错误:

Provided Grok expressions do not match field value: May 21 08:25:56 ha haproxy[5089]: -:89012 [21/May/2021:08:25:56.055] www-https~ wss/wssnode website.domain.com 1/1/1/1/111 111 111 - - ---- 11111/11111/11111/111/0 0/0 "GET /ws/site/V3L235F/d88r3567pssllp/ HTTP/1.1

这是我的 /usr/share/filebeat/module/haproxy/log/pipline.json

我试图通过向带有 message 字段的 grok 添加新模式并通过使用 source.address 字段编辑 grok 模式来解决此问题,但没有成功。

我查看了您的管道 grok 模式。 以此为线索,我稍微修改了 IP 部分。

(%{IP:source.address}|-):%{NUMBER:port}

你可以使用这样的东西,我已经为变量指定了测试名称。您可以相应地进行更改。


以下输出如下:

示例 1 => 12.34.56.78:89012

{
  "source": [
    [
      "12.34.56.78"
    ]
  ],
  "port": [
    [
      "89012"
    ]
  ]
}

示例 2 => -:89012

{
  "source": [
    [
      null
    ]
  ],
  "port": [
    [
      "89012"
    ]
  ]
}