Dify x SLS 构建高可用生产级 AI 架构

更新时间:
复制 MD 格式

本文介绍如何将 Dify 的工作流运行日志从 PostgreSQL 迁移到阿里云日志服务(SLS)存储,包括接入配置步骤及接入后的日志分析能力。

业务场景

Dify 默认将工作流运行日志存储在 PostgreSQL 中。在规模化生产环境下,这部分日志通常占据了大量的数据库存储空间,容易导致连接池打满、扩容困难,数据库自带的检索能力也难以满足多维分析需求。而工作流日志本质是「写入后只读、字段随版本变化、高吞吐时序」的日志型数据,更适合交给日志系统承载。迁移到 SLS 后,PostgreSQL 可专注核心业务,SLS 则以弹性伸缩、高压缩比分层存储和内置分析引擎,低成本留存并释放日志价值。

方案概述

Dify 将工作流日志的读写抽象为标准 Repository 接口,SLS 通过实现该接口,以插件方式替换默认存储驱动。插件会自动处理 SLS 追加写入与工作流状态流转之间的差异(以多版本方式记录,读取时取最新版本),并在启动时自动同步索引,无需额外适配。

使用限制

  • Dify 版本需高于 v1.12.0。

实施步骤

步骤一:准备 SLS 资源与凭证

  1. 登录日志服务管理控制台,创建 Project。建议选择与业务部署相同的地域。

    说明

    无需手动创建 LogStore 和索引,Dify 启动后插件会自动检测并创建。

  2. 获取具备 SLS 读写权限的 AccessKey ID 和 AccessKey Secret。可以授予 AliyunLogFullAccess 系统策略,或按需配置最小权限。详细的权限配置方法,参见使用RAM进行访问控制。

    最小权限包括:创建/查看 Project、创建/查看 LogStore、创建/更新/查看索引、写日志、查日志。

步骤二:配置 Dify 环境变量

在 Dify 项目的 .env 或 docker-compose.yaml 中修改以下配置项。

修改 Repository 驱动指向 SLS 插件:

CORE_WORKFLOW_EXECUTION_REPOSITORY=extensions.logstore.repositories.logstore_workflow_execution_repository.LogstoreWorkflowExecutionRepository
CORE_WORKFLOW_NODE_EXECUTION_REPOSITORY=extensions.logstore.repositories.logstore_workflow_node_execution_repository.LogstoreWorkflowNodeExecutionRepository
API_WORKFLOW_NODE_EXECUTION_REPOSITORY=extensions.logstore.repositories.logstore_api_workflow_node_execution_repository.LogstoreAPIWorkflowNodeExecutionRepository
API_WORKFLOW_RUN_REPOSITORY=extensions.logstore.repositories.logstore_api_workflow_run_repository.LogstoreAPIWorkflowRunRepository

新增 SLS 连接配置:

ALIYUN_SLS_ACCESS_KEY_ID=your_access_key_id
ALIYUN_SLS_ACCESS_KEY_SECRET=your_access_key_secret
ALIYUN_SLS_ENDPOINT=cn-hangzhou.log.aliyuncs.com # 同地域则建议用内网地址
ALIYUN_SLS_REGION=cn-hangzhou
ALIYUN_SLS_PROJECT_NAME=your_project_name
ALIYUN_SLS_LOGSTORE_TTL=365   # 日志存储天数

参数

说明

ALIYUN_SLS_ACCESS_KEY_ID

具备 SLS 读写权限的 AccessKey ID

ALIYUN_SLS_ACCESS_KEY_SECRET

AccessKey ID 对应的 AccessKey Secret

ALIYUN_SLS_ENDPOINT

SLS 服务入口,格式为 <Region>.log.aliyuncs.com

ALIYUN_SLS_REGION

Project 所在地域,例如 cn-hangzhou

ALIYUN_SLS_PROJECT_NAME

步骤一中创建的 SLS Project 名称

ALIYUN_SLS_LOGSTORE_TTL

日志存储天数,默认 365 天

步骤三:按需配置迁移开关(存量用户)

为便于存量 PostgreSQL 用户平滑升级,插件提供双写与双读两个开关:

LOGSTORE_DUAL_WRITE_ENABLED=false   # 双写,默认关闭
LOGSTORE_DUAL_READ_ENABLED=true     # 双读降级,默认开启

参数

默认值

说明

LOGSTORE_DUAL_WRITE_ENABLED

false

双写机制。设为 true 时,系统将日志同时写入 PostgreSQL 和 SLS,适用于存量用户迁移初期的灰度验证

LOGSTORE_DUAL_READ_ENABLED

true

双读降级机制。设为 true 时,系统优先从 SLS 读取日志,未找到记录时自动降级回 PostgreSQL 读取(覆盖迁移前的历史数据)

说明

全新部署保持默认即可;存量迁移建议先开双写灰度验证,确认无误后再收敛。

步骤四:验证

完成配置后重启 Dify,插件会自动在指定 Project 下创建 Logstore 与索引。运行一个工作流后,在 Dify 控制台日志详情页可查看工作流记录(此时数据来自 SLS),同时 SLS 控制台对应 Logstore 中也能查到写入的日志,即接入成功。接入后 Dify 界面的日志查询与监控图表体验保持不变,底层存储已切换为 SLS。

基于 SLS 的日志分析

接入后除了在 Dify 控制台查看日志,还可直接在 SLS 控制台对工作流日志做更深入的检索、分析、可视化与告警。以下以电商智能客服助手类应用为例。

任意字段高速检索:SLS 支持全文索引和任意键值对组合查询,快速精准检索特定特征的日志。

业务趋势分析(可视化):统计「用户意图识别」节点识别出的意图分类随时间变化的 PV 趋势,辅助运营决策:

* and title: 用户意图识别 and intent
| select json_extract(outputs, '$.intent') as "用户意图",
         date_trunc('minute', __time__) t,
         count(1) as pv
group by "用户意图", t
order by t
limit all

异常诊断(漏斗分析):观察工作流各中间节点的失败比率,定位异常高发环节:

status:succeeded
| select title, count(distinct workflow_run_id) cnt
group by title
order by cnt desc

成本与风险管控(实时告警):配置告警规则统计 LLM 节点 Token 消耗,超阈值时触发钉钉或电话告警。

数据闭环(ETL 与加工):利用数据加工和定时 SQL,对工作流输入输出做清洗、脱敏与标准化,构建持续更新的评估与训练数据集。