1. 配置日志轮转(Log Rotation)
日志轮转是优化Syslog磁盘空间使用的核心手段,通过定期分割、压缩和删除旧日志,防止单个日志文件过大。CentOS默认使用logrotate工具管理日志轮转,主要配置文件为/etc/logrotate.conf,系统日志的具体规则位于/etc/logrotate.d/syslog(或/etc/logrotate.d/rsyslog)。
典型配置示例如下(针对/var/log/messages):
/var/log/messages {
daily # 每天轮转一次(可根据需求改为weekly/monthly)
rotate 7 # 保留最近7个轮转日志文件
compress # 压缩旧日志(节省空间)
delaycompress # 延迟压缩(如第8个文件才压缩第7个,避免频繁操作)
missingok # 日志文件丢失时不报错
notifempty # 日志为空时不轮转
create 640 root adm # 创建新日志文件,权限640,属主root,属组adm
postrotate # 轮转后执行的命令(重新加载rsyslog服务)
/usr/bin/systemctl reload rsyslog > /dev/null 2>&1 || true
endscript
}
手动测试配置是否生效:sudo logrotate -f /etc/logrotate.conf(强制轮转);查看轮转状态:sudo logrotate -d /etc/logrotate.conf(调试模式,输出详细信息)。
2. 调整日志级别
过度详细的日志(如info级别)会生成大量无用信息,增加磁盘占用。通过降低日志级别,仅记录必要事件(如warning及以上),可显著减少日志量。
编辑rsyslog主配置文件(/etc/rsyslog.conf或/etc/rsyslog.d/50-default.conf),修改日志级别规则。例如,将默认的*.info;mail.none;authpriv.none;cron.none /var/log/messages改为:
*.warning;mail.none;authpriv.none;cron.none /var/log/messages
此配置仅记录warning、err、crit等高级别日志,忽略info级别的常规信息。
3. 启用日志压缩与延迟压缩
压缩旧日志是减少磁盘空间的有效方式。在logrotate配置中添加compress参数,可将旧日志压缩为.gz格式(如messages.1.gz)。若不想立即压缩最新轮转的日志(避免影响系统性能),可添加delaycompress参数,延迟到下一次轮转时再压缩。
示例配置:
/var/log/kern.log {
daily
rotate 5
compress
delaycompress
missingok
notifempty
create 640 root adm
}
压缩后,日志文件大小可减少70%~90%(取决于日志内容)。
4. 更改日志存储位置
若/var分区磁盘空间不足,可将Syslog日志存储到其他有足够空间的分区。编辑rsyslog配置文件,修改日志文件的存储路径。例如,将/var/log/messages改为/data/log/messages:
*.* /data/log/messages
修改后,重启rsyslog服务使配置生效:sudo systemctl restart rsyslog。需确保目标分区已挂载且具有足够空间(可通过df -h命令查看)。
5. 使用远程日志服务器
将日志发送到远程日志服务器,可将本地磁盘空间压力转移至远程服务器。适用于多服务器环境或需要集中管理日志的场景。
编辑rsyslog配置文件(/etc/rsyslog.conf),添加以下规则(将日志发送到远程服务器192.168.1.100的UDP 514端口):
*.* @192.168.1.100:514 # UDP传输(默认端口514)
# 若需TCP传输(更可靠),使用@@代替@
# *.* @@192.168.1.100:514
重启rsyslog服务:sudo systemctl restart rsyslog。远程服务器需配置rsyslog以接收日志(如添加$ModLoad imudp和$UDPServerRun 514规则)。
6. 定期清理旧日志文件
对于未使用logrotate管理的旧日志(如/var/log/journal/下的journal日志),可定期手动清理。常用方法如下:
sudo journalctl --vacuum-time=7d;保留最大500MB日志:sudo journalctl --vacuum-size=500M。find命令查找并删除指定时间前的日志(如30天前的.log文件):sudo find /var/log -type f -name "*.log" -mtime +30 -exec rm -f {} \;
/etc/systemd/journald.conf,设置日志大小和时间限制:SystemMaxUse=1G # 最大使用1GB空间
MaxRetentionSec=1week # 保留1周日志
ForwardToSyslog=no # 不转发到syslog(避免重复存储)
修改后重启journald服务:sudo systemctl restart systemd-journald。7. 禁用不必要的日志记录
禁用不需要的服务或模块的日志,减少不必要的日志生成。例如:
cron日志):#cron.* /var/log/cron # 注释掉cron日志
imudp用于UDP接收),可在配置文件中注释掉加载语句:#$ModLoad imudp
修改后重启rsyslog服务:sudo systemctl restart rsyslog。