日志溢出是Linux服务器常见问题,可能导致磁盘空间耗尽、系统性能下降甚至服务崩溃。以下是系统性的解决方案:
# 编辑主配置文件
sudo vim /etc/logrotate.conf
# 或为特定服务创建配置
sudo vim /etc/logrotate.d/nginx
示例配置:
/var/log/nginx/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 0640 www-data adm
sharedscripts
postrotate
/etc/init.d/nginx reload > /dev/null
endscript
}
daily/weekly/monthly
: 轮转频率rotate N
: 保留的旧日志数量size 100M
: 按大小而非时间轮转compress
: 启用压缩missingok
: 日志不存在时不报错sudo vim /etc/systemd/journald.conf
关键设置:
[Journal]
SystemMaxUse=500M
RuntimeMaxUse=200M
MaxFileSec=1month
应用更改:
sudo systemctl restart systemd-journald
sudo vim /etc/rsyslog.conf
添加/修改:
# 限制内核日志大小
$SystemLogRateLimitInterval 2
$SystemLogRateLimitBurst 50
sudo find /var/log -type f -name "*.log" -size +100M
# 清空而不删除文件(保持文件句柄)
sudo truncate -s 0 /var/log/large.log
# 或使用日志轮转后删除
sudo logrotate -f /etc/logrotate.conf
# 使用cron定期检查
sudo crontab -e
添加:
0 * * * * df -h | awk '$5 > 90 {print $6}' | mail -s "Disk Space Alert" admin@example.com
考虑使用JSON格式日志,便于后续处理和分析
# 查看磁盘使用情况
df -h
# 查找大文件
sudo du -ahx / | sort -rh | head -20
# 查看正在写入的日志文件
sudo lsof | grep deleted
# 检查日志服务状态
sudo systemctl status rsyslog
sudo systemctl status journald
通过以上措施,可以有效预防和处理Linux服务器的日志溢出问题,确保系统稳定运行。