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

结构组成

  1. 全局指令(Global Directives)

    global(workDirectory="/var/lib/rsyslog")
    module(load="builtin:omfile" Template="RSYSLOG_TraditionalFileFormat")
    
  2. 模块加载(Modules)

    • imuxsock:本地 Unix socket(默认关闭)
    • imjournal:从 systemd journal 读取日志
    • imudp / imtcp:远程日志接收(默认注释,需手动启用)
  3. 日志规则(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
    
  4. 日志转发(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

  1. 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
  2. node3(日志服务器)

    • 启用 TCP 接收模块(取消注释):
      module(load="imtcp")
      input(type="imtcp" port="514")
      
    • 开放防火墙端口:
      firewall-cmd --add-port=514/tcp --permanent
      firewall-cmd --reload
      
    • 重启 rsyslog
  3. 测试

    • 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 可无缝集成服务。

掌握这些知识,可高效进行系统运维、安全审计与故障排查。

posted @ 2025-12-26 14:33  ShiLiCoder  阅读(0)  评论(0)    收藏  举报