监控的三层

  • 存活层:端口可达、进程在跑(最粗但最关键)
  • 资源层:CPU、内存、磁盘使用率、inode
  • 业务层:关键接口响应时间、错误率

技术笔记类站点只需前两层就能覆盖绝大多数事故。

磁盘是头号杀手

ENOSPC(磁盘满)会导致构建失败、数据库写崩、日志截断。监控磁盘不能只看使用率,还要看 inode 与增长速度:

df -h            # 空间
df -i            # inode
du -x -h --max-depth=1 /var | sort -h   # 定位大户

自愈脚本

把"发现满 -> 清理 -> 通知"写成一个轻量脚本,由 cron 分钟级触发:

#!/bin/bash
THRESH=85
USE=$(df --output=pcent / | tail -1 | tr -dc '0-9')
if [ "$USE" -ge "$THRESH" ]; then
  journalctl --vacuum-time=7d
  docker system prune -f
  # 清理旧构建产物、日志
  curl -s -X POST "$ALERT_URL" -d "disk $USE% on $(hostname)"
fi

注意:自愈脚本自身要幂等,且清理范围必须白名单化,绝不能 rm -rf 未限定目录。

外部探活

最便宜的外部探活是一个定时 curl:从另一台机器访问 http://域名/healthz,非 200 即告警。Nginx 侧为 healthz 单独放行:

location = /healthz { return 200 "ok"; }

经验

监控的价值不在"看到数字",而在"该发生时有人被叫醒"。没有告警通道的监控,只是自我安慰的仪表盘。