Ubuntu syslog(rsyslog)日志优化指南
日志级别决定了记录的日志详细程度,降低级别可显著减少日志量。rsyslog支持的级别从低到高为:debug(调试)、info(一般信息)、notice(普通重要)、warning(警告)、err(错误)、crit(严重错误)、alert(需立即行动)、emerg(系统不可用)。
修改路径:编辑/etc/rsyslog.conf或/etc/rsyslog.d/50-default.conf文件,找到类似kern.* /dev/console的行,将*(所有级别)替换为目标级别(如kern.warning),仅记录警告及以上级别的内核日志。修改后保存文件,重启rsyslog服务使配置生效:sudo systemctl restart rsyslog。
日志轮转可自动归档、压缩旧日志,避免单个文件过大占用磁盘空间。Ubuntu使用logrotate工具管理rsyslog日志轮转,配置文件位于/etc/logrotate.d/rsyslog。
关键参数设置:
size 100M:当日志文件达到100MB时触发轮转(优先于时间触发);rotate 4:保留最近4个轮转文件;compress:压缩旧日志(节省空间);delaycompress:延迟压缩(保留最近一个未压缩的轮转文件,便于查阅);missingok:若日志文件丢失,不报错继续处理;notifempty:若日志文件为空,不进行轮转;create 640 root adm:创建新日志文件时设置权限(640)和所有者(root:adm)。sudo logrotate -d /etc/logrotate.d/rsyslog(模拟运行,不实际执行);确认无误后手动触发轮转:sudo logrotate /etc/logrotate.d/rsyslog。rsyslog的某些模块(如UDP接收模块)可能不需要使用,禁用后可降低系统资源消耗。
修改路径:编辑/etc/rsyslog.conf文件,找到以下行(通常位于文件顶部模块加载部分):
# ModLoad imudp
# Input imudp port 514
取消行首的#注释符号即可启用模块,保留注释则禁用模块。例如,若无需接收UDP协议的远程日志,可禁用imudp模块,减少网络和内存占用。
精简rsyslog配置文件中的冗余规则,避免不必要的日志记录。
操作建议:
mail.* /var/log/mail.log,若系统无邮件服务);auth.*规则合并为一条);journalctl是systemd的日志管理工具,可更高效地查询、过滤和管理日志(包括syslog日志)。
常用命令:
journalctl:查看所有日志;journalctl -b:查看本次启动后的日志;journalctl -u service_name:查看指定服务(如ssh)的日志;journalctl --vacuum-time=7d:清理7天前的旧日志;journalctl --vacuum-size=500M:限制日志总大小为500MB,超出则清理旧日志。rsyslog支持异步日志记录,可在不阻塞应用程序的情况下处理日志,提升系统性能。
修改路径:编辑/etc/rsyslog.conf文件,找到$ModLoad imuxsock行(系统日志输入模块),在其下方添加:
$ActionQueueType LinkedList # 使用链表队列
$ActionQueueFileName srvrfwd # 队列文件名
$ActionResumeRetryCount -1 # 无限重试
$ActionQueueSaveOnShutdown on # 关机时保存队列
这些配置启用异步队列,将日志先写入内存队列,再批量写入磁盘,减少I/O等待时间。修改后保存文件,重启rsyslog服务。
旧版本的rsyslog可能存在性能bug或功能缺失,升级到最新稳定版可提升日志处理效率和稳定性。
升级步骤:
sudo apt update;sudo apt upgrade rsyslog;sudo apt install wget gnupg lsb-release
wget -qO - https://download.rsyslog.com/rsyslog_gpg.key | sudo apt-key add -
echo "deb https://download.rsyslog.com/debian $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/rsyslog.list
sudo apt update
sudo apt install rsyslog
升级后重启rsyslog服务。