Logstash

logstash 無法解析系統日誌輸入

  • February 2, 2022

我已經配置了 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/

連結中的關鍵資訊是:

將 Logstash 配置中的現有 syslog 塊替換為:

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

接下來,使用 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}" }
   }
 }
}

您現在可以編輯過濾器匹配(“grok”)語法,以匹配您想要的格式。還可以通過創造性地使用 、 和 來支持多種不同ifelse if語法else

引用自:https://serverfault.com/questions/707784