centos镜像如何进行日志管理
小樊
45
2025-12-19 17:56:56
CentOS 镜像的日志管理实践
一 核心组件与日志位置
- 现代 CentOS 7/8/9 使用 systemd-journald 管理结构化日志,配合 rsyslog 写入文件型日志,应用日志多落在 /var/log/。常用查看与定位方式如下:
- 查看全部或最近日志:journalctl;journalctl -n 100;实时跟踪:journalctl -f
- 按服务查看:journalctl -u <service_name>
- 按时间范围:journalctl --since “2025-12-01” --until “2025-12-19”
- 查看内核日志:dmesg;或 journalctl -k
- 查看本次/上次启动:journalctl -b;journalctl -b -1
- 常见文件型日志:/var/log/messages(系统消息)、/var/log/secure(认证与安全)、/var/log/boot.log(启动过程)
- 查看日志占用:journalctl --disk-usage
- 配置文件:/etc/systemd/journald.conf(journald)、/etc/rsyslog.conf 与 /etc/rsyslog.d/(rsyslog 规则)
二 本地日志查看与检索
- 优先用 journalctl 做时间、服务、级别等多维度筛选;大文件用 less 分页,配合 grep/awk 做关键字与字段分析。
- 典型用法示例:
- 实时查看某服务:journalctl -u nginx -f
- 近 1 小时错误:journalctl --since “1 hour ago” -p err
- 本次启动的 SSH 登录:journalctl -b -u sshd | grep “Accepted”
- 内核启动告警:dmesg | tail -n 50
- 文件型日志快速检索:grep -i “error” /var/log/messages;或 zcat /var/log/messages-*.gz | grep “timeout”
三 日志轮转与保留策略
- 使用 logrotate 按天/大小轮转并压缩归档,配置文件为 /etc/logrotate.conf,服务专用配置放在 /etc/logrotate.d/,通常由 cron 每日触发。
- 常用参数:daily/weekly/monthly;size 100M;rotate 7;compress;missingok;notifempty;create 0640 app adm;postrotate 发送信号让进程重开日志(如 kill -USR1)
- 示例
- Nginx 日志轮转(按日,保留 10 份,压缩,轮转后通知 Nginx 重开日志)
/var/log/nginx/*.log {
daily
rotate 10
compress
missingok
notifempty
create 0644 nginx adm
sharedscripts
postrotate
/bin/kill -USR1
cat /run/nginx.pid 2>/dev/null 2>/dev/null || true
endscript
}
- 通用应用日志(按大小触发,保留 7 份)
/var/log/myapp.log {
size 100M
rotate 7
compress
missingok
notifempty
create 0640 root adm
}
- 预演与强制:logrotate -d /etc/logrotate.d/myapp(预演);logrotate -vf /etc/logrotate.d/myapp(强制)
四 远程集中与可视化
- 将日志统一发往集中平台便于检索与审计:
- rsyslog 发送
- UDP:. @remote-log-server:514
- TCP:. @@remote-log-server:514
- 服务端需启用模块:imudp/imtcp 并开放 514 端口
- 集中式方案选型
- ELK Stack(功能全、资源占用高)
- Grafana Loki(轻量、云原生友好)
- 安全与合规要点
- 敏感信息脱敏、日志传输与存储加密、访问 RBAC 控制、不可变存储(WORM)、明确的保留周期与审计追踪
五 常见问题与运维建议
- 日志过大或磁盘告警
- 设置合理的轮转策略(如 size + rotate),并监控 /var/log 与 journal 占用(journalctl --disk-usage)
- 必要时清理历史归档,或扩容磁盘分区
- 权限与安全
- 关键日志文件权限建议 640,属主/属组如 root:adm;结合 SELinux 策略加固
- 服务不重新打开日志
- 轮转后通过 postrotate 发送 USR1 或 HUP 信号(如 Nginx kill -USR1;rsyslog killall -HUP rsyslogd)
- 排查技巧
- 先定位时间窗口与严重级别,再缩小到服务/进程,最后到具体文件与关键字;必要时同时查看 journal 与 /var/log 文件