第 3 课 服务器健康巡检:Cron + Terminal 自动化监控

第 3 课 服务器健康巡检:Cron + Terminal 自动化监控

本课目标

  • 掌握 Hermes Cron 定时任务的创建与管理
  • 构建服务器 CPU / 内存 / 磁盘的自动巡检流程
  • 实现巡检结果的自动汇总与异常标记

3.1 Hermes Cron 机制详解

Cron 语法

标准五位 Cron 表达式:

┌────── 分钟 (0-59)
│ ┌──── 小时 (0-23)
│ │ ┌── 日 (1-31)
│ │ │ ┌ 月 (1-12)
│ │ │ │ ┌ 星期 (0-6, 0=周日)
│ │ │ │ │
* * * * *

运维常用示例:

表达式 含义
*/10 * * * * 每 10 分钟
0 * * * * 每小时整点
0 9 * * * 每天早上 9 点
0 9 * * 1 每周一早上 9 点
0 2 * * * 每天凌晨 2 点(备份时段)

Cron 管理命令

# 添加任务
hermes cron add "任务名" "Cron表达式" "提示词"

# 列出所有任务
hermes cron list

# 手动触发
hermes cron trigger "任务名"

# 暂停/恢复
hermes cron pause "任务名"

# 查看执行历史
hermes cron history "任务名"

[SILENT] 模式

运维巡检最关键的特性——无异常不通知

hermes cron add "health-check" "*/10 * * * *" \
  "[SILENT] 检查所有服务器健康状态。
  只在发现异常时通知我。"

[SILENT] 前缀意味着 Agent 静默执行。正常结果只记录日志,不打扰你。只有检测到问题时才通过网关推送告警。


3.2 巡检脚本设计

基础四维度巡检

hermes cron add "basic-health" "*/10 * * * *" \
  "[SILENT] 对以下服务器执行健康巡检:
  api-01, api-02, db-01, redis-01, nginx-01

  检查项目及告警阈值:
  1. CPU 使用率 → 超过 80% 告警
  2. 内存使用率 → 超过 85% 告警
  3. 磁盘使用率 → 超过 80% 告警
  4. 系统负载(Load Average) → 1分钟值超过 CPU 核心数告警

  输出格式(仅异常时推送):
  🚨 [服务器名] 异常项:
  - 指标名: 当前值 / 阈值
  - 建议处理方案"

进程级巡检

hermes cron add "process-check" "*/5 * * * *" \
  "[SILENT] 检查以下关键进程是否存活:
  - api-01: uvicorn (FastAPI)
  - api-02: uvicorn (FastAPI)
  - db-01: postgresql
  - redis-01: redis-server
  - nginx-01: nginx

  如果进程不存在:
  1. 尝试重启服务
  2. 等待 10 秒确认恢复
  3. 通知我处理结果(无论成功与否)"

网络连通性巡检

hermes cron add "network-check" "*/15 * * * *" \
  "[SILENT] 检查网络连通性:
  1. api-01 → db-01 PostgreSQL端口(5432) 连通性
  2. api-01 → redis-01 Redis端口(6379) 连通性
  3. nginx-01 → api-01:8000 HTTP 响应时间
  4. nginx-01 → api-02:8000 HTTP 响应时间
  5. DNS 解析 cloudnote.com 是否正常

  HTTP 响应时间超过 500ms 标记为慢
  连接失败立即告警"

3.3 巡检报表

日报 Cron

hermes cron add "daily-report" "0 9 * * *" \
  "生成昨日服务器运行日报,推送给我:

  ## CloudNote 基础设施日报 — {日期}

  ### 概览
  | 服务器 | CPU均值 | 内存峰值 | 磁盘 | 状态 |
  |--------|---------|---------|------|------|
  (逐台填写)

  ### 异常事件
  (列出昨日所有告警和处理结果)

  ### 关键指标趋势
  - PostgreSQL 连接数峰值
  - Redis 内存使用趋势
  - API 平均响应时间

  ### 建议
  (基于数据给出运维建议)"

周报 Cron

hermes cron add "weekly-report" "0 10 * * 1" \
  "生成上周服务器运行周报:
  1. 各服务器资源使用趋势(较前一周对比)
  2. 本周告警统计(按 P0-P3 分级)
  3. 未关闭的已知问题
  4. SSL 证书到期检查(30 天内到期需提醒)
  5. 下周运维建议"

3.4 异常阈值配置

SOUL.md 中定义统一的阈值标准:

# 巡检阈值配置
## 资源阈值
| 指标 | Warning | Critical |
|------|---------|----------|
| CPU 使用率 | > 70% | > 90% |
| 内存使用率 | > 75% | > 90% |
| 磁盘使用率 | > 70% | > 85% |
| Load Average(1min) | > N核×0.7 | > N核×1.0 |
| 磁盘 I/O | > 80% busy | > 95% busy |

## 服务阈值
| 指标 | Warning | Critical |
|------|---------|----------|
| PostgreSQL 连接数 | > 80/100 | > 95/100 |
| Redis 内存使用 | > 70% | > 90% |
| API 响应时间 | > 300ms | > 1000ms |
| HTTP 5xx 错误率 | > 1% | > 5% |

3.5 多服务器巡检编排

串行 vs 并行

小周有 5 台服务器。串行巡检要 5 次 SSH 调用,较慢。可以指导 Hermes 并行:

hermes cron add "parallel-check" "*/10 * * * *" \
  "[SILENT] 并行检查以下服务器的健康状态:
  api-01, api-02, db-01, redis-01, nginx-01

  对每台服务器并行执行:
  ssh <host> 'echo CPU:$(top -bn1 | grep Cpu | awk \"{print \\$2}\")% \
  MEM:$(free -m | awk \"/Mem/{printf \\\"%.0f%%\\\", \\$3/\\$2*100}\") \
  DISK:$(df -h / | awk \"NR==2{print \\$5}\")'

  汇总所有结果为表格,只推送有异常的。"

巡检结果存档

每次巡检结果保存到 MEMORY.md 的"巡检历史"分区,
保留最近 24 小时的数据用于趋势分析。
超过 24 小时的自动清理。

动手练习

  1. 创建基础巡检 Cron:按 3.2 节配置每 10 分钟巡检
  2. 测试手动触发:运行 hermes cron trigger "basic-health" 验证
  3. 配置日报 Cron:按 3.3 节设置每日早报
  4. 自定义阈值:按 3.4 节在 SOUL.md 中写入你的阈值标准
  5. 观察一天:让巡检跑一天,检查执行历史

本课小结

要点 内容
Cron 语法 五位表达式,运维常用 */100 *0 2
[SILENT] 模式 无异常不通知,关键特性
四维巡检 CPU + 内存 + 磁盘 + 网络
日报/周报 定时输出结构化运维报告
阈值分级 Warning / Critical 两级预警

下一课预告

第 4 课:告警即处置——飞书 / 钉钉 / Telegram 实时告警

巡检发现问题了,下一步是把告警推到你的手机上。我们将配置多平台告警通道,实现从"发现异常"到"一键处置"的完整链路。