【发布时间】:2018-03-23 13:08:25
【问题描述】:
如何为日志文件启用日志轮换,例如访问日志。
这是内置的吗?
文档只说“这允许日志由外部程序旋转和处理,例如 logrotate”
【问题讨论】:
标签: traefik
如何为日志文件启用日志轮换,例如访问日志。
这是内置的吗?
文档只说“这允许日志由外部程序旋转和处理,例如 logrotate”
【问题讨论】:
标签: traefik
如果您在 Docker 容器中运行 Traefik,那么您可以执行以下操作:
检查是否安装了 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
【讨论】:
docker 开头的行。我将 Traefik 配置为 Systemd 服务,并将命令设置为 systemctl kill --signal="USR1" traefik。
systemctl kill --signal=USR1 traefik。我不知道为什么,但是在 docker 参考中it is used in this way
日志轮换
Traefik 将在收到
USR1信号时关闭并重新打开其日志文件(假设它们已配置)。这允许日志由外部程序轮换和处理,例如logrotate。
https://docs.traefik.io/v1.6/configuration/logs/#log-rotation
【讨论】:
似乎没有内置 logrotation,所以我在安装了traefik_access.log 的主机上启用了 logrotation。
为了让 traefik 在 docker 容器中运行时能够正常工作,您必须卷挂载包含日志文件 (/opt/traefik/logs) 的目录,而不是日志文件本身 (/traefik_access.log)。
volumes:
- /opt/traefik/logs:/logs
我的 traefik 1.7.4 的 logrotate-config 在容器中运行,卷挂载到“/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
}
【讨论】:
docker kill --signal="USR1" $(docker ps | grep '\btraefik\b' | awk '{print $1}') - 注意容器名称前后的\b。