必须建立可视化监控与日志分析体系:接入dify原生指标至prometheus,用grafana导入id为18742的仪表盘展示api速率、延迟、检索空结果率及token消耗;通过loki logql提取“重试”“timeout”等语义信号告警;借助trace_id关联多服务日志实现全链路定位。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

要让Dify应用在生产环境中稳定运行、快速响应故障、持续优化性能,必须建立一套可落地的可视化监控与日志分析体系,而不是依赖人工翻查零散日志或等待用户投诉才被动响应。
接入Dify原生指标并配置Prometheus抓取
自托管Dify默认在/metrics路径暴露结构化指标,无需额外埋点。Prometheus只需添加对应job即可自动采集。
打开Prometheus配置文件prometheus.yml,在scrape_configs下新增如下job:
```yaml
- job_name: 'dify-api'
static_configs:
- targets: ['dify-api:5001']
metrics_path: '/metrics'
```
确保Dify服务容器中已通过环境变量或注解暴露prometheus.io/scrape=true(K8s场景)或直接监听0.0.0.0:5001(Docker Compose场景)。【targets地址必须与Dify服务实际网络可达地址一致,填错将导致指标完全丢失】
重启Prometheus后,在http://<prometheus-host>:9090/targets</prometheus-host>页面确认该job状态为UP。
用Grafana构建核心监控仪表盘
导入预置Dify监控模板是最高效的方式。Grafana官方社区ID为18742的仪表盘已适配Dify v1.3+所有关键指标。
方法一:通过Grafana UI导入
① 进入Grafana → Dashboards → Import → 输入18742 → Load;
② 在Prometheus数据源下拉框中选择已配置的Dify指标数据源;
③ 点击Import完成加载。
方法二:命令行批量部署(适用于CI/CD)
使用grafana-cli工具执行:grafana-cli dashboard import 18742 --dashboard-url=https://grafana.com/grafana/dashboards/18742 --org-id=1。
该仪表盘默认展示四大视图:API请求速率与错误率热力图、P95响应延迟趋势、知识库检索空结果率、LLM Token消耗TOP5模型。每个图表均绑定service和app_id标签,支持下钻到具体应用维度。
从日志中提取对话质量信号并告警
仅看延迟和错误码无法判断AI回复是否真正有用。需解析日志中的语义信号,例如用户是否触发了“重试”“不满意”等关键词,或对话轮次异常增长。
在Loki中编写LogQL查询,定位低质对话:
{service="api-server"} | json | status_code == "200" | duration > 8000 | line_format "{{.message}}"
这条查询找出所有耗时超8秒但返回成功的请求,再结合message字段内容判断是否含“timeout”“fallback”等提示词——这往往意味着RAG流程卡在向量检索或重排序环节。
将该查询保存为Loki告警规则,当15分钟内命中次数≥3时,触发企业微信/钉钉通知。注意:告警阈值必须基于历史基线设定,新上线应用若直接套用成熟业务的8秒阈值,会引发大量误报。
关联Trace ID实现全链路问题定位
当某次API调用失败时,单看api-server日志只能知道“调用LLM失败”,但无法确认是模型网关超时、还是worker任务队列积压、抑或向量数据库连接中断。
第一步:从API日志中复制trace_id字段值,例如trace_id="trc_9a2f4b8c1d";
第二步:在Loki中执行:{service=~"api-server|worker|model-gateway|vector-db"} |~ `trc_9a2f4b8c1d`;
第三步:按时间戳排序查看完整调用链,重点检查各服务日志中status是否为error、duration_ms是否突增、是否有connection refused类网络错误。
这一步操作起来很简单,直接把trace_id粘贴进Loki搜索框就行。但前提是所有服务都已集成OpenTelemetry且统一注入了同一trace_id——如果worker服务没配置OTel SDK,那它就不会出现在查询结果里,链路就断了。











