我已经配置了 logstash (v1.5.0),带有一个简单的 syslog 输入,如下所示:
input {
syslog {
type => syslog
port => 5514
}
}
filter {
kv {}
}
output {
elasticsearch {
cluster => "logs"
host => "0.0.0.0"
protocol => "transport"
}
}
Run Code Online (Sandbox Code Playgroud)
但是,它似乎在某些 cron 日志上失败了。以下行无法解析为_grokparsefailure_sysloginput
:
<77>Jul 22 22:01:01 ip-172-31-2-48 run-parts(/etc/cron.hourly)[2599 finished 0yum-hourly.cron
Run Code Online (Sandbox Code Playgroud)
最终的 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
]
}
Run Code Online (Sandbox Code Playgroud)
任何指针?
小智 5
syslog 输入在内部使用 grok,您的消息可能未 100% 遵循 syslog 标准。
此链接中的解决方案对我有用:http : //kartar.net/2014/09/when-logstash-and-syslog-go-wrong/
链接中的关键信息是:
将 Logstash 配置中现有的 syslog 块替换为:
input {
tcp {
port => 514
type => syslog
}
udp {
port => 514
type => syslog
}
}
Run Code Online (Sandbox Code Playgroud)
接下来,使用 grok 过滤器插件替换我们的 syslog 输入插件的解析元素。
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}" }
}
}
}
Run Code Online (Sandbox Code Playgroud)
您现在可以编辑过滤器匹配(“grok”)语法,以匹配您想要的格式。它也可以支持多个不同的语法与创造性的运用if
,else if
和else
。
归档时间: |
|
查看次数: |
13941 次 |
最近记录: |