温馨提示×

Debian日志中的内存使用情况如何监控

小樊
34
2025-11-16 16:11:09
栏目: 智能运维

Debian内存使用日志监控实践

一、总体思路

  • 采用“日志化采集 + 日志分析/告警”的两步法:先用系统工具持续采集内存指标并写入日志或系统日志,再用日志工具做报表、检索与告警。
  • 核心工具组合:**sysstat(sar)**用于历史与周期性内存统计;journalctl用于查看与过滤系统日志;logwatch用于按日生成资源报告;rsyslog + 自定义脚本用于把内存数据写进syslog;glances可结合syslog做阈值告警。

二、将内存指标写入日志的常用做法

  • 使用 sysstat 的 sar 记录内存历史
    • 安装与启用:sudo apt-get update && sudo apt-get install sysstat;编辑 /etc/default/sysstat(将 ENABLED=“false” 改为 ENABLED=“true”),重启服务:sudo systemctl restart sysstat。
    • 采集与查看:sar 默认按日采集,查看内存与交换分区:sar -r;查看指定日期:sar -r -f /var/log/sysstat/saXX(XX为日期)。如需更细粒度,可用 cron 定时执行 sar 并追加到自定义日志。
  • 通过 rsyslog 与脚本把内存数据写入 syslog
    • 示例脚本(/usr/local/bin/log_mem.sh):
      • #!/usr/bin/env bash ts=$(date ‘+%b %d %H:%M:%S’) read mtotal mfree buffers cached < <(free -m | awk ‘NR==2{print $2,$4,$6,$7}’) swap_total=$(free -m | awk ‘NR==3{print $2}’) swap_free=$(free -m | awk ‘NR==3{print $4}’) echo “$ts $(hostname) MEM: total=${mtotal}MB free=${mfree}MB buffers=${buffers}MB cached=${cached}MB swap_total=${swap_total}MB swap_free=${swap_free}MB” | logger -t MEM_MON
    • 定时任务:crontab -e 加入 */5 * * * * /usr/local/bin/log_mem.sh(每5分钟记录一次)。
    • 查看:journalctl -t MEM_MON 或 grep MEM_MON /var/log/syslog。
  • 使用 logwatch 生成内存日报
    • 安装:sudo apt-get install logwatch
    • 配置:编辑 /etc/logwatch/conf/logwatch.conf,设置 Detail=High、Range=yesterday、Service=All、Output=mail、MailTo=your@email;如需聚焦内存,可自定义服务脚本仅解析 MEM_MON 行并输出统计。
    • 运行:sudo logwatch(或放到 cron 每日执行)。

三、从日志中检索与分析内存数据

  • 实时跟踪内存日志:tail -f /var/log/syslog | grep MEM_MON;按时间窗口检索:journalctl -t MEM_MON --since “2025-11-16 00:00:00” --until “2025-11-16 12:00:00”。
  • 统计与基线:对日志中已记录的可用内存做聚合,例如计算近1小时最小值(判断是否紧张):
    • journalctl -t MEM_MON --since “1 hour ago” | awk ‘{gsub(“MB”,“”,$NF); if($NF+0<100) print $0}’ # 示例:可用内存低于100MB则打印
  • 结合 sar 回看历史趋势:sar -r;如需定位某天峰值,使用 sar -r -f /var/log/sysstat/sa$(date -d yesterday +%d)。
  • 图形化与长期趋势:将日志接入 Prometheus + Grafana(以 node_exporter 为主流做法),或将 sysstat 数据文件作为数据源,绘制可用内存、swap 使用、内存压力趋势图。

四、阈值告警与自动化

  • 基于 syslog 的阈值告警(rsyslog + 外部脚本)
    • 在 rsyslog 配置中匹配 MEM_MON,当可用内存低于阈值时调用告警脚本(如发邮件/企业微信/钉钉)。示例思路:
      • :msg, contains, “MEM:” /var/log/mem.log
      • if $msg contains “free=” { set $! = $msg; call send_alert }
    • 告警脚本解析可用内存字段并判断是否超过阈值后调用 webhook 或 mail 命令。
  • 使用 glances 的 syslog 告警
    • 安装:sudo apt-get install glances;配置 /etc/glances/glances.conf 开启 syslog 通知(notify_syslog、syslog_facility、syslog_level),以 warning 级别在内存压力时写入 syslog,再由 rsyslog 触发告警流程。
  • 简单邮件告警脚本示例(配合 logwatch 或自定义日志)
    • echo “Subject: Memory Alert $(date)” | sendmail your@email < /var/log/mem_alert.txt
    • 建议配合 logwatch 的 Output=mail 或 cron 定时执行。

五、关键指标与解读

  • 关注指标与含义
    • MemTotal / MemFree / Buffers / Cached / SwapTotal / SwapFree:总量、空闲、内核缓冲/页缓存、交换分区总量与空闲;判断是否存在内存紧张或频繁换页。
    • sar -r 输出字段:kbmemfree、kbmemused、%memused、kbbuffers、kbcached、kbcommit、%commit 等,用于观察内存使用率与提交内存压力。
  • 快速检查命令
    • 实时:free -h、top/htop、vmstat 1 5;历史:sar -r、sar -r -f /var/log/sysstat/saXX;内核细节:cat /proc/meminfo。

0