Я настроил logstash (v1.5.0) с простым вводом системного журнала следующим образом:
input {
syslog {
type => syslog
port => 5514
}
}
filter {
kv {}
}
output {
elasticsearch {
cluster => "logs"
host => "0.0.0.0"
protocol => "transport"
}
}
Однако, похоже, что это не работает в некоторых журналах cron. Следующая строка не может быть проанализирована с помощью _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 внутри, ваше сообщение, вероятно, не соответствует стандарту syslog на 100%.
Решение по этой ссылке сработало для меня: http://kartar.net/2014/09/when-logstash-and-syslog-go-wrong/
Основная информация по ссылке:
Замените существующий блок системного журнала в конфигурации Logstash на:
input {
tcp {
port => 514
type => syslog
}
udp {
port => 514
type => syslog
}
}
Затем замените элемент синтаксического анализа нашего подключаемого модуля ввода системного журнала с помощью подключаемого модуля фильтра Grok.
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"), чтобы он соответствовал желаемому формату. Также можно поддерживать несколько разных синтаксисов с творческим использованием if
, else if
, и else
.
Появившись здесь через 4 года, теперь вход системного журнала logstash поддерживает настройку шаблона Grok для использования, как подробно описано в документация.
Чтобы сохранить функциональность ввода системного журнала, можно вставить нестандартный шаблон для анализа в grok_pattern
настройка, например:
input {
syslog {
port => 514
type => "syslog"
grok_pattern => "(?:<%{POSINT:priority}>%{SYSLOGLINE}|YOUR NONSTANDARD PATTERN HERE)"
}
}
или аналогичным образом изменить дефолт <%{POSINT:priority}>%{SYSLOGLINE}
шаблон, чтобы он соответствовал также нестандартным входным линиям.