温馨提示×

怎样配置CentOS日志记录

小樊
53
2026-01-10 13:54:17
栏目: 智能运维

CentOS 日志记录配置实操指南

一 核心组件与关键路径

  • 系统日志由两大组件协同工作:
    • systemd-journald:采集内核与服务的结构化日志,默认运行时目录为**/run/log/journal**,持久化目录为**/var/log/journal**(需手动创建并启用持久化)。
    • rsyslog:按“设施/优先级”规则写入本地文件或转发到远程,主配置为**/etc/rsyslog.conf**,自定义规则建议放入**/etc/rsyslog.d/*.conf**。
  • 常用日志文件位置:/var/log/messages(系统综合日志)、/var/log/secure(认证与安全)、/var/log/cron(计划任务)、/var/log/maillog(邮件)、/var/log/boot.log(启动)、/var/log/dmesg(内核环缓冲,可用 dmesg 查看)、/var/log/audit/audit.log(审计日志)。

二 配置 rsyslog 本地分类与远程转发

  • 基本规则语法:选择器(Facility.Priority)+ 动作(文件/远程/丢弃等)。常用优先级从低到高:debug、info、notice、warning、err、crit、alert、emerg;连接符:.(包含该级及以上).=(仅该级)、.!(排除该级)、none(不记录)。
  • 示例 1(按程序名分流并避免重复处理):将所有 httpd 的“错误及以下”日志单独写入本地文件,并停止后续通用规则匹配。
    # /etc/rsyslog.d/httpd.conf
    if $programname == 'httpd' and $syslogseverity <= 'err' then /var/log/httpd/httpd_errors.log
    & stop
    
  • 示例 2(使用自定义设施 local0 记录应用日志):
    # /etc/rsyslog.d/app.conf
    local0.*    /var/log/myapp.log
    
    应用侧可用 logger 写入:
    logger -p local0.info "order created, id=10086"
    
  • 示例 3(远程转发):
    • UDP(不保证可靠):*.* @remote-log-server:514
    • TCP(更可靠):*.* @@remote-log-server:514
      如需按客户端 IP 分目录归档,可在服务端使用模板:
    $template IpTemplate,"/var/log/%FROMHOST-IP%.log"
    *.* ?IpTemplate
    & ~
    
  • 规则顺序很重要:更具体的规则应放在前面,必要时使用 & stop 阻止继续匹配。修改后执行:
    sudo systemctl restart rsyslog
    
  • 大消息与协议选择:UDP 单条消息默认约2KB、TCP 约32KB上限,可在加载 imtcp 前设置:
    $MaxMessageSize 32k
    
    客户端与服务端需一致设置。

三 配置 systemd-journald 与持久化

  • 启用持久化(重启不丢日志):
    sudo mkdir -p /var/log/journal
    sudo systemctl restart systemd-journald
    
  • 常用调优(编辑 /etc/systemd/journald.conf):
    • Storage=persistent|volatile|auto(持久化/仅内存/自动)
    • SystemMaxUse=、SystemKeepFree=(控制占用磁盘上限与保留空闲)
    • ForwardToSyslog=yes|no(是否将日志转发给 rsyslog)
  • 查询与过滤(journalctl):
    journalctl -n 50
    journalctl --since "2026-01-10 00:00:00" --until "2026-01-10 12:00:00"
    journalctl -p err
    journalctl -u nginx.service
    journalctl _PID=1234
    
    提示:journald 日志默认按配置保留与轮转,必要时结合 rsyslog 做长期落盘与索引。

四 配置 logrotate 日志轮转

  • 配置文件结构:全局 /etc/logrotate.conf,服务专用配置放入 /etc/logrotate.d/。默认由 cron 每日触发。
  • 示例 1(Nginx 按日轮转并通知重新打开日志):
    # /etc/logrotate.d/nginx
    /var/log/nginx/*.log {
        daily
        missingok
        rotate 7
        compress
        delaycompress
        notifempty
        create 0640 nginx adm
        sharedscripts
        postrotate
            if [ -f /run/nginx.pid ]; then
                kill -USR1 `cat /run/nginx.pid 2>/dev/null` || true
            fi
        endscript
    }
    
  • 示例 2(按大小触发轮转,保留 5 份):
    # /etc/logrotate.d/myapp
    /var/log/myapp/*.log {
        size 100M
        rotate 5
        missingok
        notifempty
        compress
        create 0644 myapp myapp
    }
    
  • 常用参数说明:
    • daily/weekly/monthly(周期)、rotate N(保留份数)、size(大小触发)
    • compress/delaycompress(压缩与延迟压缩)、missingok/notifempty(容错与空文件不轮转)
    • create(轮转后新建文件的权限/属主/属组)、sharedscripts(脚本仅执行一次)
    • prerotate/postrotate/endscript(轮转前后执行自定义命令)
  • 调试与强制执行:
    sudo logrotate -d /etc/logrotate.d/nginx   # 预演
    sudo logrotate -vf /etc/logrotate.d/nginx  # 强制立即执行
    
    如需自定义执行频率,可在 /etc/cron.d/ 下放置自定义脚本定时调用 logrotate。

五 安全与运维要点

  • 安全与合规:
    • 防止敏感信息泄露:对日志进行脱敏
    • 防篡改与访问控制:启用只读/不可变存储策略、RBAC 权限控制;
    • 传输与存储:优先加密传输(TLS)与加密存储
    • 保留与审计:依据合规要求设置保留周期审计追踪
  • 远程接收与防火墙:
    • 服务端启用 UDP/TCP 监听(如加载 imudp/imtcp 并开放 514 端口);
    • 客户端/服务端按需设置 $MaxMessageSize
    • 使用 logger 进行连通性与规则验证:logger -p local0.info "test from $(hostname)"
  • 故障排查清单:
    • 检查服务状态:systemctl status rsyslogsystemctl status systemd-journald
    • 实时查看:tail -f /var/log/messagesjournalctl -f
    • 规则优先级与停止符:确保具体规则在前,必要时使用 & stop
    • 轮转验证:logrotate -d/-vf 预演与强制执行。

0