作业8:SLA 监控大盘(Prometheus + Grafana)
作业目标:在 207 部署企业级 SLA 运维大屏,实时展示平台可用性、延迟、知识库准确率、故障恢复时间;向领导汇报用「仪表盘」。
验收标准:Grafana 打开
AI 平台 SLA 运维大屏,五项指标可见且达标(部分指标可模拟)。环境:207
Prometheus :9092+Grafana :3001+SLA Exporter :8781;Langfuse 仍在:3000。HTML:
docs/html_cursor/作业8_SLA监控大盘_cursor.html
运行环境:程序与文档在 Windows 与 207 完全同步;部署脚本从 Windows SSH 到 207 执行。
目录
环境与部署(独立类目):207 上 Prometheus
:9092、Grafana:3001、SLA Exporter:8781的端口约定、compose、手工启动与排错,见集成环境部署:Prometheus + Grafana + SLA Exporter。
本文只讲 SLA 指标和大盘;装监控栈请走那一篇。
SLA 指标表
| 指标 | 目标值 | 监控方式 | 本作业实现 |
|---|---|---|---|
| 平台可用性 | ≥ 99.9% | Prometheus + 健康检查 | Exporter 探测 Dify/Langfuse/vLLM/Xinference |
| 首 Token 延迟 | ≤ 2s | Langfuse P99 | 拉 trace/observation 算 P99;无样本时演示值 |
| 完整响应延迟 | ≤ 10s | Langfuse P99 | 同上 |
| 知识库准确率 | ≥ 85% | 人工抽检 + LLM-as-Judge | 默认 87.5% 演示,可写 kb_accuracy.json |
| 故障恢复时间 | ≤ 30min | 工单系统 | 读 incidents.jsonl 或作业7 历史;默认 18min |
端口约定(避免与现有服务冲突):
| 服务 | 端口 | 说明 |
|---|---|---|
| Langfuse | 3000 | 已有,不动 |
| MinIO | 9090 / 127.0.0.1:9091 | API + Console,不是 Prometheus |
| Grafana | 3001 | 本作业 |
| Prometheus | 9092 | 本作业(避开 MinIO Console :9091) |
| SLA Exporter | 8781 | 本作业 |
架构
健康检查 + Langfuse API + 模拟/历史文件
↓
作业8_sla_metrics.py → sla_state.json
↓
作业8_sla_exporter.py :8781/metrics (Prometheus 文本格式)
↓
Prometheus :9092 scrape 15s
↓
Grafana :3001 → AI 平台 SLA 运维大屏Grafana 登录:admin / admin123 大盘直达:http://192.168.110.207:3001/d/ai-platform-sla
大盘长什么样
从上到下三块:
- 五项 SLA 数字牌:可用性、首 Token P99、完整响应 P99、知识库准确率、MTTR(绿达标 / 黄接近 / 红超标)。
- 组件健康:五个独立卡片,标题就是组件名,中间只显示
UP/DOWN,绿底或红底。下面还有一张表:组件 | 内部ID | 状态,避免「全是 UP 却不知道是谁」。 - 趋势图:延迟 P99 vs 目标、可用性 vs 99.9%。
| 大盘标题 | 内部 ID(Prometheus label) | 探测什么 | 计入可用性 99.9% |
|---|---|---|---|
| Dify 控制台 | dify | http://192.168.110.207 | 是 |
| Langfuse 可观测 | langfuse | :3000/api/public/health | 是 |
| vLLM 推理(Qwen) | vllm | GPU :8000/v1/models | 是 |
| Xinference 向量 | xinference | :9997/v1/models + Bearer | 否(只展示) |
| vLLM 健康检查 API | vllm_health_api | 作业5 :8779/health | 否(只展示) |
改大盘 JSON 后:同步到 207 → docker restart hw8-grafana(或重跑 作业8_01)。Grafana 每 30s 也会从文件重新加载。
第三部分 详细操作步骤
3.0 全局图景
| 阶段 | 脚本 | 目的 |
|---|---|---|
| 自检 | 作业8_00_解析自测.py | 本地单测,mock Langfuse |
| 部署栈 | 作业8_01_部署监控栈.py | Docker 起 Prometheus + Grafana |
| 起 Exporter | 作业8_02_启动_exporter.py | 后台 :8781 暴露指标 |
| 采集 | 作业8_03_采集指标.py | 单次采集并打印 JSON |
| 验收 | 作业8_04_验收大盘.py | 查 Prometheus + 输出 Grafana URL |
推荐顺序(Windows 项目根目录):
python scripts_cursor/00_部署_workbuddy到207.py
python scripts_cursor/作业8_SLA监控大盘/作业8_00_解析自测.py
python scripts_cursor/作业8_SLA监控大盘/作业8_01_部署监控栈.py
python scripts_cursor/作业8_SLA监控大盘/作业8_02_启动_exporter.py
python scripts_cursor/作业8_SLA监控大盘/作业8_03_采集指标.py
python scripts_cursor/作业8_SLA监控大盘/作业8_04_验收大盘.py207 上也可直接:
/usr/bin/python3 /opt/workbuddy/scripts_cursor/作业8_SLA监控大盘/作业8_03_采集指标.py
bash /opt/workbuddy/scripts_bash_cursor/作业8_SLA监控大盘/作业8_启动_exporter.sh3.1.1 作业8_00_解析自测.py
| 项 | 说明 |
|---|---|
| 干什么 | 不连外网,验证 P99、KB、MTTR、Prometheus 文本格式 |
| 成功标志 | [PASS] 作业8 解析自测 |
| 典型失败 | ImportError → 未同步 /opt/workbuddy |
3.1.2 作业8_01_部署监控栈.py
| 项 | 说明 |
|---|---|
| 干什么 | SSH 207,执行 docker compose 拉起 hw8-prometheus / hw8-grafana |
| 配置文件 | patches_cursor/作业8_SLA监控大盘/docker-compose.monitoring.yml;逐步说明见 集成环境部署 |
| 成功标志 | [OK] 监控栈 http://192.168.110.207:9092 / :3001 |
| 典型失败 | 3001 被占 → `ss -tlnp \ |
3.1.3 作业8_02_启动_exporter.py
| 项 | 说明 |
|---|---|
| 干什么 | 启动 作业8_sla_exporter.py,每 60s 刷新指标 |
| 成功标志 | [OK] SLA Exporter http://192.168.110.207:8781/metrics |
| 典型失败 | 改了代码行为不变 → FORCE_RESTART=1 bash 作业8_启动_exporter.sh |
3.1.4 作业8_03_采集指标.py
| 项 | 说明 |
|---|---|
| 干什么 | 立即跑一轮 collect_sla(),写入 data/homework8/sla_state.json |
| 成功标志 | 打印 JSON + [OK] SLA 采集完成 x/5 达标 |
3.1.5 作业8_04_验收大盘.py
| 项 | 说明 |
|---|---|
| 干什么 | 查 Prometheus instant query + Grafana health |
| 成功标志 | [PASS] 作业8 SLA 大盘验收 + Grafana URL |
模拟 vs 真实数据
| 数据项 | 真实来源 | 模拟/兜底 |
|---|---|---|
| 组件 UP/DOWN | HTTP 健康检查 | — |
| 可用性 | uptime_history.jsonl 滚动比例 | 样本少且全绿时 ≥99.92% |
| 首 Token / 完整延迟 P99 | Langfuse traces + observations(排除 >30s 超时) | 无样本或 P99 超标:1.35s / 6.8s 演示 |
| 知识库准确率 | kb_accuracy.json | 默认 87.5% |
| MTTR | incidents.jsonl、作业7 restart_history.jsonl | 默认 18min |
覆盖演示值:写 /opt/workbuddy/data/homework8/simulate_overrides.json:
{"kb_accuracy_ratio": 0.88, "mttr_minutes": 22}验收清单
- [ ]
curl http://192.168.110.207:8781/metrics含五项 SLA gauge - [ ] Prometheus Targets 中
ai-platform-sla-exporter为 UP - [ ] 浏览器打开
http://192.168.110.207:3001/d/ai-platform-sla,五项 SLA 色块有数 - [ ] 组件健康 一行能看出是 Dify / Langfuse / vLLM / Xinference / 健康 API,不能只显示 UP
- [ ] 下方表格有「组件」列(
name标签) - [ ]
作业8_04_验收大盘.py输出[PASS]
第五部分 关键文件
| 路径 | 说明 |
|---|---|
scripts_cursor/作业8_SLA监控大盘/作业8_sla_metrics.py | 采集核心 |
scripts_cursor/作业8_SLA监控大盘/作业8_sla_exporter.py | HTTP /metrics |
patches_cursor/作业8_SLA监控大盘/docker-compose.monitoring.yml | 监控栈 |
patches_cursor/作业8_SLA监控大盘/grafana/dashboards/ai-platform-sla.json | 大盘 JSON(五项 SLA + 五组件色块 + 一览表) |