深色模式
日志轮转 logrotate
不轮转的日志会无限增长直到磁盘写满、服务崩溃。logrotate 是 Linux 自带工具,按大小或时间切割、压缩、清理旧日志。本文配置 nginx 日志轮转。
适用环境
bash
# 确认 logrotate 已安装
which logrotate
# 查看已有配置
ls /etc/logrotate.d/1
2
3
4
2
3
4
操作步骤
1. 新增配置 /etc/logrotate.d/nginx
conf
/var/log/nginx/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 0640 www-data adm
sharedscripts
postrotate
[ -f /var/run/nginx.pid ] && kill -USR1 $(cat /var/run/nginx.pid)
endscript
}1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
2. 也可以按大小触发
conf
/var/log/app/*.log {
size 100M
rotate 7
compress
copytruncate
}1
2
3
4
5
6
2
3
4
5
6
3. 手动触发一次测试
bash
sudo logrotate -d /etc/logrotate.d/nginx # 演练(不实际执行)
sudo logrotate -f /etc/logrotate.d/nginx # 强制执行1
2
2
验证
bash
ls -lh /var/log/nginx/ # 应看到 .1 / .gz 轮转后的文件
sudo logrotate -d /etc/logrotate.d/nginx | grep -i 'considering'1
2
2
常见坑
WARNING
用 create 方式轮转时,采集端(Filebeat/Fluent Bit)靠 inode 跟踪,旧文件句柄可能仍被占用;Nginx 用 kill -USR1 重新打开日志文件,务必配 postrotate。
DANGER
copytruncate 在拷贝和截断之间有时间窗,可能丢失少量日志;且不支持 create。高可靠场景优先用 create + 信号重载。