日志管理与集中化规范 📜
版本: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.log、error.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 是否运行
生产环境日志必须实现“本地 + 集中”双保险,严禁仅依赖本地存储。