Назад | Перейти на главную страницу

Различные экстракторы для одного и того же входа Graylog?

Я использую боковую функцию Graylog с Filebeat, чтобы забрать с моего сервера несколько различных файлов журналов, включая Syslog, Nginx и Java App. Все они поступают в один и тот же вход Graylog для Beats (я пытался предоставить несколько входов, к сожалению, Filebeat отправляет в одно и только одно место). Все отлично работает кроме экстракторов.

Как указать конкретный экстрактор для определенного сообщения журнала? Пример: Если поле 'type' = 'API' (мое приложение Java), я хочу применить экстрактор JSON. Если type = 'nginx', тогда примените экстракторы регулярных выражений.

Я загружаю несколько источников журналов на один вход и к нему привязаны 4 экстрактора. Судя по поведению, которое я наблюдал, если экстрактор не соответствует требованиям, он просто переходит к следующему экстрактору. Это всего лишь попытка, а не сила.

Например, мои экстракторы:

  1. Декодировать JSON (входные данные представлены как JSON, распределяются по полям)
  2. Стандартный формат журнала приложений (мы используем внутренний стандарт)
  3. Код ошибки для приложения (в случае ОШИБКИ наши приложения используют настраиваемое поле Example_Error = Something)
  4. Имя хоста Mac OS X

Когда журнал приложения появляется без ошибок, он:

  1. Получает декодирование из JSON
  2. Соответствует формату через Grok с RegEx
  3. Пройдено (нет поля "Example_Error =")
  4. Пройдено (нет совпадений с журналами Mac OS X)

И когда входит системный журнал Mac OS X:

  1. Получает декодирование из JSON
  2. Пройдено (не соответствует формату ведения журнала приложения)
  3. Пройдено (не соответствует полю кода ошибки)
  4. Получает извлеченное имя хоста

При некотором планировании и хороших наборах приемов вы можете заставить это работать с большим количеством экстракторов на основе ожидаемого форматирования ваших журналов. Особенно полезной для вас может быть опция «Попытка извлечения только, если поле содержит (строку / регулярное выражение)» в экстракторах.

Вы можете связать экстракторы таким образом, чтобы, если сообщение содержит API, скопировать сообщение в api_message, выполнить экстрактор в этом новом поле.

сделайте то же самое для nginx и т. д.