跳转至

日志管理与集中化规范 📜

版本:1.0
适用范围:所有生产服务器(RHEL 9.x+ 及兼容发行版,例如 openEuler、Anolis OS、Rocky Linux、AlmaLinux 等)

1. 核心原则

  • 统一存放:应用日志优先存放于 /opt/logs/,避免污染 /var/log
  • 自动轮转:所有日志必须配置 logrotate,防止磁盘爆满
  • 集中化:生产环境必须将日志实时或定时转发至集中日志系统
  • 保留策略:本地日志保留 30–90 天,集中日志保留 90–365 天(视合规要求)
  • 安全审计:关键日志(如 audit.log、secure、sshd)强制保留并不可删除

2. 日志路径与命名规范(扩展 naming.md)

  • 系统日志:保持 /var/log/ 原生路径
  • 应用日志统一路径:
  • Nginx:/opt/logs/nginx/access.logerror.log
  • MySQL:/opt/logs/mysql/mysql.log
  • 自定义应用:/opt/logs/appname/service-name.log
  • 已轮转日志命名:access.log-20260215.gz(日期格式 YYYYMMDD)

3. 本地日志轮转配置(logrotate)

推荐全局模板(/etc/logrotate.d/app-logs):

/opt/logs/*/*.log {
    daily
    rotate 30
    missingok
    dateext
    dateformat -%Y%m%d
    compress
    delaycompress
    notifempty
    create 0640 root root
    sharedscripts
    postrotate
        /bin/kill -USR1 `cat /var/run/*.pid 2>/dev/null` 2>/dev/null || true
    endscript
}

针对 journald(systemd)日志限制大小(/etc/systemd/journald.conf):

[Journal]
SystemMaxUse=2G
SystemKeepFree=4G
MaxFileSec=30day

重载生效:

systemctl restart systemd-journald

4. 日志转发与集中化推荐方案

场景 推荐方案 实时性 复杂度 备注
小规模(<50 台) rsyslog → 中央 rsyslog 服务器 简单可靠
中大规模 rsyslog + RELP → Loki / Graylog 支持查询
容器化环境 Promtail / Fluent Bit → Loki Kubernetes 友好
高合规需求 auditd + rsyslog → SIEM 等保要求

示例:rsyslog 转发到远程服务器(/etc/rsyslog.conf 或 .d/ 目录)

# 转发所有日志
*.* action(type="omfwd" target="log-server.example.com" port="514" protocol="tcp")

或只转发关键日志:

auth,authpriv.*;kern.*;daemon.* @log-server.example.com:514

重启 rsyslog:

systemctl restart rsyslog

示例:Promtail 配置片段(Loki 客户端,适用于容器/现代环境)

server:
  http_listen_port: 9080

positions:
  filename: /opt/logs/promtail/positions.yaml

clients:
  - url: http://loki.example.com:3100/loki/api/v1/push

scrape_configs:
- job_name: system
  static_configs:
  - targets: [localhost]
    labels:
      job: varlogs
      host: "{{ .Hostname }}"
      __path__: /var/log/*.log
- job_name: applogs
  static_configs:
  - targets: [localhost]
    labels:
      job: applogs
      __path__: /opt/logs/**/*.log

5. 检查清单(上线/变更必验)

  • 所有应用日志存放于 /opt/logs/
  • logrotate 配置覆盖所有自定义日志路径
  • journald 大小限制已设置(≤ 2–5GB)
  • 日志转发已配置并测试(logger "Test message from $(hostname)"
  • 远程日志服务器可收到本机日志
  • 磁盘空间监控告警已关联日志目录(/opt/logs、/var/log)

6. 常见问题处理

  • 日志不轮转:检查 logrotate cron 是否运行(systemctl status logrotate.timer
  • 磁盘爆满:优先清理旧压缩日志,或调整 rotate 参数
  • 转发丢失:检查防火墙是否放行 514/tcp、rsyslog 是否运行

生产环境日志必须实现“本地 + 集中”双保险,严禁仅依赖本地存储。