Как включить логротацию для траэфик?

Как включить ротацию журналов для файлов журналов, например access.log.

Это встроено?

Документы только говорят: «Это позволяет ротацию журналов и их обработку внешней программой, такой как logrotate».


person Robert Lachner    schedule 23.03.2018    source источник


Ответы (3)


Ротация журнала

Traefik закроет и снова откроет свои файлы журналов, если они настроены, после получения сигнала USR1. Это позволяет вращать журналы и обрабатывать их внешней программой, например logrotate.

https://docs.traefik.io/v1.6/configuration/logs/#log-rotation

person ldez    schedule 29.03.2018
comment
Привет, я использовал этот подход на одном хосте докеров, используя перезапуск docker-compose внутри postrotate logrotate. Но в режиме роя способ перезапуска службы - использование docker service update --force traefik. В этом сценарии служба перезапускается на каждом узле, участвующем в рое, но журналы не меняются на каждом узле. Я что-то упускаю? - person HelLViS69; 23.05.2018
comment
предполагая, что они настроены, при получении сигнала USR1 я не могу понять, что это значит. Таким образом, каждый раз, когда logrotation вращается, появляется новый пустой файл access.log, и ведение журнала больше не отображается. Что я делаю неправильно ? - person Robert Lachner; 05.06.2018
comment
@RobertLachner Я тоже это испытал. В моем файле docker-compose.yml я отдельно экспортировал файлы журнала в хост-систему. Когда я перестал это делать и вместо этого экспортировал каталог (скажите traefik, чтобы он поместил сюда файлы журнала), проблема исчезла. Может это тебе поможет. - person anastymous; 02.12.2018
comment
Теперь он работает у меня с конфигурацией, о которой я упоминал ранее. Просто добавил этот конфиг в /etc/logrotate.d/traefik. Его можно протестировать с помощью: logrotate /etc/logrotate.d/traefik --debug. - person Robert Lachner; 22.07.2019

Если вы запускаете Traefik в контейнере Docker, вы можете сделать что-то вроде этого:

Убедитесь, что logrotate установлен

logrotate --version

Создайте файл в /etc/logrotate.d/

vi /etc/logrotate.d/traefik

Ставьте следующий скрипт, не забудьте указать название контейнера.

/var/log/traefik/*.log {
  size 10M
  rotate 5
  missingok
  notifempty
  postrotate
    docker kill --signal="USR1" <container-name>
  endscript
}

Запустить!

logrotate /etc/logrotate.conf --debug 
logrotate /etc/logrotate.conf
person Slipstream    schedule 02.08.2018
comment
Это также работает, если Traefik работает вне Docker, и в этом случае необходимо изменить строку, начинающуюся с docker. Я настроил Traefik как службу Systemd и установил для команды значение systemctl kill --signal="USR1" traefik. - person Ben Companjen; 07.01.2019
comment
Для меня это не сработало с кавычками вокруг имени сигнала, пришлось их удалить: systemctl kill --signal=USR1 traefik. Не знаю почему, но он используется таким образом в справочнике по докеру - person Choma; 16.05.2020

Похоже, что нет встроенного logrotation, поэтому я включил ведение журнала на хосте, к которому подключен access.log.

Мой logrotate-config для traefik 1.7.4, запущенного в контейнере с монтированием тома в "/ opt / traefik / logs":

/opt/traefik/logs/*.log {
  daily
  rotate 30
  missingok
  notifempty
  compress
  dateext
  dateformat .%Y-%m-%d
  create 0644 root root
  postrotate
   docker kill --signal="USR1" $(docker ps | grep traefik | awk '{print $1}')
  endscript
 }
person Robert Lachner    schedule 29.03.2018
comment
просто упомянув, чтобы помнить, что другие контейнеры также могут иметь компонент traefik в своем имени - например, страницы ошибок и т. д., и подпрограмма может возвращать неожиданные результаты для некоторых - person Mark; 08.11.2020
comment
Если вы хотите использовать точное имя, вы можете использовать docker kill --signal="USR1" $(docker ps | grep '\btraefik\b' | awk '{print $1}') - обратите внимание на \b перед и после имени контейнера. - person Nepomuk Frädrich; 05.01.2021