作业16:向量运维监控 · 知识更新状态机 · 恢复演练 · 同步失败告警(跟学 + Cursor)
作业目标:读一遍 Milvus(主)或 Elasticsearch kNN(备)官方运维/监控章节,摘 10 个指标;设计「知识更新」状态机(成功/失败/重试/人工);写恢复演练:删测试集合 → 从备份恢复 → 抽检查询;Cursor 生成知识同步失败告警文案(含 trace / 任务 ID)。
验收标准:
1. 能默写/对照 10 条向量监控指标及告警含义
2. 能画出知识更新状态机并说明 Dify 各阶段对应关系
3. 在隔离环境完成一次向量恢复演练(或书面逐步命令 + 抽检查询脚本结果)
4. 告警模板含
dataset_id、document_id、task_id、trace_id环境:207 现网向量 Weaviate;Milvus 用 compose
milvusprofile 在隔离目录演练;ES 见 RAGFlow 附录。HTML:
docs/html_cursor/作业16_向量监控与知识同步_cursor.html
脚本:
scripts_cursor/作业16_向量监控与知识同步/Runbook:
作业16_向量恢复演练Runbook_cursor.md结果:
data/homework16/前置:作业15 备份清单、Worker Runbook
目录
- 做完长什么样
- 学习路线
- Part A · 官方监控 10 指标(Milvus)
- Part B · ES kNN 备选 10 指标
- Part C · 知识更新状态机
- Part D · 恢复演练步骤
- Part E · Cursor:同步失败告警文案
- 完整程序
- 验收清单
做完长什么样
| 项 | 值 |
|---|---|
| 监控来源 | Milvus Monitor Overview + Metrics Dashboard |
| 10 指标 | 见 Part A 表格(可背诵) |
| 状态机 | waiting → … → completed / error → retry / manual |
| 演练 | 删 hw16_test collection → 恢复 volumes/milvus/* → hw16_02 抽查 |
| 告警 | data/homework16/alert_templates_knowledge_sync.md |
学习路线
A 读 Milvus Monitoring 章节 → 填 10 指标表
B 画知识更新状态机,对照 Dify 文档 indexing 阶段
C 隔离环境:建测试 collection → 备份 → 删除 → 恢复 → spot check
D 跑 hw16_01 生成告警模板;模拟填 task_id / trace_idPart A · 官方监控 10 指标(Milvus)
来源:Milvus 官方 Monitoring, Alerts & Logs → Monitoring(Prometheus
:9091/metrics,Grafana 预置看板)。命名规则:
milvus_<subsystem>_<name>,subsystem 含 proxy / querynode / datacoord / indexnode 等。
| # | 指标名 | 类型 | 含义 | 运维关注点 |
|---|---|---|---|---|
| 1 | milvus_proxy_search_vectors_count | Counter | Proxy 侧成功检索的向量数累计 | 检索负载;突增需看 QPS 与 QueryNode |
| 2 | milvus_proxy_insert_vectors_count | Counter | 写入向量累计 | 知识入库吞吐;入库慢时对照 mutation 延迟 |
| 3 | milvus_proxy_sq_latency | Histogram | Search/Query 端到端延迟 | P99 升高 → 队列/段加载/资源 |
| 4 | milvus_proxy_mutation_latency | Histogram | Insert/Delete 变更延迟 | 知识更新/删除慢;写路径瓶颈 |
| 5 | milvus_proxy_req_count | Counter | Proxy 总请求数(按 status) | 对比 success/fail 比例 |
| 6 | milvus_querynode_sq_req_latency | Histogram | QueryNode 执行检索延迟 | 与 proxy 延迟对比,定位是否在 query 层 |
| 7 | milvus_querynode_sq_queue_latency | Histogram | 检索在 QueryNode 队列等待 | 排队长 → 扩容 QueryNode 或限流 |
| 8 | milvus_querynode_segment_num | Gauge | QueryNode 已加载 segment 数 | 段过多/加载失败影响检索 |
| 9 | milvus_querynode_entity_num | Gauge | 可检索 实体(向量)数量 | 与业务预期文档数对照;恢复演练后应恢复 |
| 10 | milvus_datacoord_segment_num | Gauge | DataCoord 管理的 segment 总数 | Compaction/Flushing 异常时段数异常 |
官方告警场景(Create an alert):CPU/内存过高、磁盘不足、Pod 频繁重启;可用 process_resident_memory_bytes 等进程指标配合上表。
本仓库 compose(milvus profile):19530 gRPC、9091 metrics/health — 隔离演练时 curl http://127.0.0.1:9091/healthz。
Part B · ES kNN 备选 10 指标
若选 Elasticsearch(RAGFlow 等),读 Cluster health、Cluster stats、kNN stats API(
/_opendistro/_knn/stats或 OpenSearch 等价路径)。
| # | 指标/ API 字段 | 含义 | 运维关注点 |
|---|---|---|---|
| 1 | cluster health status | green/yellow/red | red = 主分片未分配,检索不可用 |
| 2 | active_shards_percent_as_number | 活跃分片占比 | <100% 持续 → 恢复/扩容 |
| 3 | indices.store.size_in_bytes | 索引存储大小 | 磁盘规划;向量索引膨胀 |
| 4 | search.query_total / search.query_time_in_millis | 查询次数与耗时 | 检索负载与延迟趋势 |
| 5 | knn.query_requests | kNN 查询请求数 | 向量检索 QPS |
| 6 | knn.index_requests | kNN 索引构建请求数 | 知识入库吞吐 |
| 7 | knn.query_request_errors | kNN 查询错误 | 同步失败/检索失败告警源 |
| 8 | knn.circuit_breaker_triggered | 向量内存熔断 | 近似检索 OOM 风险 |
| 9 | knn.cache_capacity_reached | 图缓存达上限 | 冷查询变慢,需 warmup |
| 10 | jvm.mem.heap_used_percent(nodes stats) | JVM 堆使用率 | 向量+堆压力,>85% 持续危险 |
Part C · 知识更新状态机
C1. 总览(Dify 知识库 × 向量层)
Dify 文档在 UI/API 侧经历 解析 → 分片 → embedding → 写向量库;Celery dataset 队列由 worker 驱动。向量层(Weaviate/Milvus/ES)只负责最终可检索对象。
stateDiagram-v2 [*] --> waiting: 上传完成/API入队 waiting --> parsing: worker领取 parsing --> cleaning: 解析成功 parsing --> error: 解析失败 cleaning --> splitting: 清洗完成 splitting --> indexing: 分片完成 indexing --> completed: 向量写入成功\nPG状态+向量库一致 indexing --> error: embedding/向量写入失败 error --> retry: 自动重试\n(次数未超限) retry --> waiting: 重新入队 retry --> manual: 超过max_retry\n或不可恢复错误 manual --> waiting: 运维修复后\nUI/API「重试」 manual --> completed: 人工修复数据\nre-index成功 completed --> [*]
C2. 状态说明
| 状态 | 含义 | 用户可见 | 典型原因 |
|---|---|---|---|
| waiting | 已入 PG/队列,待 worker | 「排队/等待」 | worker 停(作业15)、队列堆积 |
| parsing | 提取文本 | 「索引中」 | PDF/格式异常 |
| cleaning / splitting | 清洗、分段 | 「索引中」 | 规则/分段 token 超限 |
| indexing | 调 embedding + 写向量 | 「索引中」 | embedding 超时、向量库不可达 |
| completed | 成功 | 「可用」/ indexing_status=available | — |
| error | 失败 | 红色错误/失败 | 上游/向量/权限 |
| retry | 自动重试 | 仍显示索引中或短暂 error | 瞬时网络 |
| manual | 需人工 | 长期失败 | 超过重试、数据损坏、集合丢失 |
C3. 与监控指标的联动
| 状态机事件 | 建议看的指标 |
|---|---|
| 卡在 indexing | milvus_proxy_mutation_latency ↑、dataset 队列 LLEN ↑ |
| 检索空但 completed | milvus_querynode_entity_num = 0 → 向量层丢失,走恢复演练 |
| 检索慢 | milvus_querynode_sq_queue_latency P99、milvus_proxy_sq_latency |
| ES 路径 error | knn.query_request_errors、cluster health red/yellow |
Part D · 恢复演练步骤
详细命令见
作业16_向量恢复演练Runbook_cursor.md。以下以 Milvus 隔离实例 为例(Weaviate/ES 分支在同 Runbook)。
D1. 演练前
- 隔离目录(同作业15),启用 profile:
COMPOSE_PROFILES=...,milvus - 创建测试 collection
hw16_test并 insert 少量向量(Attu 或 pymilvus) - 按作业15 备份
volumes/milvus/{etcd,minio,milvus}三目录
D2. 三步演练
① 删测试集合 drop collection hw16_test(或 UI 删除)
② 从备份恢复 停 milvus 栈 → 还原三目录快照 → 启动
③ 抽检查询 hw16_02_恢复演练抽检查询.py --backend milvus --collection hw16_test
+ Dify 知识库「命中测试」或 Milvus searchD3. 通过标准
hw16_02返回"ok": true且num_entities > 0milvus_querynode_entity_num(或等价)与演练前数量级一致- 随机 1 条 hit-testing / search 能返回预期片段
Part E · Cursor:同步失败告警文案
E1. 提示词
为 Dify 知识库索引失败写告警模板:值班群、邮件、工单、P1 升级。
必须包含 dataset_id, document_id, celery task_id, langfuse trace_id, stage, error。
输出 Python 脚本 hw16_01_知识同步失败告警文案.py,写入 data/homework16/。E2. 运行
python scripts_cursor/作业16_向量监控与知识同步/hw16_01_知识同步失败告警文案.py \
--dataset-id "YOUR_DS_ID" \
--document-id "YOUR_DOC_ID" \
--task-id "celery-uuid-from-worker-log" \
--trace-id "langfuse-trace-id" \
--error "weaviate connection refused" \
--level P2E3. ID 从哪里取
| ID | 来源 |
|---|---|
document_id | Dify 知识库文档列表 API / UI |
task_id | `docker compose logs worker \ |
trace_id | Langfuse Traces(作业3/14);或 ops_trace 队列相关日志 |
完整程序
| 文件 | 作用 |
|---|---|
hw16_01_知识同步失败告警文案.py | IM/邮件/工单/升级模板 |
hw16_02_恢复演练抽检查询.py | Milvus / Weaviate / ES 恢复后验收 |
验收清单
- [ ] 写出 Milvus 10 个指标名称与一句含义(或 ES 备选 10 条)
- [ ] 画出知识更新状态机:completed / error / retry / manual 四条出路
- [ ] 说明
indexing失败时看哪些指标 + 作业15 哪条队列 - [ ] 书面或实操:删 collection → 恢复备份 →
hw16_02spot check 通过 - [ ] 生成告警 MD,且含 task_id + trace_id 占位或真实值
- [ ] 仅在隔离环境做删除/恢复,未动生产 Weaviate
相关文档
- 作业15 备份:
作业15_Dify备份清单_cursor.md - Worker 队列:
作业15_值班Runbook_Worker宕机_cursor.md - Weaviate 中继:
Dify_专题六_weaviate中继_cursor - 知识库变慢:
Dify_专题十四_知识库问答变慢卡住失败排查与容量规划_cursor