📎 配套脚本附件正文未内嵌 · 共 2 个 · 点开可在线查看
📂 查看全部 761 个脚本附件 →
⚠️ 脚本内含明文凭据(与本页正文一致),请勿在公网环境直接运行。
本周实战

作业16 · 向量监控与知识同步

Milvus/ES 运维 10 指标、知识更新状态机、同步失败告警。

作业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 milvus profile 在隔离目录演练;ES 见 RAGFlow 附录。

HTML:docs/html_cursor/作业16_向量监控与知识同步_cursor.html

脚本:scripts_cursor/作业16_向量监控与知识同步/

Runbook:作业16_向量恢复演练Runbook_cursor.md

结果:data/homework16/

前置:作业15 备份清单、Worker Runbook


目录

  1. 做完长什么样
  2. 学习路线
  3. Part A · 官方监控 10 指标(Milvus)
  4. Part B · ES kNN 备选 10 指标
  5. Part C · 知识更新状态机
  6. Part D · 恢复演练步骤
  7. Part E · Cursor:同步失败告警文案
  8. 完整程序
  9. 验收清单

做完长什么样

项值
监控来源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

学习路线

text
A  读 Milvus Monitoring 章节 → 填 10 指标表
B  画知识更新状态机,对照 Dify 文档 indexing 阶段
C  隔离环境:建测试 collection → 备份 → 删除 → 恢复 → spot check
D  跑 hw16_01 生成告警模板;模拟填 task_id / trace_id

Part A · 官方监控 10 指标(Milvus)

来源:Milvus 官方 Monitoring, Alerts & Logs → Monitoring(Prometheus :9091/metrics,Grafana 预置看板)。

命名规则:milvus_<subsystem>_<name>,subsystem 含 proxy / querynode / datacoord / indexnode 等。

#指标名类型含义运维关注点
1milvus_proxy_search_vectors_countCounterProxy 侧成功检索的向量数累计检索负载;突增需看 QPS 与 QueryNode
2milvus_proxy_insert_vectors_countCounter写入向量累计知识入库吞吐;入库慢时对照 mutation 延迟
3milvus_proxy_sq_latencyHistogramSearch/Query 端到端延迟P99 升高 → 队列/段加载/资源
4milvus_proxy_mutation_latencyHistogramInsert/Delete 变更延迟知识更新/删除慢;写路径瓶颈
5milvus_proxy_req_countCounterProxy 总请求数(按 status)对比 success/fail 比例
6milvus_querynode_sq_req_latencyHistogramQueryNode 执行检索延迟与 proxy 延迟对比,定位是否在 query 层
7milvus_querynode_sq_queue_latencyHistogram检索在 QueryNode 队列等待排队长 → 扩容 QueryNode 或限流
8milvus_querynode_segment_numGaugeQueryNode 已加载 segment 数段过多/加载失败影响检索
9milvus_querynode_entity_numGauge可检索 实体(向量)数量与业务预期文档数对照;恢复演练后应恢复
10milvus_datacoord_segment_numGaugeDataCoord 管理的 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 字段含义运维关注点
1cluster health statusgreen/yellow/redred = 主分片未分配,检索不可用
2active_shards_percent_as_number活跃分片占比<100% 持续 → 恢复/扩容
3indices.store.size_in_bytes索引存储大小磁盘规划;向量索引膨胀
4search.query_total / search.query_time_in_millis查询次数与耗时检索负载与延迟趋势
5knn.query_requestskNN 查询请求数向量检索 QPS
6knn.index_requestskNN 索引构建请求数知识入库吞吐
7knn.query_request_errorskNN 查询错误同步失败/检索失败告警源
8knn.circuit_breaker_triggered向量内存熔断近似检索 OOM 风险
9knn.cache_capacity_reached图缓存达上限冷查询变慢,需 warmup
10jvm.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. 与监控指标的联动

状态机事件建议看的指标
卡在 indexingmilvus_proxy_mutation_latency ↑、dataset 队列 LLEN ↑
检索空但 completedmilvus_querynode_entity_num = 0 → 向量层丢失,走恢复演练
检索慢milvus_querynode_sq_queue_latency P99、milvus_proxy_sq_latency
ES 路径 errorknn.query_request_errors、cluster health red/yellow

Part D · 恢复演练步骤

详细命令见 作业16_向量恢复演练Runbook_cursor.md。以下以 Milvus 隔离实例 为例(Weaviate/ES 分支在同 Runbook)。

D1. 演练前

  1. 隔离目录(同作业15),启用 profile:COMPOSE_PROFILES=...,milvus
  2. 创建测试 collection hw16_test 并 insert 少量向量(Attu 或 pymilvus)
  3. 按作业15 备份 volumes/milvus/{etcd,minio,milvus} 三目录

D2. 三步演练

text
① 删测试集合     drop collection hw16_test(或 UI 删除)
② 从备份恢复     停 milvus 栈 → 还原三目录快照 → 启动
③ 抽检查询       hw16_02_恢复演练抽检查询.py --backend milvus --collection hw16_test
                 + Dify 知识库「命中测试」或 Milvus search

D3. 通过标准


Part E · Cursor:同步失败告警文案

E1. 提示词

text
为 Dify 知识库索引失败写告警模板:值班群、邮件、工单、P1 升级。
必须包含 dataset_id, document_id, celery task_id, langfuse trace_id, stage, error。
输出 Python 脚本 hw16_01_知识同步失败告警文案.py,写入 data/homework16/。

E2. 运行

bash
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 P2

E3. ID 从哪里取

ID来源
document_idDify 知识库文档列表 API / UI
task_id`docker compose logs worker \
trace_idLangfuse Traces(作业3/14);或 ops_trace 队列相关日志

完整程序

文件作用
hw16_01_知识同步失败告警文案.pyIM/邮件/工单/升级模板
hw16_02_恢复演练抽检查询.pyMilvus / Weaviate / ES 恢复后验收

验收清单


相关文档