В настоящее время у меня есть следующее архитектурное будущее в Куберне:
- В модуле запущен сервис и контейнер с коляской (называемый
logger
).
- Службы записывают данные в файл, контейнер с дополнительной тележкой читает этот файл и записывает его в стандартный вывод.
- Fluentd daemonset сконфигурирован для чтения выходных данных (которые собраны в файле в
/var/log/containers/*_logger-*.log
, который является ссылкой на другой файл (последний файл с момента последнего вращения файла, на более старые файлы, без ссылок) .
- Всегда 3 сообщения журнала принадлежат друг другу (одни и те же поля)
Эта конфигурация работает, как и ожидалось, для тысяч сообщений.
Однако вот в чем проблема:
Я заметил, что fluentd иногда только перенаправляет сообщения журнала 1 или 2 из 3 сообщений, которые принадлежат друг другу, хотя все 3 сообщения написаны службой и контейнером коляски.
Для пояснения предположим, что 1 перенаправлен, 2 и 3 нет. После некоторых исследований я обнаружил, что в таких случаях сообщение 1 является последним сообщением перед поворотом журнала, сообщения 2 и 3 находятся в другом файле (где символическая ссылка указывает с момента ротации, и поэтому должна быть прочитана).
Таким образом, похоже, что fluentd пропускает некоторые строки, прежде чем продолжить чтение нового файла после ротации журнала kubernetes.
- Это известная проблема?
- Почему флюэнт и куберне ведут себя так?
- И главный вопрос: Что я могу сделать, чтобы предотвратить такое поведение, чтобы получать все сообщения журнала?
Я использую docker-image fluent/fluentd-kubernetes-daemonset:v0.12.33-elasticsearch
Если требуется дополнительная информация, пожалуйста, дайте мне знать.