日志服务不能失明
系统日志与认证日志都要经过 rsyslog:主配置 /etc/rsyslog.conf 加上 /etc/rsyslog.d 下的片段共同决定“什么日志写到哪、是否转发”。改配置前必须用 rsyslogd -N1 做语法校验,因为日志服务一旦启动失败,等于全系统失明——故障、入侵行为都留不下记录,而且往往不会立刻有人发现。
基本信息
| 适用平台 | Linux(RHEL/CentOS/Debian/Ubuntu) |
|---|---|
| 主配置 | /etc/rsyslog.conf |
| 片段目录 | /etc/rsyslog.d/*.conf |
| 校验命令 | rsyslogd -N1(只检查不启动) |
| 关键动作 | 变更先校验,再 reload,少用 restart |
典型使用场景
- 基线核查:确认日志落盘位置与留存策略符合要求
- 变更前置校验:调整规则前验证语法,避免日志服务起不来
- 排障:某类日志不再写入文件时定位是规则还是权限问题
- 日志分流:把不同级别的日志写到独立文件便于检索
- 转发配置的前置准备:在集中采集方案里属于第一步
核查与校验
核查与校验
rsyslogd -N1 # 配置语法校验,不启动服务
grep -v '^#' /etc/rsyslog.conf | grep -v '^$' | head -30
ls /etc/rsyslog.d/
cat /etc/rsyslog.d/*.conf 2>/dev/null | head -40
systemctl status rsyslog --no-pager | head # 确认服务在运行且最近无重启失败
logger -p local0.info 'rsyslog-config-test' # 写入一条测试日志
sudo tail -5 /var/log/messages 2>/dev/null || sudo tail -5 /var/log/syslog核查项读法
| 检查项 | 含义 | 异常表现 |
|---|---|---|
| rsyslogd -N1 退出码 | 配置语法是否合法 | 非 0 表示配置有误,reload 会失败 |
| includes 引用 | 片段是否被正确加载 | 片段存在但未生效,说明未被引用 |
| 规则行 | 设施.级别 目标 | 规则写反会导致日志写错位置 |
| 文件权限 | 目标文件所属与权限 | 权限不足时静默丢弃日志 |
| 服务状态 | 服务是否在运行 | 反复重启说明配置或磁盘有问题 |
日志服务挂掉等于全系统失明:任何改动先用 rsyslogd -N1 校验再重载,这是成本最低的一道保险。
落地要点
- 优先 reload 而不是 restart:restart 可能丢掉瞬时日志
- -N1 校验不覆盖 include 文件的读取权限,仍需真实写一条日志验证
- 配置片段文件名影响加载顺序,编号规范能减少覆盖冲突
- 日志目录空间不足会导致写入失败,纳入容量监控
- 把日志目标文件与集中采集方案一起设计,避免本地与远端两套口径不一致
只校验不做一次真实写入验证,容易漏掉权限类问题:日志服务正常但文件写不进去,属于沉默失效。