Я настроил logstash (v1.5.0), с простым входом системного журнала, следующим образом:
input {
syslog {
type => syslog
port => 5514
}
}
filter {
kv {}
}
output {
elasticsearch {
cluster => "logs"
host => "0.0.0.0"
protocol => "transport"
}
}
Однако это, кажется, перестало работать на некоторых журналах крона. Следующей строке не удается проанализировать с 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
]
}
Какие-либо указатели?
Вход системного журнала использует Grok внутри, ваше сообщение, вероятно, не соответствует стандарту системного журнала на 100%.
Решение по этой ссылке сработало для меня: http: // kartar. net / 2014/09 / когда-logstash-and-syslog-go-error /
Ключевая информация из ссылки:
Замените существующий блок системного журнала в конфигурации 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}
, чтобы он соответствовал также нестандартным строкам ввода.