我已经configuration了一个简单的sysloginputlogstash(v1.5.0),如下所示:
input { syslog { type => syslog port => 5514 } } filter { kv {} } output { elasticsearch { cluster => "logs" host => "0.0.0.0" protocol => "transport" } }
但是,它似乎是失败的一些cron日志。 以下行无法parsing_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 ] }
任何指针?
系统日志input在内部使用grok,您的消息可能不会遵循syslog标准100%。
这个链接的解决scheme适用于我: http : //kartar.net/2014/09/when-logstash-and-syslog-go-wrong/
链接的关键信息是:
将Logstashconfiguration中的现有系统日志块replace为:
input { tcp { port => 514 type => syslog } udp { port => 514 type => syslog } }
接下来,使用Grokfilter插件replace我们的sysloginput插件的parsing元素。
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}" } } } }
您现在可以编辑filter匹配(“grok”)语法,以匹配您所需的格式。 还有可能通过创造性地使用if , else if和else来支持多种不同的语法。