ошибка разбора сообщения журнала с парсером ‘syslog-rfc3164’

Вопрос или проблема

У меня развернут Fluent Bit (aws-for-fluent-bit:2.28.4) как DaemonSet в AWS EKS с следующим пайплайном:

[SERVICE]
    Parsers_File /fluent-bit/parsers/parsers.conf

[INPUT]
    Name     syslog
    Tag      prod_syslog
    Parser   syslog-rfc3164
    Listen   0.0.0.0
    Port     5140
    Mode     tcp
    
[OUTPUT]
    Name                  cloudwatch_logs
    Match                 prod_syslog
    region                eu-west-1
    log_group_name        prod-eks-syslog
    log_stream_name       syslog-messages
    log_retention_days    30
    auto_create_group     true

Вышеуказанный пайплайн настраивает Fluent Bit на прослушивание сообщений syslog с любого IP-адреса на порту TCP:5140, чтобы их парсить с использованием протокола syslog RFC 3164.
И для сохранения полученных сообщений syslog в группе логов AWS CloudWatch под названием: “prod-eks-syslog”.
Я могу подтвердить, что Fluent Bit принимает сообщения syslog,
но по какой-то причине сообщения syslog не записываются в группу логов AWS CloudWatch.
При устранении неполадок я заметил следующие ошибки в логах пода Fluent Bit:

[2024/10/28 10:25:55] [ warn] [input:syslog:syslog.0] ошибка парсинга лог-сообщения с парсером 'syslog-rfc3164'
[2024/10/28 10:25:55] [ warn] [parser:syslog-rfc3164] недействительный формат времени %b %d %H:%M:%S для ' Oct 28'
[2024/10/28 10:25:56] [ info] [output:cloudwatch_logs:cloudwatch_logs.0] Создание потока логов syslog-messages в группе логов prod-eks-syslog

Я понимаю из вышеуказанных ошибок, что парсер ожидает допустимый формат времени, но не понимаю, почему.
Так как приложение, которое отправляет фактические сообщения syslog, также работает с протоколом syslog RFC 3164.

Как я могу продолжить устранение этой проблемы?
Существуют ли какие-либо команды Kubectl или Fluent-Bit/Logger, чтобы проверить входящие сообщения syslog перед их обработкой в пайплайне?

Ответ или решение

Проблема парсинга сообщений syslog в Fluent Bit при использовании RFC 3164

Введение

Работа с Fluent Bit в AWS EKS может вызывать различные сложности, особенно когда дело доходит до парсинга сообщений syslog. В данном случае вы сталкиваетесь с ошибкой парсинга, связанной с форматом времени, определённым в стандарт RFC 3164. В этой статье мы рассмотрим возможные причины данной проблемы и шаги для её решения.

Проблема

Ошибка в логах вашего контейнера Fluent Bit указывает на то, что парсер ожидает определённый формат времени, но не может его распознать:

[2024/10/28 10:25:55] [ warn] [parser:syslog-rfc3164] invalid time format %b %d %H:%M:%S for ' Oct 28'

Это происходит, когда полученные syslog сообщения не соответствуют ожидаемому формату. Обычно RFC 3164 предполагает, что временной формат выглядит следующим образом: "МММ дд чч:мм:сс" (например, "Oct 28 10:25:55"). В вашем случае, похоже, что время вIncoming log message не соответствует данному формату, что и вызывает ошибку.

Возможные причины

  1. Неверный формат сообщения: Syslog-сообщения, отправляемые приложением, могут иметь неправильный формат. Убедитесь, что приложение корректно формирует сообщения в соответствии с RFC 3164.

  2. Пробел перед датой: Возможно, в начале строки присутствует лишний пробел, что может привести к проблемам с парсингом.

  3. Разные временные зоны: Если ваш сервер и приложение отправляют сообщения в разных временных зонах, это может привести к несоответствиям в формате времени.

Шаги по устранению проблемы

Для дальнейшего диагностирования проблемы вам нужно будет проверить входящие сообщения, прежде чем они будут обработаны Fluent Bit.

1. Логи и вывод

Используйте команду kubectl logs для получения логов вашего pod’а с Fluent Bit. Это может помочь вам понять, какие сообщения были получены, и какой именно формат используется.

kubectl logs <имя-pod>

2. Включите отладочный логгинг

Для получения более подробной информации, вы можете повысить уровень логирования Fluent Bit, добавив следующую строку в секцию [SERVICE]:

[SERVICE]
    Log_Level debug

Это позволит вам увидеть более детализированную информацию о входящих сообщениях и выявить, в чём именно заключается проблема.

3. Прямое тестирование входящего потока

Вы можете использовать утилиты для отправки тестовых syslog-сообщений на указанный порт, чтобы увидеть, как Fluent Bit обрабатывает их.

Пример команды для отправки тестового сообщения с использованием logger:

logger -n 127.0.0.1 -P 5140 -p user.info "Oct 28 10:25:55 Test message"

4. Проверка конфигурации парсера

Убедитесь, что конфигурация парсера в вашем файле parsers.conf правильно настроена под RFC 3164. Ваша конфигурация должна содержать следующее:

[PARSER]
    Name        syslog-rfc3164
    Format      regex
    Regex       ^<(?<pri>[0-9]{1,3})>(?<time>[A-Z][a-z][a-z] [0-9]{1,2} [0-9]{1,2}:[0-9]{2}:[0-9]{2}) (?<host>[^ ]+) (?<app>[^ ]+) (?<msg>.*)$
    Time_Key    time
    Time_Format %b %d %H:%M:%S

Заключение

Ошибки парсинга в Fluent Bit могут иметь различные причины, начиная от неправильного формата сообщений и заканчивая проблемами с настройками парсера. Применяя демонстрационные команды и настройки, вы сможете диагностировать и устранить проблему с парсингом syslog-сообщений.

Следуя вышеописанным шагам и рекомендациям, вы сможете глубже понять входящие сообщения и успешно настроить систему для корректной обработки и отправки логов в AWS CloudWatch.

Оцените материал
Добавить комментарий

Капча загружается...