作业15 · 值班 Runbook(一页)— Dify Worker 宕机 / 队列堆积
适用:Docker Compose 部署的 Dify(Celery worker + Redis)。实验仅在隔离实例;生产按本页判级处理。
0. 先判级(30 秒)
| 级别 | 现象 | 动作 |
|---|---|---|
| P1 | 大面积异步任务失败、索引/工作流长期卡住 | 查 worker 容器 + Redis 队列 + 立刻恢复 worker |
| P2 | 部分知识库索引慢、Langfuse 延迟 | 看 dataset / ops_trace 队列深度,扩 worker 或修单点 |
| P3 | 偶发慢 | 记录时间点,观察 15 分钟 |
易误判:curl /health 或 nginx 200 不代表 worker 正常 — API 与 Worker 是不同容器。
快速探测:
# 换成本环境 compose 项目名
docker compose --project-name dify-hw15 ps worker
docker compose --project-name dify-hw15 logs worker --tail 30
# Redis 队列(在 redis 容器内)
docker compose --project-name dify-hw15 exec redis \
redis-cli -a "${REDIS_PASSWORD:-difyai123456}" --no-auth-warning LLEN dataset1. Worker 容器不在 / 反复重启
含义:Celery 消费者缺失,异步任务无人处理。
用户可见现象:
- 知识库文档状态长期 「索引中」
- 新上传文件永不完成
- Langfuse 无新 Trace 或严重延迟(
ops_trace队列) - 删除数据集/应用卡在「处理中」
- 已索引知识库的问答可能仍正常(同步链路未断)
处理顺序:
docker compose ps worker— 确认 Exit / Restartingdocker compose logs worker --tail 100— OOM、DB 连不上、Weaviate 不可达- 立即:
docker compose start worker或up -d worker(隔离/生产分别用对应 project) - 观察
LLEN dataset是否下降;UI 索引是否变绿 - 若反复崩溃:查 PG/Redis/Weaviate 健康;对照最近
.env/ 镜像变更
恢复标准:worker 稳定运行 5 分钟,dataset 队列 LLEN 趋近 0,新上传文档可在合理时间内索引完成。
2. Worker 在跑但队列仍涨
含义:消费速度 < 生产速度,或 worker 假活(blocked / 死锁)。
处理顺序:
- 多队列:
LLEN dataset、LLEN ops_trace、LLEN mail docker compose exec worker celery -A app.celery inspect active(版本不同命令可能略有差异)- 降载:暂停大批量导入、暂停非核心 re-index
- 扩容:增加 worker 副本(官方 compose 默单 worker;生产需 orchestrator 水平扩展)
- 查向量库/embedding 上游是否超时(worker 任务卡住)
3. 与 API / 数据库故障的区分
| 组件 | 典型现象 |
|---|---|
| API 挂了 | 页面打不开、对话 5xx、登录失败 |
| PostgreSQL 挂了 | 全站 5xx,worker 也连库失败 |
| Redis 挂了 | 异步任务无法入队/消费,缓存 miss 增多 |
| Weaviate 挂了 | 索引/检索报错;worker 日志含向量写入失败 |
| 仅 Worker 挂了 | 页面正常、同步对话多数正常、异步全停 |
4. 隔离环境演练命令(作业15)
cd /opt/dify-hw15
docker compose --project-name dify-hw15 stop worker
# …观察 UI 与 Redis…
docker compose --project-name dify-hw15 start worker禁止在未授权的生产栈执行 stop worker。
5. 备份与恢复提醒
Worker 故障不丢数据(任务在 Redis 队列里等消费)。若需灾备,按备份清单备:
- PostgreSQL
volumes/app/storage- 向量卷(weaviate / milvus / pgvector)
见 作业15_Dify备份清单_cursor.md 或 hw15_01_备份清单.py 生成物。
6. 值班话术(可复制)
【Dify Worker 告警】时间:____ 环境:生产 / 隔离 hw15
现象:索引卡住 / Langfuse 无 trace / 队列 LLEN=____
已做:重启 worker / 查日志 / 查 Weaviate(选填)
需要:____(扩容 worker / DBA / 回滚镜像)7. 升级与记录
- P1 超过 15 分钟未恢复 → 升级平台负责人
- 记录:开始时间、队列峰值、根因、是否数据丢失(通常无)
- 事后:补监控 — worker 容器存活 +
dataset队列深度告警