"message":"firewall,info input_ip input: in:pppoe-1000M-4 out:(unknown 0), proto TCP (SYN), 111.7.96.136:28927->113.116.194.10:58000, len 52", "message":"firewall,info input: in:pppoe-out4 out:(unknown 0), src-mac da:86:8e:97:00:36, proto ICMP (type 8, code 0), 13.244.104.42->119.122.115.239, len 36" 在logstash 使用一个 grok 对上面两段message兼顾提取里面的全部ip和端口
时间: 2023-12-10 17:39:02 浏览: 121
可以使用以下 grok 表达式来提取上述两段 message 中的 IP 地址和端口号:
```
grok {
match => { "message" => [
"input_ip input: in:%{WORD:input_interface} out:%{DATA:output_interface}, proto %{WORD:protocol} \(%{WORD:flags}\), %{IP:src_ip}:%{NUMBER:src_port}->%{IP:dest_ip}:%{NUMBER:dest_port}, len %{NUMBER:len}",
"input: in:%{WORD:input_interface} out:%{DATA:output_interface}, src-mac %{MAC:src_mac}, proto %{WORD:protocol} \(type %{NUMBER:type}, code %{NUMBER:code}\), %{IP:src_ip}->%{IP:dest_ip}, len %{NUMBER:len}"
] }
}
```
解释:
- `%{WORD:input_interface}`:匹配输入接口名,并将其存储到名为 `input_interface` 的字段中
- `%{DATA:output_interface}`:匹配输出接口名,并将其存储到名为 `output_interface` 的字段中
- `%{WORD:protocol}`:匹配协议名称,并将其存储到名为 `protocol` 的字段中
- `%{WORD:flags}`:匹配协议标志,并将其存储到名为 `flags` 的字段中
- `%{IP:src_ip}`:匹配源 IP 地址,并将其存储到名为 `src_ip` 的字段中
- `%{NUMBER:src_port}`:匹配源端口号,并将其存储到名为 `src_port` 的字段中
- `%{IP:dest_ip}`:匹配目标 IP 地址,并将其存储到名为 `dest_ip` 的字段中
- `%{NUMBER:dest_port}`:匹配目标端口号,并将其存储到名为 `dest_port` 的字段中
- `%{NUMBER:len}`:匹配数据包长度,并将其存储到名为 `len` 的字段中
- `%{MAC:src_mac}`:匹配源 MAC 地址,并将其存储到名为 `src_mac` 的字段中
- `%{NUMBER:type}`:匹配 ICMP 类型,并将其存储到名为 `type` 的字段中
- `%{NUMBER:code}`:匹配 ICMP 代码,并将其存储到名为 `code` 的字段中
注意:上述 grok 表达式中使用了多个模式,因此需要使用数组来指定匹配规则。
阅读全文