Прием и обработка логов по протоколу Syslog
Идея
Принимать логи от различных устройств и серверов по протоколу Syslog.
Сохранять историю логов в метриках, привязанных к узлам, которые прислали данные. Иметь возможность просматривать логи одновременно с другими данными.
Обрабатывать логи: 1. парсить в логах значения полей и сохранять численные метрики на их основе. 2. реагировать на появление сообщений или определенных строк в сообщениях (триггеры)
Реализация
Состоит из двух частей: - организация приема и распределения логов по хостам - обработка логов
Для приема логов используется воркер, работающий в режиме "сервера", то есть пассивно ожидающий данных на сетевом порту UDP:514.
Прием и распределение логов
Сначала нужно настроить узел и метрику, в которые будут попадать все логи.
Для организации приема данных в режиме сервера существует специальных тип метрик Server worker.
С пакетамм glber-server-*
поставляются некоторые воркеры, в том числе утилита glb_server_worker
для приема данных по протоколу Syslog.
Утилита принимает параметр - ip адрес и номер порта, на котором она будет слушать поток данных.
glb_syslog_worker --listen=0.0.0.0:514
Безопаснее использовать утилиту на непривилегированных портах ( > 1024 ). Если требуется, как в примере выше, запустить на стандартном Syslog порту 514, то нужно выставить флаг привилегированных прав утилите:
chmod +s glb_syslog_worker
Настройте элемент данных с типом Server worker
и укажите утилиту glb_syslog_worker в качестве воркера для такого элемента данных.
Чтобы поток логов данных распределять по хостам, нужно использовать правила препроцессинга, которые перераспределяют логи в зависимости от информации в логах.
Воркер glb_syslog_worker преобразует приходяще логи в JSON формат. Поддерживаются и RFC5425 и RFC3164.
Как правило, в данных есть поля, идентифицирующие хост - имя хоста или его ip адрес.
Воркер glb_syslog_worker добавляет поле "client", содержащее ip адрес с которого пришла строка с логом.
Для нахождения узла - приемника логов в конфигруции можно использовать правила поиска узла по его IP адресу, в таком случае ищется узел с IP адресом назначенным на любой из его интерфейсов в конфигурации мониторинга, либо можно сопоставлять узлы по имени, тогда поиск делается по имени хоста.
Для получения значений полей нужно использовать зависимые элементы данных с типом обработки JSON path и значением $.
Пример настройки препроцессинга эелемнта данных для перенаправления логов:
Возмонжо использование обоих правил одно - за другими, если нужно, чтобы работали оба типа поиска. Подробно про поиск узла по данным и перенаправление данных указано в Использование препроцессинга для распределения метрик
Обработка логов
Формат RFC5424 предпочтителен, так как формат подразумевает использование произвольных key-value значений, что дает очень большую гибкость и возможность получить в препроцессинге узла данные из таких пар в отдельные метрики
Обработку логов следует настраивать в шаблонах узлов, на которые логи перераспределяются.
Таким образом можно настроить специфичную обработку в зависимости от типа узла. Парсинг и обработка должны быть настроены в зависимых от основной лог-метрики метриках.
Для работы триггеров можно использовать полученные из логов цифровые значения или функции поиска строковой информации.
Маркировка логов по результатам триггеринга
В случае, если данные типа Log
привели к созданию новой проблемы или, наоборот, к удалению существующей проблемы, то такие строки при просмотре истории маркируются в цвет Severity
триггера, когда проблема была создана, или в зеленый цвет, когда проблема была разрешена, также в шкале времени отображается ссылка на событие: