Skip to content

19. 日志分析与监控

本章节指导在 RHEL 8.10(主机名 ZSLinux)上使用 SecureCRT 进行日志分析和监控配置,配合 SecureFX 传输日志文件。内容涵盖日志分析与告警(rsyslog, logwatch)、监控工具(Zabbix, Prometheus/Grafana)和 SIEM 集成,以 sshd 日志(端口 2222,参考第 6 章)为例,全面实用,适合初学者快速掌握和运维人员日常维护。所有操作在 ZSLinux 环境中测试,确保实验一致性。

19.1 前提条件

  • RHEL 8.10 已安装(参考第 1 章),主机名设置为 ZSLinux.
  • 使用 SecureCRT 登录(SSH2 协议,端口 2222,参考第 6 章).
  • 使用 SecureFX 传输文件(SFTP 协议).
  • 具有 root 或 sudo 权限.
  • 系统已订阅并启用 RHEL 和 EPEL 仓库(参考第 4 和 7 章).
  • sshd 服务已配置(参考第 6 章).
  • 防火墙和 SELinux 启用(参考第 13 章).

19.2 日志分析与告警

19.2.1 配置 rsyslog

  • 安装并启用 rsyslog
    bash
    dnf install -y rsyslog  # 安装 rsyslog 日志服务
    systemctl enable --now rsyslog  # 启用并启动 rsyslog 服务
  • 配置集中日志(发送到远程服务器 192.168.1.200:514):
    bash
    vim /etc/rsyslog.conf  # 编辑 rsyslog 配置文件
    # 添加:
    *.* @192.168.1.200:514  # 发送所有日志到远程服务器
    systemctl restart rsyslog  # 重启 rsyslog 服务

19.2.2 配置 logwatch

  • 安装并运行 logwatch
    bash
    dnf install -y logwatch  # 安装 logwatch 日志分析工具
    logwatch --detail High --mailto admin@example.com --service sshd  # 生成并发送 sshd 日志报告

19.2.3 配置邮件告警

  • 安装和配置 postfix
    bash
    dnf install -y postfix  # 安装 postfix 邮件服务
    systemctl enable --now postfix  # 启用并启动 postfix 服务
  • 配置告警规则(示例:SSH 登录失败):
    bash
    vim /etc/rsyslog.d/sshd_alert.conf  # 创建告警规则
    # 添加:
    :msg, contains, "Failed password" /var/log/sshd_alert.log
    & stop
    systemctl restart rsyslog  # 重启 rsyslog 服务

19.3 监控工具配置

19.3.1 配置 Zabbix

  • 安装 Zabbix server:
    bash
    dnf install -y zabbix-server-mysql zabbix-web-mysql zabbix-agent  # 安装 Zabbix 服务器和代理
    dnf install -y mariadb-server  # 安装 MariaDB 数据库
    systemctl enable --now mariadb  # 启用并启动 MariaDB
  • 配置 Zabbix 数据库:
    bash
    mysql -u root -e "CREATE DATABASE zabbix CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;"  # 创建 Zabbix 数据库
    zcat /usr/share/doc/zabbix-server-mysql*/schema.sql.gz | mysql -u root zabbix  # 初始化数据库
  • 启动 Zabbix:
    bash
    systemctl enable --now zabbix-server zabbix-agent httpd  # 启用并启动 Zabbix 服务

19.3.2 配置 Prometheus 和 Grafana

  • 安装 Prometheus:
    bash
    dnf install -y prometheus2  # 安装 Prometheus 监控工具
    systemctl enable --now prometheus  # 启用并启动 Prometheus 服务
  • 安装 Grafana:
    bash
    dnf install -y grafana  # 安装 Grafana 可视化工具
    systemctl enable --now grafana-server  # 启用并启动 Grafana 服务
  • 配置防火墙:
    bash
    firewall-cmd --permanent --add-port=9090/tcp  # 允许 Prometheus 端口
    firewall-cmd --permanent --add-port=3000/tcp  # 允许 Grafana 端口
    firewall-cmd --reload  # 应用防火墙规则

19.3.3 SIEM 集成

  • 配置 rsyslog 发送到 SIEM(示例:外部 SIEM 192.168.1.200):
    bash
    vim /etc/rsyslog.conf  # 编辑 rsyslog 配置文件
    # 添加:
    *.* @@192.168.1.200:514  # 使用 TCP 发送日志到 SIEM
    systemctl restart rsyslog  # 重启 rsyslog 服务

19.4 验证

  • 验证日志分析:
    bash
    journalctl -u sshd --since "1 hour ago"  # 检查最近 1 小时 sshd 日志
    tail -n 10 /var/log/sshd_alert.log  # 检查 SSH 失败告警日志
  • 验证 rsyslog
    bash
    systemctl status rsyslog  # 检查 rsyslog 服务状态
    logger "Test log message"  # 发送测试日志
    tail -n 1 /var/log/messages  # 验证日志记录
  • 验证 Zabbix:
    bash
    zabbix_get -s 127.0.0.1 -k system.cpu.load[all,avg1]  # 检查 CPU 负载
    systemctl status zabbix-server  # 检查 Zabbix 服务状态
  • 验证 Prometheus/Grafana:
    bash
    curl http://localhost:9090  # 检查 Prometheus 访问
    curl http://localhost:3000  # 检查 Grafana 访问
  • 测试 SSH 连接:
    bash
    ssh -p 2222 testuser@ZSLinux  # 测试 SSH 连接(参考第 6 章)
  • 常见问题:
    • 日志未收集:检查 rsyslog 配置(/etc/rsyslog.conf)或服务状态(systemctl status rsyslog)。
    • 告警未触发:验证 postfix 状态(systemctl status postfix)或日志规则(/etc/rsyslog.d/)。
    • Zabbix 无法访问:确认数据库初始化(mysql -u root -D zabbix)或防火墙(firewall-cmd --list-ports)。

19.5 实践任务

  1. 使用 SecureCRT 登录 ZSLinux,配置 rsyslog 发送日志到远程服务器(192.168.1.200:514)。
  2. 配置 logwatch 发送 sshd 日志报告并验证邮件。
  3. 安装 Zabbix 并检查 CPU 负载监控。
  4. 部署 Prometheus 和 Grafana,验证端口访问。

19.6 自测问题

  • 问题:如何查看最近 1 小时的 sshd 日志?
    • 答案journalctl -u sshd --since "1 hour ago"
  • 问题:如何配置 rsyslog 发送日志到远程服务器?
    • 答案:编辑 /etc/rsyslog.conf,添加 *.* @192.168.1.200:514,然后 systemctl restart rsyslog
  • 问题:如何检查 Zabbix 监控数据?
    • 答案zabbix_get -s 127.0.0.1 -k system.cpu.load[all,avg1]

Released under the MIT License.