RSYSLOG 系统日志管理
RSYSLOG 系统日志管理
一、日志基础概念
1.1 什么是日志?
- 日志是系统、应用程序或服务在运行过程中记录的事件、操作、错误等信息。
- 类似于系统的“日记本”,用于事后分析与追踪。
1.2 日志基本特点
- 时间戳:每条日志记录发生时间。
- 事件描述:具体发生了什么(如错误详情、用户操作)。
- 日志级别:标识事件严重性(debug → emerg)。
1.3 日志用途
- 系统维护(故障排查)
- 安全审计(追踪可疑行为)
- 性能分析(资源瓶颈定位)
- 操作追踪(关键变更记录)
1.4 常见日志类型
| 类型 | 说明 |
|---|---|
| 系统日志 | 记录操作系统基础状态(登录、内核消息等) |
| 应用日志 | 特定程序运行记录(如 Web 访问日志) |
| 安全日志 | 登录失败、权限变更等安全事件 |
| 自定义日志 | 开发者按需设计的日志格式 |
1.5 常用日志工具
- 本地工具:
journalctl,rsyslog - 集中化平台:ELK(Elasticsearch + Logstash + Kibana)
- 采集工具:Filebeat
- 命令行写入:
logger
logger 命令示例
logger "This is a test log message"
logger -p crit "Critical error in system"
二、RSYSLOG 系统日志服务
2.1 rsyslogd vs syslogd
- CentOS Stream 9 中已由 rsyslogd 取代传统 syslogd。
- 新特性:
- 支持 TCP(可靠传输)和 TLS 加密
- 内置日志分析/过滤框架
- 可直接写入数据库(MySQL/PostgreSQL)
- 支持条件判断逻辑
- 兼容旧版
/etc/rsyslog.conf配置
2.2 常见日志文件路径
| 文件路径 | 说明 |
|---|---|
/var/log/messages |
系统核心日志(默认查看首选) |
/var/log/secure |
认证/授权日志(SSH、sudo、用户密码操作) |
/var/log/cron |
定时任务日志 |
/var/log/maillog |
邮件系统日志 |
/var/log/dmesg |
内核启动自检信息(也可用 dmesg 命令) |
/var/log/btmp |
错误登录记录(二进制,用 lastb 查看) |
/var/log/wtmp |
用户登录/注销历史(last 命令) |
/var/run/utmp |
当前在线用户(w, who, users) |
/var/log/lastlog |
各用户最后一次登录时间(lastlog) |
RPM/DNF 安装的服务日志通常也存于
/var/log/下(如 httpd、samba)。
2.3 日志格式(rsyslog 管理的日志)
标准四字段:
[时间] [主机名] [服务/程序名] [事件详情]
2.4 rsyslog 配置文件:/etc/rsyslog.conf
结构组成
-
全局指令(Global Directives)
global(workDirectory="/var/lib/rsyslog") module(load="builtin:omfile" Template="RSYSLOG_TraditionalFileFormat") -
模块加载(Modules)
imuxsock:本地 Unix socket(默认关闭)imjournal:从 systemd journal 读取日志imudp/imtcp:远程日志接收(默认注释,需手动启用)
-
日志规则(Rules)
*.info;mail.none;authpriv.none;cron.none /var/log/messages authpriv.* /var/log/secure mail.* -/var/log/maillog # 异步写入 cron.* /var/log/cron *.emerg :omusrmsg:* local7.* /var/log/boot.log -
日志转发(Forwarding)
action( type="omfwd" Target="192.168.88.102" Port="514" Protocol="tcp" queue.filename="fwdRule1" queue.maxdiskspace="1g" queue.saveonshutdown="on" queue.type="LinkedList" action.resumeRetryCount="-1" )
规则语法详解
- 服务名称(Facility):
authpriv,cron,kern,mail,local0-7等 - 连接符:
.:≥ 指定级别(如*.info).=:仅等于该级别(极少用).!:排除该级别
- 日志级别(Priority)(由低到高):
debug < info < notice < warning < err < crit < alert < emerg - 输出目标:
- 文件路径(如
/var/log/secure) - 远程主机:
@IP:port(UDP),@@IP:port(TCP) - 忽略日志:
~
- 文件路径(如
示例:记录所有服务的 crit 及以上日志
*.crit /var/log/alert.log
三、日志转发实战案例
案例一:仅转发 messages 和 secure 到 node3
-
node1(客户端):
- 修改
/etc/rsyslog.conf,将原写入本地的规则改为 TCP 转发:*.info;mail.none;authpriv.none;cron.none @@192.168.88.103:514 authpriv.* @@192.168.88.103:514 - 重启服务:
systemctl restart rsyslog
- 修改
-
node3(日志服务器):
- 启用 TCP 接收模块(取消注释):
module(load="imtcp") input(type="imtcp" port="514") - 开放防火墙端口:
firewall-cmd --add-port=514/tcp --permanent firewall-cmd --reload - 重启 rsyslog
- 启用 TCP 接收模块(取消注释):
-
测试:
logger "test from node1"- 在 node3 查看
/var/log/messages是否收到
案例二:全部日志转发 + 本地保留
- 在 node1 的
/etc/rsyslog.conf末尾添加全局转发规则(不影响本地规则):*.* @@192.168.88.103:514 - 其余步骤同案例一
- 效果:node1 本地仍保留日志,同时转发至 node3
💡 实际价值:集中化日志管理,便于统一监控、告警、审计。
四、日志轮替(Log Rotation)
4.1 为什么需要轮替?
- 防止日志无限增长耗尽磁盘
- 保持日志文件可管理性
- 提升系统性能(避免超大文件)
4.2 工具:logrotate
- 默认已安装(
dnf install logrotate) - 主配置:
/etc/logrotate.conf - 子配置目录:
/etc/logrotate.d/
主配置示例
weekly
rotate 4
create
dateext
# compress
include /etc/logrotate.d
4.3 关键参数说明
| 参数 | 说明 |
|---|---|
daily/weekly/monthly |
轮替周期 |
rotate N |
保留 N 个旧日志 |
compress |
压缩旧日志(gzip) |
create mode user group |
创建新日志并设权限 |
missingok |
日志不存在时不报错 |
notifempty |
空文件不轮替 |
copytruncate |
复制后清空原文件(适合不能重启的服务) |
size/minsize |
按大小触发轮替 |
dateext |
用日期作后缀(如 secure-20251226) |
prerotate/endscript |
轮替前执行脚本 |
postrotate/endscript |
轮替后执行脚本 |
⚠️ 注意:若日志由 rsyslog 管理,轮替后需发送
HUP信号通知其重新打开日志文件,否则仍写入旧文件。
4.4 实战案例
案例1:轮替自定义日志 /var/log/alert.log
- 要求:周轮替、保留6份、处理
chattr +a属性、重启 rsyslog - 配置文件
/etc/logrotate.d/alert:/var/log/alert.log { weekly rotate 6 missingok sharedscripts prerotate chattr -a /var/log/alert.log endscript postrotate /bin/kill -HUP $(cat /var/run/rsyslogd.pid 2>/dev/null) &>/dev/null endscript } - 测试:
logrotate -vf /etc/logrotate.conf
案例2:轮替 Tomcat 日志(不停服务)
- 日志路径:
/opt/apache-tomcat-9.0.97/logs/catalina.out - 配置
/etc/logrotate.d/tomcat:/opt/apache-tomcat-9.0.97/logs/catalina.out { daily rotate 7 compress copytruncate missingok notifempty } - 使用
copytruncate避免重启 Tomcat
五、附加工具与命令
chattr / lsattr(文件属性保护)
chattr +a file:仅允许追加(日志防删改)chattr -a file:移除追加属性lsattr file:查看文件属性
HUP 信号(SIGHUP = 1)
- 作用:通知进程重载配置或切换日志文件
- 示例:
kill -HUP $(cat /var/run/rsyslogd.pid)
六、小结
- rsyslog 是现代 Linux 系统日志核心,支持灵活规则、远程转发、安全传输。
- 日志分类清晰,关键问题优先查
/var/log/messages和/var/log/secure。 - 集中化日志架构 可通过 rsyslog 转发实现,无需额外采集器。
- logrotate 是日志生命周期管理的关键工具,配合
postrotate可无缝集成服务。
掌握这些知识,可高效进行系统运维、安全审计与故障排查。

浙公网安备 33010602011771号