У меня есть файлы системного журнала. Я использую фильтр плагина logstash syslog для обработки этих журналов. Я получаю сообщения в поле syslog_message
, например:
syslog_message:[cdp/interface.ERR] - {- -} Error writing CDP frame on system. Link is down
Но мне нужно новое поле, которое должно содержать только часть до .ERR, то есть «cdp / interface». Эта часть варьируется, и я не знаю, сколько типов будет. Итак, мне нужно новое поле, и я хочу сохранить эту часть в этом поле, чтобы я мог построить количество этих терминов в кибане.
текущая конфигурация logstash:
filter {
if [type] == "syslog" {
grok {
match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" }
add_field => [ "received_at", "%{@timestamp}" ]
add_field => [ "received_from", "%{host}" ]
}
date {
target => "syslog_timestamp"
match => [ "syslog_timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ]
}
После добавления нового grok в файл конфигурации, как это было предложено @Val
grok {
match => { "syslog_message" => "\[%{PROG:syslog_type}\.%{LOGLEVEL:syslog_level}\] %{GREEDYDATA:syslog_message}" }
}
Для некоторых входных данных происходит grokparsefailure.
Вот некоторые строки, для которых он не работает:
syslog_message: [hald.INFO]: Support query handler called
syslog_message:[mgmtd.INFO]: Finished database commit
Любая помощь будет оценена по достоинству. Спасибо