Вопрос или проблема
Привет, у нас настроена ротация логов в Kubernetes, которая срабатывает каждые 100 МБ. У нас есть демон Filebeat, который считывает папку /var/log/pods
.
Все работает хорошо, пока объем логов не увеличивается, и когда логи начинают ротироваться и сжиматься, Filebeat продолжает читать ротированный несжатый файл. В результате мы теряем логи.
Существует ли способ сказать Kubernetes ротировать, но не сжимать? Или способ, чтобы не потерять логи во время ротации?
Обновление:
Единственные настройки, которые я установил для Kubelet, это containerLogMaxFiles: 10
и containerLogMaxSize: 100Mi
в конфигурации Kubelet. Что касается ротации логов, я посмотрел в /etc/logrotate.d
, и я не вижу ничего конкретного для /var/log/pods
.
Чтобы было ясно, логи в /var/log/pods
ротацией занимаются Kubelet, используя указанные настройки в конфигурации Kubelet.
Также при проверке статуса logrotate в /var/lib/logrotate/status
нет упоминания о /var/log/pods/...
.
Обновление: у нас настроен filebeat для чтения симлинка на /var/log/containers
вместо /var/log/pods
.
Я думаю, что ротация логов является специализированной частью кода kubelet, т.е. она не использует logrotate.
Ответ или решение
Вам удалось хорошо настроить ротацию логов в Kubernetes, но проблема с сжатием файлов во время ротации может привести к потере логов, если Filebeat продолжает считывать несжатые файлы. В Kubernetes ротация логов контейнеров осуществляется кодом kubelet, который действительно не использует стандартный инструмент logrotate и не предоставляет возможности настроить поведение сжатия файлов во время ротации.
Вот несколько рекомендаций по решению вашей проблемы:
-
Изменение настроек Filebeat:
Вы можете настроить Filebeat для работы с одновременно создаваемыми и сжатыми лог-файлами. Для этого в конфигурации Filebeat используйте опциюignore_older
, чтобы игнорировать старые сжатые лог-файлы, при этом настраивайтеclose_inactive
, чтобы Filebeat закрывал и не читал файлы, которые не изменялись в течение определенного времени. Пример конфигурации может выглядеть так:filebeat.inputs: - type: container paths: - /var/log/containers/*.log ignore_older: 10m close_inactive: 5m
-
Использование сторонних инструментов:
Если проблема действительно заключается в том, что сжатие логов происходит слишком быстро, можно рассмотреть возможность использования сторонних инструментов для ротации логов, которые позволяют более гибко настраивать параметры, в том числе отключение сжатия. -
Настройка системы события:
Один из путей решения проблемы может заключаться в создании системы событий или триггеров, которые будут уведомлять Filebeat или другое приложение об изменениях в директории логов. Это можно реализовать, например, через каналы обмена сообщениями (например, Kafka) или через вебхуки. -
Обратитесь к команде разработчиков Kubernetes:
Вы также можете рассмотреть возможность обращения к сообществу Kubernetes или разработчикам с предложением добавить опцию для отключения сжатия в будущих версиях. -
Личный подход:
Если у вас есть возможность модифицировать код kubelet, вы можете обратиться к указанной вами ссылке на исходный код и внести необходимые изменения, чтобы отключить сжатие логов. Однако это потребует создания и поддержки собственного билда Kubernetes.
Каждый из вышеперечисленных путей требует внимательного анализа и тестирования, чтобы убедиться, что ваша система продолжает работать надежно.