跳转至

19- 日志分析与监控(journald、rsyslog、logrotate) 📜

前提条件 ✅

  • 已完成 LVM、NFS/Samba 共享、备份配置(/data 可用于存放日志归档)
  • 以 ops 用户登录(具有 sudo 权限)
  • 系统运行在 Debian 12 Bookworm
  • 虚拟机环境:VMware Workstation Pro(建议有足够磁盘空间观察日志增长)

详细步骤 🛠️

  1. journald – systemd 默认日志系统
    Debian 12 默认使用 journald 收集所有系统和服务日志。

常用查看命令:

journalctl -b                        # 本次启动所有日志
journalctl -u ssh -n 200             # ssh 服务最近 200 行
journalctl -u ssh -f                 # 实时跟踪(类似 tail -f)
journalctl -p err -b                 # 本次启动的错误及以上级别
journalctl --since "2026-01-01"      # 指定时间范围
journalctl --disk-usage              # 查看占用空间

配置 journald 永久存储(默认 volatile,重启丢失):

sudo mkdir -p /var/log/journal
sudo systemd-tmpfiles --create --prefix /var/log/journal

编辑持久化配置:

sudo nano /etc/systemd/journald.conf

推荐生产设置:

[Journal]
Storage=persistent
Compress=yes
SystemMaxUse=10G          # 最大占用 10GB
SystemKeepFree=20%        # 保留 20% 磁盘空间
RuntimeMaxUse=2G
MaxRetentionSec=1month    # 保留 1 个月

应用:

sudo systemctl restart systemd-journald

  1. rsyslog – 传统文本日志系统(兼容旧工具)
    Debian 默认同时运行 rsyslog,将 journal 日志转发到 /var/log 文件。

查看主要日志文件:

ls -lh /var/log/
tail -f /var/log/syslog
tail -f /var/log/auth.log          # 认证相关(SSH 登录等)
tail -f /var/log/kern.log

配置 rsyslog 转发(示例:将 auth 日志单独写文件):

sudo nano /etc/rsyslog.d/10-custom.conf

添加:

if $programname == 'sshd' then /var/log/sshd.log
& stop

重启:

sudo systemctl restart rsyslog

  1. logrotate – 日志轮转与压缩
    Debian 默认已安装 logrotate,每日自动轮转 /var/log/*。

查看当前配置:

sudo cat /etc/logrotate.d/*
sudo logrotate -d /etc/logrotate.conf   # 调试模式(不实际执行)

自定义轮转规则(示例:自定义服务日志):

sudo nano /etc/logrotate.d/myapp

内容:

/var/log/myapp/*.log {
    daily
    rotate 14
    compress
    delaycompress
    missingok
    notifempty
    create 0640 ops ops
    postrotate
        systemctl reload myapp || true
    endscript
}

手动触发轮转测试:

sudo logrotate -f /etc/logrotate.conf

  1. 日志监控与告警基础(简单实现)
    实时监控关键日志:
    tail -f /var/log/auth.log | grep --line-buffered "Failed password"
    

结合 fail2ban(已安装)自动处理 SSH 暴力破解。

高级:安装 logwatch 或 goaccess(后续章节可扩展):

sudo apt install -y logwatch
sudo logwatch --detail High --mailto your@email.com --service all

实践任务 🎯

  1. 配置 journald 为 persistent 模式,确认 /var/log/journal 目录出现并有日志写入
  2. 用 journalctl -u ssh -f 实时监控 SSH 日志,同时从另一台机器尝试登录观察输出
  3. 查看 /var/log/auth.log 和 /var/log/syslog,找出最近一次 SSH 登录记录
  4. 创建自定义 logrotate 规则针对一个测试日志文件(例如 /var/log/test.log),手动触发轮转并验证压缩文件生成

自测问题 ❓

  1. journald 的 Storage=persistent 和 volatile 的区别是什么?
  2. 为什么生产环境建议限制 journald 的 SystemMaxUse?
  3. logrotate 中的 delaycompress 选项有什么实际作用?
  4. 如何用 journalctl 只显示今天以来所有错误级别的日志?

总结 📌

日志是系统“黑匣子”,journald + rsyslog + logrotate 构成 Debian 完整日志体系。
生产中优先用 journalctl 排查实时问题,rsyslog 保证文本兼容,logrotate 防止磁盘爆满。
后续 Web、数据库、容器章节中,日志路径配置、异常监控都将依赖这些工具,形成“日志 → 告警 → 响应”的闭环。