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