温馨提示×

centos缓存日志如何分析

小樊
35
2025-12-13 09:56:32
栏目: 智能运维

CentOS缓存日志分析实操指南

一、先厘清“缓存”与“日志”的关系

  • Linux 的 Page Cache/Buffers 是内核为提升 I/O 性能而使用的内存机制,本身不会写“缓存日志”。人们常说的“缓存日志”通常是指:
    1. systemd-journald 写入的 journal 日志(持久化在 /var/log/journal 或运行时内存);
    2. 传统 rsyslog 写入的 /var/log/ 文件型日志(如 messages、secure、cron 等);
    3. 应用自身产生的日志(如 Nginx access/error、数据库错误日志等)。
  • 排查“缓存占用高”时,优先确认是哪类日志在快速增长,再决定分析与清理策略。

二、快速定位日志来源与占用

  • 查看内存与缓存概况
    • 观察整体内存与回收行为:free -mvmstat 1 10
    • 观察内核回收压力:sar -B 1 10(关注 pgscank/s、pgsteal/s)
  • 判断 journal 是否占用过多
    • 查看持久化与大小配置:sudo journalctl --disk-usage
    • 若占用异常,可临时收缩:sudo journalctl --vacuum-time=7d--vacuum-size=100M
    • 需要长期持久化时,确保 /var/log/journal 存在并配置 Storage=persistent(编辑 /etc/systemd/journald.conf,然后重启 systemd-journald
  • 找出被缓存的大文件(往往是日志或下载内容)
    • 使用 hcache 快速定位前 N 个被缓存的文件(适合定位“哪个日志/文件把 cache 吃满”):
      • 下载与安装:wget https://silenceshell-1255345740.cos.ap-shanghai.myqcloud.com/hcache && chmod +x hcache && mv hcache /usr/local/bin/
      • 查看前 10:hcache -top 10
    • 也可用 pcstat(需安装)或 ls -lhS /var/log 辅助判断大日志文件。

三、按日志类型进行分析

  • 使用 journalctl 做系统级分析(CentOS 7+ 优先)
    • 实时跟踪:journalctl -f
    • 按时间:journalctl --since "2025-12-13 00:00:00" --until "2025-12-13 12:00:00"
    • 按级别:journalctl -p err..alert
    • 按单元:journalctl -u nginx.service -b -n 50
    • 按启动会话:journalctl -b -1(上一次启动)
  • 分析 /var/log/ 文件型日志
    • 实时查看:tail -f /var/log/messagestail -f /var/log/secure
    • 关键字定位:grep -i "error\|fail\|timeout" /var/log/messages
    • 统计与去重:wc -l /var/log/messagessort | uniq -c | sort -nr
  • 应用日志要点
    • Web 服务:分析 /var/log/httpd/access_logerror_log,统计 5xx、慢请求、来源 IP 等
    • 数据库:查看 /var/log/mysql/error.log 等错误与告警
    • 安全审计:查看 /var/log/secure(登录、sudo 等)与 last/utmpdump /var/log/wtmp 了解登录历史。

四、常见场景与命令清单

  • 场景 A:journal 日志把 cache 吃满
    • 诊断:sudo journalctl --disk-usage、确认 /var/log/journal 持久化与大小
    • 处置:sudo journalctl --vacuum-time=7d--vacuum-size=100M;必要时在 /etc/systemd/journald.conf 调整 SystemMaxUse=… 并重启 systemd-journald
  • 场景 B:某服务疯狂写日志导致 cache 升高
    • 定位:tail -f /var/log/<service>.loggrep -i error … 找到异常频率与来源
    • 缓解:修复根因(错误/重试风暴),并配置合理的 logrotate 策略(见下节)
  • 场景 C:Nginx 代理缓存命中率分析(若你使用 Nginx 作为缓存)
    • nginx.conflog_format 中加入 $upstream_cache_status,然后在访问日志中统计:
      • 命中率:awk '{if($NF=="\"HIT\"") hit++; total++;} END {printf "%.2f%%\n", hit/total*100}' access.log
      • 各状态占比:awk '{s[$NF]++; total++;} END {for(k in s) printf "%s: %.2f%%\n", k, s[k]/total*100}' access.log
      • 常见状态:HIT/MISS/EXPIRED/UPDATING/STALE/BYPASS

五、长期治理与自动化

  • 配置 logrotate 控制日志体积与保留(避免无限增长)
    • 系统级配置:/etc/logrotate.conf;服务级配置:/etc/logrotate.d/(为 nginx、httpd、messages 等分别设置轮转周期、压缩、保留份数)
  • 集中式日志与可视化
    • 小规模可用 ELK Stack(Elasticsearch/Logstash/Kibana)Splunk 做检索与仪表盘;
    • 轻量采集可用 Filebeat 解析多种日志格式并发送到 ES/Kibana,便于长期留存与告警。

0