Как предотвратить компрессию файлов при ротации логов в Kubernetes?

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

Привет, у нас настроена ротация логов в 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.

код kubelet

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

Вам удалось хорошо настроить ротацию логов в Kubernetes, но проблема с сжатием файлов во время ротации может привести к потере логов, если Filebeat продолжает считывать несжатые файлы. В Kubernetes ротация логов контейнеров осуществляется кодом kubelet, который действительно не использует стандартный инструмент logrotate и не предоставляет возможности настроить поведение сжатия файлов во время ротации.

Вот несколько рекомендаций по решению вашей проблемы:

  1. Изменение настроек Filebeat:
    Вы можете настроить Filebeat для работы с одновременно создаваемыми и сжатыми лог-файлами. Для этого в конфигурации Filebeat используйте опцию ignore_older, чтобы игнорировать старые сжатые лог-файлы, при этом настраивайте close_inactive, чтобы Filebeat закрывал и не читал файлы, которые не изменялись в течение определенного времени. Пример конфигурации может выглядеть так:

    filebeat.inputs:
    - type: container
     paths:
       - /var/log/containers/*.log
     ignore_older: 10m
     close_inactive: 5m
  2. Использование сторонних инструментов:
    Если проблема действительно заключается в том, что сжатие логов происходит слишком быстро, можно рассмотреть возможность использования сторонних инструментов для ротации логов, которые позволяют более гибко настраивать параметры, в том числе отключение сжатия.

  3. Настройка системы события:
    Один из путей решения проблемы может заключаться в создании системы событий или триггеров, которые будут уведомлять Filebeat или другое приложение об изменениях в директории логов. Это можно реализовать, например, через каналы обмена сообщениями (например, Kafka) или через вебхуки.

  4. Обратитесь к команде разработчиков Kubernetes:
    Вы также можете рассмотреть возможность обращения к сообществу Kubernetes или разработчикам с предложением добавить опцию для отключения сжатия в будущих версиях.

  5. Личный подход:
    Если у вас есть возможность модифицировать код kubelet, вы можете обратиться к указанной вами ссылке на исходный код и внести необходимые изменения, чтобы отключить сжатие логов. Однако это потребует создания и поддержки собственного билда Kubernetes.

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

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

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