获取Logstash _grokparsefailure虽然Grok Debugger没有抛出任何错误

问题描述 投票:4回答:2

我尝试使用logstash和grok解析Check Point防火墙Syslog日志。

日志条目示例:

<190>2015 Mar 19 12:40:55 fw1 <60031> User admin failed to login (wrong authentication) (Source IP:123.123.123.123 Via:HTTP)

我使用这种模式:

<%{POSINT:syslog_pri}>%{YEAR} %{SYSLOGTIMESTAMP:syslog_timestamp} %{DATA:device} <%{POSINT:status}> User %{WORD:account} %{DATA:msg} (?:[(])%{DATA:msg1}(?:[)]) (?:[(])Source IP:%{IPV4:src} Via:%{WORD:protocol}(?:[)])

所有字段都很好地解析并显示在elasticsearch / kibana中。 Grok Debugger适用于此特定日志/模式组合。但是,我一直在收到_grokparsefailure标签。有没有人暗示如何摆脱它们?

更新:这是我完整的logstash配置(最相关的部分是“登录失败”块):

input { 
    syslog {
        type => "syslog"
        port => 514
    }
}

filter {
    if [type] == "syslog" {
        geoip { source => "host" }  

        # Firewall rule fired
        if [message] =~ "packet" {
            grok {
                match => [ "message", "<%{POSINT:syslog_pri}>%{YEAR} %{SYSLOGTIMESTAMP:syslog_timestamp} %{DATA:device} <%{POSINT:status}> %{WORD:activity} %{DATA:inout} (?:[(])%{DATA:msg}(?:[)]) Src:%{IPV4:src} SPort:%{POSINT:sport} Dst:%{IPV4:dst} DPort:%{POSINT:dport} IPP:%{POSINT:ipp} Rule:%{INT:rule} Interface:%{WORD:iface}" ]
            }
        } 
        # Failed login
        else if [message] =~ "failed" {
            grok {
                match => [ "message", "<%{POSINT:syslog_pri}>%{YEAR} %{SYSLOGTIMESTAMP:syslog_timestamp} %{DATA:device} <%{POSINT:status}> User %{WORD:account} %{DATA:msg} (?:[(])%{DATA:msg1}(?:[)]) (?:[(])Source IP:%{IPV4:src} Via:%{WORD:protocol}(?:[)])" ]
            }
        }
        # Successful login/out
        else if [message] =~ "logged" {
            mutate {
                add_field => [ "userlogged", "%{host}" ]
            }
            grok {
                match => [ "message", "<%{POSINT:syslog_pri}>%{YEAR} %{SYSLOGTIMESTAMP:syslog_timestamp} %{DATA:device} <%{POSINT:status}> User %{DATA:account} %{WORD} %{WORD:action} (?:[(])Source IP:%{IPV4:src} Via:%{WORD:protocol}(?:[)])" ]
            }
        }
        else {
            grok {
                match => [ "message",  "<%{POSINT:syslog_pri}>%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" ]
            }
        }
    }   
}

output {
    elasticsearch {
        host => "localhost"
        protocol => "http"
    }
}
elasticsearch logstash kibana logstash-grok
2个回答
2
投票

看来_grokparsefailure是由输入插件“syslog”引发的,它在内部也使用了grok。用更换输入块后

input {
    tcp {
        port => 514
        type => syslog
    }
    udp {
        port => 514
        type => syslog
    }
}

我再也收不到失败的消息了。 This blog post帮了我很多忙。


0
投票

我得到了这个错误,因为我的filter块在我的input块之前被声明了。

© www.soinside.com 2019 - 2024. All rights reserved.