Я хочу запустить ELK-стек для сбора системного журнала со всего моего сетевого оборудования - Cisco, F5, Huawei, CheckPoint и т. Д. Во время экспериментов с Logstash, написание шаблонов Grok.
Ниже приведен пример сообщений от Cisco ASR:
<191> 30 октября 16:30:10 evlogd: [local-60sec10.950] [отладка cli 30000] [8/0/30501 cliparse.c: 367] [context: local, contextID: 1] [программное обеспечение системный журнал внутренней системы] Команда CLI [пользователь root, режим [локальный] ASR5K]: показать статистику управления политикой авторизации ims \ u0000
<190> 30 октября 16:30:10 evlogd: [local-60sec10.959] [информация о cli 30005] [08/0/30501 _commands_cli.c: 1792] [системный журнал внутренней системы программного обеспечения] Сеанс CLI завершен для безопасности Администратор root на устройстве / dev / pts / 7 \ u0000
<190> 30 октября 16:30:10 evlogd: [local-60sec10.981] [snmp 22002 info] [8/0/4550 trap_api.c: 930] [системный журнал внутренней системы программного обеспечения] Уведомление о внутренней ловушке 53 ( CLISessEnd) уровень привилегий пользователя root Администратор безопасности ttyname / dev / pts / 7 \ u0000
<190> 30 октября 16:30:12 evlogd: [local-60sec12.639] [информация о cli 30004] [08.08.3030 cli_sess.c: 127] [системный журнал внутренней системы программного обеспечения] Сеанс CLI запущен для безопасности Администратор root на устройстве / dev / pts / 7 из 192.168.1.1 \ u0000
<190> 30 октября 16:30:12 evlogd: [local-60sec12.640] [snmp 22002 info] [8/0/30575 trap_api.c: 930] [системный журнал внутренней системы программного обеспечения] Уведомление о внутренней ловушке 52 ( CLISessStart) уровень привилегий пользователя root Администратор безопасности ttyname / dev / pts / 7 \ u0000
Все они соответствуют моему шаблону здесь и здесь .
<%{POSINT:syslog_pri}>%{DATA:month} %{DATA:monthday} %{TIME:time} %{WORD:device}: \[%{WORD:facility}\-%{HOSTNAME}\] \[%{WORD:service} %{POSINT} %{WORD:priority}\] \[%{DATA}\] ?(\[context: %{DATA:context}, %{DATA}\])?%{SPACE}?(\[%{DATA}\] )%{GREEDYDATA:message}\\u0000
Но моя простая конфигурация logstash возвращает тег _grokparsefailure
(или _grokparsefailure_sysloginput
, если я использую GROK во входном плагине syslog), и не анализирует мой журнал.
Настройка с использованием GROK-фильтра
input { udp {
port => 5140
type => syslog } }
filter {
if [type] == "syslog" {
grok {
match => ["message", "<%{POSINT:syslog_pri}>%{DATA:month} %{DATA:monthday} %{TIME:time} %{WORD:device}: \[%{WORD:facility}\-%{HOSTNAME}\] \[%{WORD:service} %{POSINT} %{WORD:priority}\] \
[%{DATA}\] ?(\[context: %{DATA:context}, %{DATA}\])?%{SPACE}?(\[%{DATA}\] )%{GREEDYDATA:response}\\u0000"]
}
}
}
output { stdout { codec => rubydebug } }
Выход:
{
"@version" => "1",
"host" => "172.17.0.1",
"@timestamp" => 2018-10-31T09:46:51.121Z,
"message" => "<190>Oct 31 15:46:51 evlogd: [local-60sec51.119] [snmp 22002 info] [8/0/4550 <sitmain:80> trap_api.c:930] [software internal system syslog] Internal trap notification 53 (CLISessEnd) user kiwi privilege level Security Administrator ttyname /dev/pts/7\u0000",
"type" => "syslog",
"tags" => [
[0] "_grokparsefailure"
]
}
Конфигурация syslog-input-plugin:
input {
syslog {
port => 5140
grok_pattern => "<%{POSINT:syslog_pri}>%{DATA:month} %{DATA:monthday} %{TIME:time} %{WORD:device}: \[%{WORD:facility}\-%{HOSTNAME}\] \[%{WORD:service} %{POSINT} %{WORD:priority}\] \[%{DATA
}\] ?(\[context: %{DATA:context}, %{DATA}\])?%{SPACE}?(\[%{DATA}\] )%{GREEDYDATA:response}\\u0000"
}
}
output {
stdout { codec => rubydebug }
}
Выход:
{
"severity" => 0,
"@timestamp" => 2018-10-31T09:54:56.871Z,
"@version" => "1",
"host" => "172.17.0.1",
"message" => "<191>Oct 31 15:54:56 evlogd: [local-60sec56.870] [cli 30000 debug] [8/0/22400 <cli:8022400> cliparse.c:367] [context: local, contextID: 1] [software internal system syslog] CLI command [user kiwi, mode [local]ALA3_ASR5K]: show subscribers ggsn-only sum apn osmp\u0000",
"tags" => [
[0] "_grokparsefailure_sysloginput"
],
}
Что я делаю не так? А может кто-нибудь помочь исправить это?
PS Протестировано на logstash 2.4.1 и 5