【发布时间】:2019-04-10 18:27:28
【问题描述】:
我正在寻找一种方法来使用 Logstash 从系统日志条目中解析 IP 地址和 MAC。目前我尝试使用 GROK 来获取它,但问题是,我可能必须匹配整行,而不仅仅是消息本身的一部分。
例如,我必须遵循以下行:
4 月 9 日 12:41:01 cn1Label=主机 ID dvchost=exch01 TrendMicroDsTenant=Primary TrendMicroDsTenantId=0 dstMAC=55:C0:A8:55:FF:41 srcMAC=CA:36:42:B1:78:3D TrendMicroDsFrameType=IP src=10.0.251.84 dst=56.19.41.128 out=166 cs3= cs3Label=分段位 proto=ICMP srcPort=0 dstPort=0 cnt=1 act=IDS:Reset cn3=0 cn3Label=DPI 数据包 位置 cs5=0 cs5Label=DPI 流位置 cs6=0 cs6Label=DPI 标志
我想获取“src”和“dst”IP 以及“srcMAC”和“dstMAC”。我会在 Logstash 中这样尝试:
grok{
match => { "message" => "src=%{IPV4:src_ip}" }
match => { "message" => "dst=%{IPV4:dst_ip}" }
match => { "message" => "srcMAC=%{MAC:src_mac}" }
match => { "message" => "dstMAC=%{MAC:dst_mac}" }
}
但它不起作用,因为它不匹配整行。我也尝试了.* 和其他匹配技术,但没有成功。
有没有办法只解析所示的 IP 而无需解析整行?
我会尝试解析消息的其他部分,例如协议。我不匹配整行的原因是,某些消息是不同的,因此还需要另一种方法来提取其值。
谢谢!
【问题讨论】:
-
当在单个 grok 过滤器中使用多个模式时,logstash 将尝试一个接一个地匹配每个模式,在第一个成功匹配时停止,这解释了为什么它在您的情况下不起作用。但是您可以拥有多个 grok 过滤器,每个过滤器都有不同的模式。
-
@baudsp 谢谢。我也发现了失败。谢谢你提到这一点!
标签: elasticsearch logstash logstash-grok logstash-configuration