我已经配置了 logstash (v1.5.0),带有一个简单的 syslog 输入,如下所示:
input {
syslog {
type => syslog
port => 5514
}
}
filter {
kv {}
}
output {
elasticsearch {
cluster => "logs"
host => "0.0.0.0"
protocol => "transport"
}
}
但是,它似乎在某些 cron 日志上失败了。以下行无法使用 a 解析_grokparsefailure_sysloginput
:
<77>Jul 22 22:01:01 ip-172-31-2-48 run-parts(/etc/cron.hourly)[2599 finished 0yum-hourly.cron
最终的 JSON 输出是:
{
"_index": "logstash-2015.07.22",
"_type": "syslog",
"_id": "AU63yLrC118PBgBqQxRA",
"_score": null,
"_source": {
"message": "<77>Jul 22 22:01:01 ip-172-31-2-48 run-parts(/etc/cron.hourly)[2599 finished 0yum-hourly.cron\n",
"@version": "1",
"@timestamp": "2015-07-22T22:01:01.569Z",
"type": "syslog",
"host": "172.31.2.48",
"tags": [
"_grokparsefailure_sysloginput"
],
"priority": 0,
"severity": 0,
"facility": 0,
"facility_label": "kernel",
"severity_label": "Emergency"
},
"fields": {
"@timestamp": [
1437602461569
]
},
"sort": [
1437602461569
]
}
任何指针?
syslog 输入在内部使用 grok,您的消息可能没有 100% 遵循 syslog 标准。
此链接中的解决方案对我有用:http: //kartar.net/2014/09/when-logstash-and-syslog-go-wrong/
链接中的关键信息是:
您现在可以编辑过滤器匹配(“grok”)语法,以匹配您想要的格式。还可以通过创造性地使用 、 和 来支持多种不同
if
的else if
语法else
。4 年后来到这里,现在 logstash syslog 输入支持设置要使用的 grok 模式,如文档中所述。
为了保持 syslog 输入功能,可以在
grok_pattern
设置中插入非标准模式来解析,例如:或者同样修改默认
<%{POSINT:priority}>%{SYSLOGLINE}
模式以使其也匹配非标准输入行。我在logstash 7.17上遇到了同样的问题。通过添加
ecs_compatibility => "v8"
syslog 输入插件配置解决了这个问题: