使用正则表达式和 Grok 分隔 IPV4 和 IPV6 地址
Separate IPV4 and IPV6 addresses with Regular Expressions and Grok
我正在尝试为一些传入的日志文件构建一个 Grok 模式。我在日志消息中有一个字段可能类似于以下两个:
IP Address: (192.168.1.100),
IP Address: (192.168.1.100, 2001:0db8:85a3:0000:0000:8a2e:0370:7334),
处理第一个示例非常简单我定义了一个名为 IP2 的新 IP 模式以从括号 \((?:%{IP})\)
中转义并以如下形式结束:
Example Core RegEx Patterns:
IPV6 ((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?
IPV4 (?<![0-9])(?:(?:[0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])[.](?:[0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])[.](?:[0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])[.](?:[0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5]))(?![0-9])
IP (?:%{IPV6}|%{IPV4})
IP2 \((?:%{IP})\)
Grok Pattern for Field:
IP Address: %{IP2:ipv4_address},
我正在尝试弄清楚如何在同时显示 IPv4 和 IPv6 地址时创建正则表达式模式和 Grok 模式。我会一直生成 IPv6 字段,如果它不存在,它就是空的。
您需要使用可选组:
\(%{IPV4:ipv4_address}(?:,\s*%{IPV6:ipv6_address})?\)
^^^ ^^
细分:
\(
- 打开 (
%{IPV4:ipv4_address}
- IPV4 模式
(?:
- 可以出现 1 次或 0 次的可选组的开始
,
- 逗号
\s*
- 零个或多个空格
%{IPV6:ipv6_address}
- IPV6 模式
)?
- 可选组的结尾(请注意,?
是一个量词,匹配量化子模式的 1 次或 0 次出现)
\)
- 平仓 )
.
我正在尝试为一些传入的日志文件构建一个 Grok 模式。我在日志消息中有一个字段可能类似于以下两个:
IP Address: (192.168.1.100),
IP Address: (192.168.1.100, 2001:0db8:85a3:0000:0000:8a2e:0370:7334),
处理第一个示例非常简单我定义了一个名为 IP2 的新 IP 模式以从括号 \((?:%{IP})\)
中转义并以如下形式结束:
Example Core RegEx Patterns:
IPV6 ((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?
IPV4 (?<![0-9])(?:(?:[0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])[.](?:[0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])[.](?:[0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])[.](?:[0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5]))(?![0-9])
IP (?:%{IPV6}|%{IPV4})
IP2 \((?:%{IP})\)
Grok Pattern for Field:
IP Address: %{IP2:ipv4_address},
我正在尝试弄清楚如何在同时显示 IPv4 和 IPv6 地址时创建正则表达式模式和 Grok 模式。我会一直生成 IPv6 字段,如果它不存在,它就是空的。
您需要使用可选组:
\(%{IPV4:ipv4_address}(?:,\s*%{IPV6:ipv6_address})?\)
^^^ ^^
细分:
\(
- 打开(
%{IPV4:ipv4_address}
- IPV4 模式(?:
- 可以出现 1 次或 0 次的可选组的开始,
- 逗号\s*
- 零个或多个空格%{IPV6:ipv6_address}
- IPV6 模式
)?
- 可选组的结尾(请注意,?
是一个量词,匹配量化子模式的 1 次或 0 次出现)\)
- 平仓)
.