logstash failing to parse syslog input
The syslog input use grok internally, your message is probably not following the syslog standard 100%.
The solution in this link worked for me: http://kartar.net/2014/09/when-logstash-and-syslog-go-wrong/
The key info from the link is:
Replace the existing syslog block in the Logstash configuration with:
input {
tcp {
port => 514
type => syslog
}
udp {
port => 514
type => syslog
}
}
Next, replace the parsing element of our syslog input plugin using a grok filter plugin.
filter {
if [type] == "syslog" {
grok {
match => { "message" => "<%{POSINT:syslog_pri}>%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" }
}
}
}
You can edit the filter matching ("grok") syntax now, to match your desired format. It's also possible to support multiple different syntaxes with creative use of if
, else if
, and else
.