第 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 小时的自动清理。
动手练习
- 创建基础巡检 Cron:按 3.2 节配置每 10 分钟巡检
- 测试手动触发:运行
hermes cron trigger "basic-health"验证 - 配置日报 Cron:按 3.3 节设置每日早报
- 自定义阈值:按 3.4 节在 SOUL.md 中写入你的阈值标准
- 观察一天:让巡检跑一天,检查执行历史
本课小结
| 要点 | 内容 |
|---|---|
| Cron 语法 | 五位表达式,运维常用 */10、0 *、0 2 |
| [SILENT] 模式 | 无异常不通知,关键特性 |
| 四维巡检 | CPU + 内存 + 磁盘 + 网络 |
| 日报/周报 | 定时输出结构化运维报告 |
| 阈值分级 | Warning / Critical 两级预警 |
下一课预告
第 4 课:告警即处置——飞书 / 钉钉 / Telegram 实时告警
巡检发现问题了,下一步是把告警推到你的手机上。我们将配置多平台告警通道,实现从"发现异常"到"一键处置"的完整链路。