【问题标题】:grok filter not matching syslog messagegrok 过滤器与系统日志消息不匹配
【发布时间】:2016-08-12 14:27:30
【问题描述】:

经过一番搜索并尝试了各种解决方案,这是我的 grok 模式:

%{TIME}", "interface", "%{EMAILLOCALPART}","MAC", "%{IP}:%{MAC}", "src", "SRC=%{IP}", "dst", "DST=%{IP}

但它与我的系统日志消息不匹配。消息来自 IPFire,如下所示:

00:00:06 IN=red0 OUT= MAC=00:0d:b9:42:65:fc:00:17:10:82:5f:00:08:00 SRC=179.43.177.194 DST=46.127.208.49 LEN=60 TOS=0x00 PREC=0x00 TTL=56 ID=62301 DF PROTO=TCP SPT=37305 DPT=6666 WINDOW=29200 RES=0x00 SYN URGP=0 
00:00:07 IN=red0 OUT= MAC=00:0d:b9:42:65:fc:00:17:10:82:5f:00:08:00 SRC=116.31.116.17 DST=46.127.208.49 LEN=60 TOS=0x00 PREC=0x00 TTL=47 ID=4401 DF PROTO=TCP SPT=23103 DPT=22 WINDOW=29200 RES=0x00 SYN URGP=0 
00:00:07 IN=red0 OUT= MAC=00:0d:b9:42:65:fc:00:17:10:82:5f:00:08:00 SRC=74.79.43.231 DST=46.127.208.49 LEN=131 TOS=0x00 PREC=0x00 TTL=113 ID=16393 PROTO=UDP SPT=36303 DPT=6666 LEN=111 
00:00:08 IN=red0 OUT= MAC=00:0d:b9:42:65:fc:00:17:10:82:5f:00:08:00 SRC=84.241.202.2 DST=46.127.208.49 LEN=129 TOS=0x00 PREC=0x00 TTL=51 ID=41009 DF PROTO=UDP SPT=35858 DPT=1025 LEN=109 
00:00:09 IN=red0 OUT= MAC=00:0d:b9:42:65:fc:00:17:10:82:5f:00:08:00 SRC=198.8.80.183 DST=46.127.208.49 LEN=132 TOS=0x00 PREC=0x00 TTL=117 ID=21082 PROTO=UDP SPT=24883 DPT=1025 LEN=112 

我也没有在 Kibana 中看到我定义的任何字段。我有一个非常基本的配置文件(与其他配置文件相比),但我似乎无法理解它。如果有人可以提供帮助,我需要看一个合适的例子才能正确理解它。

我的 11-ipfire 配置:

input {
    udp {
    port => 5514
    }
    tcp {
    port => 5514
    }
}
filter {
    if [type] == "syslog" {
        grok {
            match => [ "time", "%{TIME}", "interface", "%{EMAILLOCALPART}","MAC", "%{IP}:%{MAC}", "src", "SRC=%{IP}", "dst", "DST=%{IP}" ]
        }
    }
}
output {
    elasticsearch {
        hosts => ["localhost:9200"]
        index => "ipfire"
    }
}

【问题讨论】:

    标签: logstash logstash-grok elastic-stack


    【解决方案1】:

    grok 过滤器的match 采用哈希{ "field" => "pattern" },或者如果一个字段可能具有不同的内容,您可以传递一个数组,grok 将按顺序尝试将该字段与每个数组元素{ "field" => ["pattern1","pattern2", "patternX"] } 匹配。您当前正在传递 match 一个数组,它绝对不会解析您的示例日志或任何内容。

    您提供的 grok 模式将匹配文字字符串

    "12:34", "interface", "bob.saget67", "MAC", "127.0.0.1:12-34-56-78-9A-BC", "src", "SRC=127.0.0.2", "dst", "DST=127.0.0.3"
    

    我不会为您编写 grok 模式,但您可以使用 grok constructor 等在线工具轻松开发和测试 grok 模式。此外,我相信 Logstash 带有一些预烘焙的 syslog 模式。

    【讨论】:

    • 我已经制作了我的 grok 模式:%{SYSLOGPROG:program} %{USERNAME:chain} (?<in_int>(IN=[a-zA-Z0-9]+)) (?<in_out>(OUT=([a-zA-Z0-9]+)?)) (?<mac_field>(MAC=))%{COMMONMAC:mac_address}:%{COMMONMAC:mac_address2}(?<no_idea>(:([0-9]+))+) (?<src_ip_field>(SRC=))%{IPV4:src_ip} (?<dst_ip_field>(DST=))%{IPV4:dst_ip}%{GREEDYDATA:bs}(?<protocol>(TCP|UDP)) 但它仍然无法正常工作。我不确定如何让我在模式中定义的字段显示在 Kibana 中。
    • 而您现在使用的是match => { "message" => "pattern" }?
    • 是,但尚未创建字段。
    • 您是否在标签中获得了“_grokparsefailure”?只有在成功匹配时才会创建字段
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多