Разные экстракторы для одного и того же входа Graylog?
Я использую функцию Sidelog Graylog с Filebeat, чтобы получить несколько различных файлов журнала с моего сервера, включая Syslog, Nginx и Java App. Все они поступают в один и тот же вход Graylog для Beats (я пытался предоставить несколько входов, к сожалению, Filebeat отправляет в одно и только одно место). Все отлично работает, кроме экстракторов.
Как указать конкретный экстрактор для конкретного сообщения журнала? Пример: Если поле 'type' = 'API' (мое приложение Java), я хочу применить JSON-экстрактор. Если type = 'nginx', тогда примените экстракторы регулярных выражений.
2 ответа
Я принимаю несколько источников журналов на одном входе, и к нему подключены 4 экстрактора. Из поведения, которое я наблюдал, если экстрактор не совпадает, он просто переходит к следующему экстрактору. Это всего лишь попытка, а не сила.
Например, мои экстракторы:
- Декодировать JSON (входные данные представлены как JSON, это выравнивается по полям)
- Стандартный формат регистрации приложений (мы используем внутренний стандарт)
- Код ошибки для приложения (если ошибка, наши приложения используют настраиваемое поле Example_Error=Something)
- Имя хоста Mac OS X
При входе в журнал приложения без ошибок он:
- Получает расшифровку из JSON
- Соответствует формату через GroK с RegEx
- Pass (нет поля "Example_Error=")
- Проход (нет совпадения с журналами Mac OS X)
И когда системный журнал Mac OS X входит:
- Получает расшифровку из JSON
- Pass (не соответствует формату регистрации приложения)
- Pass (не соответствует полю с кодом ошибки)
- Получает имя хоста извлечено
С некоторым планированием и хорошими наборами гроков вы можете заставить это работать со многими экстракторами, основываясь на ожидаемом форматировании ваших журналов. Для вас также может быть полезен параметр "Только попытка извлечения, если поле содержит (строка / регулярное выражение)" в экстракторах.
Вы можете связать экстракторы так, что если сообщение содержит API, скопируйте сообщение в api_message и выполните экстрактор в этом новом поле.
сделайте то же самое для nginx и т. д.