首页 > 解决方案 > 无法使用 Filebeat 在 Grok 中解析没有 IP 地址的 haproxy 日志

问题描述

当 Haproxy 给出var/log/haproxy.log类似以下的日志时,Grok 解析成功:

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"

我有一个错误:

前提是 Grok 表达式与字段值不匹配:5 月 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

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

标签: logginglogstashhaproxylogstash-grokfilebeat

解决方案


我看了你的管道 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"
    ]
  ]
}

推荐阅读