温馨提示×

centos filesystem日志管理技巧

小樊
47
2025-10-06 21:42:32
栏目: 智能运维

CentOS Filesystem 日志管理技巧

1. 定位系统日志文件

CentOS 的日志文件集中存储在 /var/log/ 目录下,核心日志包括:

  • /var/log/messages:系统通用日志(记录启动信息、系统事件、网络连接等);
  • /var/log/secure:安全与认证日志(记录登录尝试、SSH连接、sudo命令执行等);
  • /var/log/boot.log:系统启动日志(记录硬件检测、驱动加载等);
  • /var/log/cron:计划任务日志(记录cron定时任务的执行情况);
  • /var/log/dmesg:内核环缓冲区日志(记录内核启动、硬件事件等);
  • /var/log/audit/audit.log:审计日志(记录系统调用、文件访问、网络连接等)。
    应用服务日志(如Apache的/var/log/httpd/access_log、Nginx的/var/log/nginx/error_log)通常位于对应服务的子目录中。

2. 使用 journalctl 管理 systemd 日志

journalctl 是 CentOS 7+ 系统默认的日志管理工具,用于查看和管理 systemd 生成的日志:

  • 查看所有日志journalctl
  • 查看特定服务日志(如ssh):journalctl -u sshd
  • 查看指定时间范围的日志(如2025-01-01之后):journalctl --since "2025-01-01"
  • 实时查看日志journalctl -f
  • 搜索关键字(如“error”):journalctl | grep 'error'
  • 清理旧日志
    • 保留最近1周日志:journalctl --vacuum-time=1w
    • 保留最近500MB日志:journalctl --vacuum-size=500M
    • 清空所有日志:echo "" > /var/log/journal/system.journal(需谨慎操作)。

3. 配置 logrotate 实现日志轮转

logrotate 是 CentOS 默认的日志轮转工具,用于自动压缩、删除旧日志,防止日志文件过大:

  • 全局配置:编辑 /etc/logrotate.conf,常用参数包括:
    • daily:每天轮转一次;
    • rotate 7:保留7份旧日志;
    • compress:压缩旧日志(如.gz格式);
    • missingok:日志文件丢失时不报错;
    • notifempty:日志为空时不轮转;
    • create 640 root adm:创建新日志文件时设置权限(640)和所有者(root/adm)。
  • 服务特定配置:在 /etc/logrotate.d/ 目录下创建配置文件(如myapp),示例:
    /var/log/myapp/*.log {
        daily
        rotate 7
        compress
        delaycompress
        missingok
        notifempty
        create 640 root adm
    }
    
    delaycompress 表示延迟压缩(直到下一次轮转),避免压缩最新的日志。
  • 手动测试配置sudo logrotate -f /etc/logrotate.conf(强制轮转,即使未达到条件);
  • 查看轮转日志tail -f /var/log/messages(系统日志会记录logrotate的操作)。

4. 手动清理特定日志文件

对于非 journalctl 管理的日志文件(如/var/log/messages/var/log/secure),可通过以下命令清理:

  • 清空单个文件(如/var/log/messages):cat /dev/null > /var/log/messages
  • 批量清理/var/log目录下超过30天的.log文件
    find /var/log -type f -name "*.log" -mtime +30 -exec rm -f {} \;
    
  • 清理认证日志(如/var/log/btmp记录失败登录尝试):echo > /var/log/btmp
  • 清理最近登录信息(如/var/log/lastlog):echo > /var/log/lastlog

5. 调整日志级别减少生成量

通过降低日志级别,减少不必要的日志生成:

  • 修改 rsyslog 配置:编辑 /etc/rsyslog.conf,调整服务日志级别(如将*.info改为*.warning,仅记录警告及以上级别的日志);
  • 调整 systemd-journald 配置:编辑 /etc/systemd/journald.conf,设置:
    • SystemMaxUse=100M:限制日志文件最大使用100MB;
    • MaxRetentionSec=1week:保留日志1周;
    • Compress=yes:压缩旧日志。
      修改后需重启服务:systemctl restart systemd-journald

6. 设置定时任务自动清理

通过 cron 定时运行清理脚本,实现自动化管理:

  • 创建清理脚本(如/usr/local/bin/log_cleanup.sh):
    #!/bin/bash
    # 清空30天前的.log文件
    find /var/log -type f -name "*.log" -mtime +30 -exec rm -f {} \;
    # 清空journal日志(保留1周)
    journalctl --vacuum-time=1w
    
  • 添加执行权限chmod +x /usr/local/bin/log_cleanup.sh
  • 添加定时任务(每天凌晨3点运行):
    crontab -e
    
    添加以下内容:
    0 3 * * * /usr/local/bin/log_cleanup.sh
    

注意事项

  • 备份重要日志:清理前建议备份关键日志(如/var/log/secure、应用日志),防止数据丢失;
  • 避免删除正在使用的日志:不要直接删除正在被服务写入的日志文件(如/var/log/messages),可通过覆盖或清空方式释放空间;
  • 验证配置有效性:修改logrotate或journald配置后,重启对应服务(systemctl restart logrotatesystemctl restart systemd-journald)确保配置生效。

0