大模型可观测支持通过Python探针对Dify应用进行可观测,Python探针是阿里云可观测产品自研的Python语言的可观测采集探针,其基于OpenTelemetry标准实现了自动化埋点能力。
步骤一:在容器集群中部署 Dify 应用
您可以参考基于Dify构建网页定制化AI问答助手文档快速搭建一个Dify应用。
步骤二:安装探针接入助手(ack-onepilot)
登录容器服务管理控制台,在集群列表页面单击目标集群名称。
在左侧导航栏单击组件管理,然后在右上角通过关键字搜索ack-onepilot。
重要ack-onepilot版本需在5.1.0或以上,该版本的ack-onepilot组件在后续为应用开启监控时将会自动为您执行Python探针包的下载与注入动作,您无需手动修改启动命令即可获得完全无侵入的Python应用监控接入体验。5.1.0版本ack-onepilot组件正在灰度中,如需使用请联系钉钉答疑群(群号:35568145)协助开通。
在ack-onepilot卡片上单击安装。
说明ack-onepilot组件默认支持1000个pod规模,集群pod每超过1000个,ack-onepilot资源对应的CPU请增加0.5核、内存请增加512 MB。
在弹出的页面中可以配置相关的参数,建议使用默认值,单击确认。
说明安装完成后,您可以在组件管理页面升级、配置或卸载ack-onepilot组件。
步骤三:授予访问权限
ACK托管集群
如果ACK托管集群中不存在ARMS Addon Token,请执行以下操作手动为集群授予ARMS资源的访问权限。如果已经存在ARMS Addon Token,请跳转至步骤六。
集群存在ARMS Addon Token时,ARMS会进行免密授权。Kubernetes托管版集群默认存在ARMS Addon Token,但对于部分早期创建的Kubernetes托管版集群,可能会存在没有ARMS Addon Token的情况,因此,对于Kubernetes托管版集群,建议首先检查ARMS Addon Token是否存在。若不存在,需进行手动授权。
专有版集群/注册集群
如果需要监控ACK专有版集群和ACK One注册集群应用,请确认对应的阿里云账号已包含AliyunARMSFullAccess和AliyunSTSAssumeRoleAccess权限。添加权限的操作,请参见为RAM用户授权。
安装ack-onepilot组件后,还需要在ack-onepilot中填写有ARMS权限的阿里云账号AK/SK。
方式一:Helm中直接填写AK/SK
登录容器服务管理控制台,在左侧导航栏选择集群列表。
在集群列表页面,单击目标集群名称,然后在左侧导航栏选择
页面,单击ack-onepilot组件右侧的更新。将
accessKey
和accessKeySecret
替换为当前账号的AccessKey,然后单击确定。说明获取AccessKey的操作,请参见创建AccessKey。
为降低AccessKey泄露的风险,阿里云账号(主账号)的AccessKey Secret只在创建时显示,后续不支持查看,请妥善保管。
重启应用Deployment。
方式二:通过K8s Secret引入AK/SK
登录容器服务管理控制台,在左侧导航栏选择集群列表。
在集群列表页面,单击目标集群名称,然后在左侧导航栏选择
。选择ack-onepilot命名空间,然后创建Secret,添加AK/SK信息。
说明获取AccessKey的操作,请参见创建AccessKey。
为降低AccessKey泄露的风险,阿里云账号(主账号)的AccessKey Secret只在创建时显示,后续不支持查看,请妥善保管。
在左侧导航栏选择
,单击ack-onepilot组件(一般在ack-onepilot命名空间下,名称为ack-onepilot-ack-onepilot)。在ack-onepilot-ack-onepilot页面右上角单击编辑,然后在环境变量区域添加
ONE_PILOT_ACCESSKEY
和ONE_PILOT_ACCESSKEY_SECRET
,通过保密字典引用的方式替换为Secret中保存的值,单击确定。
ASK/ECI集群
如果需监控ACK Serverless集群或对接了ECI的集群应用,请在云资源访问授权页面完成授权,然后重启ack-onepilot组件下的所有Pod。
(可选)步骤四:修改dify启动脚本
对于5.1.0及以上版本的ack-onepilot组件,在后续为应用开启监控时将会自动为您执行Python探针包的下载与注入动作,您无需手动修改启动命令即可获得完全无侵入的Python应用监控接入体验。
获取原dify脚本,并进行以下修改:
脚本开头添加探针下载和安装命令。
python3 -m ensurepip --upgrade pip3 config set global.index-url https://mirrors.aliyun.com/pypi/simple/ && pip3 config set install.trusted-host mirrors.aliyun.com pip3 install aliyun-bootstrap && aliyun-bootstrap -a install
脚本最后启动部分添加
aliyun-instrument
启动命令。
在ACK控制台添加配置项。
在容器服务管理控制台的集群列表页面进入目标集群。
在左侧导航栏选择
,进入dify-system命名空间,然后单击创建。配置项名称:dify-bootstrap(示例)
名称:entrypoint.sh
值:上一步创建的dify脚本
单击确定,保存配置项。
步骤五:为Dify应用开启监控
登录容器服务管理控制台,在左侧导航栏选择集群列表。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在无状态页面的ack-dify-api应用右侧选择
。在YAML文件中将以下
labels
添加到spec.template.metadata层级下。labels: aliyun.com/app-language: python # Python应用必填,标明此应用是Python应用。 armsPilotAutoEnable: 'on' armsPilotCreateAppName: "deployment-name" # 应用在控制台的展示名称。 armsPilotAppWorkspace: "workspace" # 替换为当前workspace名称。
重要5.1.0及以上版本的ack-onepilot组件将会自动为您执行Python探针包的下载与注入动作。如果您不希望使用Python的完全无侵入注入能力,可以通过以下label关闭:
labels: armsAutoInstrumentationEnable: "off" #关闭Python应用的完全无侵入注入能力
单击更新。
步骤六:编辑 ack-dify-api 配置环境变量
在目标集群的
页面进入dify-system命名空间,然后在ack-dify-api右侧操作列单击编辑。在环境变量区域单击新增,添加以下内容。
类型
变量名称
变量
变量说明
自定义
GEVENT_ENABLE
true
必填。
自定义
OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT
true
输入/输出内容采集。
默认值:true,默认开启采集。
关闭后的效果:用户query时,模型、工具、知识库的input/output等详情字段只采集字段大小,不采集字段内容。
自定义
PROFILER_GENAI_SPLITAPP_ENABLE
false
大模型应用拆分。
默认值: false,默认不做应用拆分。
开启后的效果:上报的数据拆分到LLM子应用,每个大模型应用(如Dify Workflow/Agent/Chat App)对应一个ARMS应用。
自定义
OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT
<integer_value>
内容长度采集限制,请将
<integer_value>
替换为希望限制的字符长度大小整数值。默认值:不设置,默认没有限制。
开启后的效果:限制上报的Span属性值的长度,超过指定字符长度的属性值将会被截断。
说明Python探针包的自动下载以及注入动作将会通过一个初始化容器来执行,初始化容器的执行在默认的资源设定下可能会占用约10s的时间,该初始化容器默认会消耗0.5c 250MB的资源(初始化结束后即释放)。您可以通过以下环境变量来调整初始化容器的资源配额以调整初始化容器的执行速度:
PYTHON_INIT_RESOURCE_REQUESTS_CPU:Python应用初始化容器的CPU Request值,示例值:500m。
PYTHON_INIT_RESOURCE_REQUESTS_MEM:Python应用初始化容器的内存 Request值,示例值:250Mi。
PYTHON_INIT_RESOURCE_LIMIT_CPU:Python应用初始化容器的CPU Limit值,示例值:1000m。
PYTHON_INIT_RESOURCE_LIMIT_MEM:Python应用初始化容器的CPU Limit值,示例值:500Mi。
(可选)如果您未使用ack-onepilot组件的完全无侵入注入能力,还需配置以下内容。
在生命周期区域,输入启动执行命令
["/bin/bash","/app/api/docker/entrypoint.sh"]
。在数据卷区域,单击增加本地存储。
存储卷类型:配置项
配置项名称:bootstrap
挂载源:dify-bootstrap
容器路径:/app/api/docker
在右上角单击更新,保存配置。