0

我是 logstash / grok 模式的新手。

在我的日志文件中,我有一行格式如下:

::ffff:172.19.7.180 - - [10/Oct/2016:06:40:26 +0000] 1 "GET /authenticator/users HTTP/1.1" 200 7369

当我尝试使用简单的 IP 模式匹配 %{IP} 时,使用 grok 构造函数,它只显示部分匹配:

after match:    .19.7.180 - - [10/Oct/2016:06:33:58 +0000] 1 "POST /authenticator/searchUsers HTTP/1.1" 200 280

因此,只有一部分 ip 地址匹配,因为“匹配后”部分仍然显示 ip 地址的剩余部分。

查询: 1、这个IP地址::ffff:172.19.7.180的格式是什么?2.如何解决这个问题,确保IP地址被正确解析?

顺便说一句,我正在使用 nodejs 中间件 morgan logger,它以这种格式打印 IP 地址。

4

2 回答 2

2

请注意,日志包含用冒号分隔的IPv4和 IPv6 地址,因此您需要使用的正确模式如下:

%{IPV6:ipv6}:%{IPV4:ipv4}

然后在您的活动中,您将有两个字段:

"ipv6" => "::ffff"
"ipv4" => "172.19.7.180" 

这将一直有效,直到此问题得到解决。

于 2016-10-17T11:01:46.300 回答
1

这些 IP 地址采用 IPv4 嵌入式 IPv6 格式,并且%{IP}不匹配。唯一的方法是使用%{DATA}或编写自己的正则表达式。

于 2016-10-17T11:02:44.860 回答