Вопрос или проблема
У меня развернут 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 не соответствует данному формату, что и вызывает ошибку.
Возможные причины
-
Неверный формат сообщения: Syslog-сообщения, отправляемые приложением, могут иметь неправильный формат. Убедитесь, что приложение корректно формирует сообщения в соответствии с RFC 3164.
-
Пробел перед датой: Возможно, в начале строки присутствует лишний пробел, что может привести к проблемам с парсингом.
-
Разные временные зоны: Если ваш сервер и приложение отправляют сообщения в разных временных зонах, это может привести к несоответствиям в формате времени.
Шаги по устранению проблемы
Для дальнейшего диагностирования проблемы вам нужно будет проверить входящие сообщения, прежде чем они будут обработаны 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.