文章

rsyslogd与logrotate日志管理

rsyslogd与logrotate日志管理

Rsyslogd 与 Logrotate 笔记整理


一、Rsyslogd(系统日志服务)

作用:Linux 系统默认的日志管理服务,负责收集、过滤、转发系统及应用产生的日志。


1. 核心概念
  • 配置文件/etc/rsyslog.conf/etc/rsyslog.d/*.conf
  • 日志分类
    • Facility(日志类型):如 auth(认证)、kern(内核)、mail(邮件)等。
    • Priority(优先级):debug(最低)到 emerg(最高)。
  • 日志存储路径:默认在 /var/log/ 目录下(如 /var/log/messages)。

2. 常用配置语法
1
2
3
4
5
# 格式:[Facility].[Priority] [目标]
*.*                     /var/log/all.log       # 记录所有日志到文件
auth.*                  -/var/log/auth.log     # 记录认证日志(异步写入)
*.info;mail.none        /var/log/messages      # 记录info及以上级别日志,排除mail
user.=error             /dev/console           # 用户程序的error级别日志输出到控制台

3. 高级功能
  • 远程日志转发
    1
    2
    
    # 发送日志到远程服务器(@表示UDP,@@表示TCP)
    *.* @192.168.1.100:514
    
  • 模板定制日志格式
    1
    2
    
    $template MyFormat,"%timestamp% %hostname% %msg%\n"
    *.* /var/log/custom.log;MyFormat
    
  • 过滤条件
    1
    
    if $msg contains "error" then /var/log/errors.log
    

4. 常用命令
1
2
systemctl restart rsyslog   # 重启服务
logger "Test Message"       # 手动生成测试日志

二、Logrotate(日志轮转工具)

作用:自动切割、压缩、删除旧日志文件,避免日志占满磁盘。


1. 核心概念
  • 主配置/etc/logrotate.conf(全局配置)
  • 子配置/etc/logrotate.d/*(按服务独立配置,如 Nginx、Apache)
  • 触发方式:通过 cron 每日自动执行(/etc/cron.daily/logrotate)。

2. 常用配置参数
1
2
3
4
5
6
7
8
9
10
11
12
/var/log/app.log {
    daily                   # 按天轮转
    missingok               # 日志不存在时忽略错误
    rotate 30               # 保留30个历史文件
    compress                # 压缩旧日志(默认gzip)
    delaycompress           # 延迟压缩(下一次轮转时压缩)
    size 100M               # 按大小轮转(与daily/weekly等互斥)
    create 0644 root root   # 新日志文件权限与所有者
    postrotate              # 轮转后执行的命令(如通知服务重新打开日志)
        systemctl restart app
    endscript
}

3. 配置示例
  • Nginx 日志轮转/etc/logrotate.d/nginx):
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    /var/log/nginx/*.log {
        daily
        missingok
        rotate 14
        compress
        delaycompress
        notifempty
        sharedscripts
        postrotate
            nginx -s reopen > /dev/null 2>&1
        endscript
    }
    

4. 手动执行与调试
1
2
logrotate -vf /etc/logrotate.d/nginx   # 强制执行并显示详细日志
logrotate -d /etc/logrotate.conf       # 调试模式(模拟运行)

5. 常见问题排查
  • 日志未轮转
    • 检查 cron 是否正常运行。
    • 查看 Logrotate 状态文件:/var/lib/logrotate/status
  • 权限问题:确保配置中 create 参数的用户/组与日志文件一致。
本文由作者按照 CC BY 4.0 进行授权