Ubuntu Syslog日志存储优化方案
日志轮转是控制日志文件大小、数量的关键方法,Ubuntu系统默认使用logrotate工具管理。需编辑/etc/logrotate.d/rsyslog(rsyslog的专用配置文件),针对/var/log/syslog等核心日志文件设置规则:
size 100M(当日志文件达到100MB时触发)或daily(每日轮转)设置轮转条件,建议优先使用size以避免单文件过大;rotate 4表示保留最近4个轮转文件,超出部分自动删除;compress启用gzip压缩旧日志(节省空间),delaycompress延迟压缩(保留最近1个未压缩文件便于排查问题);missingok(日志文件丢失时不报错)、notifempty(日志为空时不轮转)、create 640 root adm(创建新日志时设置权限为640,属主root、属组adm)。/var/log/syslog {
size 100M
rotate 4
compress
delaycompress
missingok
notifempty
create 640 root adm
}
修改后无需重启服务,logrotate会自动检测配置变化(或通过sudo logrotate -f /etc/logrotate.d/rsyslog强制立即执行)。
降低日志详细程度可直接减少日志量。编辑rsyslog主配置文件/etc/rsyslog.conf或/etc/rsyslog.d/50-default.conf,修改日志级别过滤规则:
*.info(记录所有info及以上级别日志)改为*.warning(仅记录warning及以上级别,如错误、严重警告),过滤掉调试、普通信息等冗余日志;*.warning;mail.none;authpriv.none;cron.none /var/log/syslog
此配置表示:除邮件、认证、cron服务外的所有warning及以上级别日志写入/var/log/syslog。Ubuntu系统使用systemd-journald服务管理内核及服务日志(存储于/var/log/journal),可通过以下命令优化:
sudo journalctl --vacuum-time=7d(删除7天前的日志)、sudo journalctl --vacuum-size=500M(限制日志总大小为500MB);/etc/systemd/journald.conf,设置SystemMaxUse=500M(最大磁盘使用量)、SystemKeepFree=100M(保留空闲空间),修改后重启服务:sudo systemctl restart systemd-journald。systemctl list-unit-files --state=enabled查看已启用的服务,禁用不需要的服务(如cups打印服务、bluetooth蓝牙服务):sudo systemctl disable service_name;/etc/rsyslog.conf,注释掉不需要的模块(如UDP接收模块ModLoad imudp、Run imudp 514),减少不必要的网络日志接收。truncate命令清空大日志文件(不删除文件本身,避免影响服务):sudo truncate -s 0 /var/log/syslog;删除压缩后的旧日志:sudo rm /var/log/*.gz;cron设置定时任务,例如每天凌晨清理7天前的.log文件:sudo crontab -e
添加以下行:0 0 * * * find /var/log -type f -name "*.log" -mtime +7 -exec rm -f {} \;
```。
若默认工具无法满足需求,可使用更灵活的日志管理工具:
/etc/syslog-ng/syslog-ng.conf,需安装sudo apt install syslog-ng;