ARMS支援通過Python探針對Dify應用進行可觀測,Python探針是阿里雲可觀測產品自研的Python語言的可觀測採集探針,其基於OpenTelemetry標準實現了自動化埋點能力。
步驟一:在容器叢集中部署 Dify 應用
您可以參考基於Dify構建網頁定製化AI問答助手文檔快速搭建一個Dify應用。
為Dify應用所在的ACK叢集安裝探針接入助手(ack-onepilot)、授予 ARMS 資源的存取權限,並開啟應用監控。具體操作,請參見Container Service ACK 和容器計算服務 ACS 通過 ack-onepilot 組件安裝 Python 探針。
步驟二:建立配置項 dify-bootstrap
建立dify啟動指令碼,該指令碼用於下載安裝探針並啟動dify應用。
擷取原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控制台添加配置項。
在Container Service管理主控台的叢集列表頁面進入目的地組群。
在左側導覽列選擇,進入dify-system命名空間,然後單擊建立。
配置項名稱:dify-bootstrap(樣本)
名稱:entrypoint.sh
值:上一步建立的dify指令碼
單擊確定,儲存配置項。
步驟三:編輯 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屬性值的長度,超過指定字元長度的屬性值將會被截斷。
在生命週期地區,輸入啟動執行命令
["/bin/bash","/app/api/docker/entrypoint.sh"]。
在資料卷區域,單擊增加本機存放區。
儲存卷類型:配置項
配置項名稱:bootstrap
掛載源:dify-bootstrap
容器路徑:/app/api/docker

在右上方單擊更新,儲存配置。
等待探針安裝完成後,即可在ARMS控制台的頁面查看監控資料。
重要需確認Dify應用已有資料。
步驟四:監控dify-plugin-daemon
Dify-Plugin-Daemon 是 Dify 的外掛程式管理器,Dify 的 LLM、外掛程式、Agent 策略的執行都依賴 Plugin-Daemon。Go Agent支援監控 Dify-Plugin-Daemon,接入Go監控需修改Dockerfile、重新編譯鏡像後配置環境變數開啟。Dify-Plugin-Daemon 的 Go 探針可以按需為外掛程式運行時掛載 Python 探針,可以通過以下方式接入:
修改Dockerfile檔案重新編譯對應鏡像。
以local.dockerfile為例,修改如下:
不監控Python Plugin
無需監控Python plugin時,Dockerfile修改如下:
FROM golang:1.23-alpine AS builder ARG VERSION=unknown # copy project COPY . /app # set working directory WORKDIR /app # using goproxy if you have network issues # ENV GOPROXY=https://goproxy.cn,direct # download arms instgo RUN wget "http://arms-apm-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/instgo/instgo-linux-amd64" -O instgo RUN chmod 777 instgo # instgo build RUN ./instgo go build \ -ldflags "\ -X 'github.com/langgenius/dify-plugin-daemon/internal/manifest.VersionX=${VERSION}' \ -X 'github.com/langgenius/dify-plugin-daemon/internal/manifest.BuildTimeX=$(date -u +%Y-%m-%dT%H:%M:%S%z)'" \ -o /app/main cmd/server/main.go # copy entrypoint.sh COPY entrypoint.sh /app/entrypoint.sh RUN chmod +x /app/entrypoint.sh FROM ubuntu:24.04 WORKDIR /app # check build args ARG PLATFORM=local # Install python3.12 if PLATFORM is local RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y curl python3.12 python3.12-venv python3.12-dev python3-pip ffmpeg build-essential \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* \ && update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.12 1; # preload tiktoken ENV TIKTOKEN_CACHE_DIR=/app/.tiktoken # Install dify_plugin to speedup the environment setup, test uv and preload tiktoken RUN mv /usr/lib/python3.12/EXTERNALLY-MANAGED /usr/lib/python3.12/EXTERNALLY-MANAGED.bk \ && python3 -m pip install uv \ && uv pip install --system dify_plugin \ && python3 -c "from uv._find_uv import find_uv_bin;print(find_uv_bin());" \ && python3 -c "import tiktoken; encodings = ['o200k_base', 'cl100k_base', 'p50k_base', 'r50k_base', 'p50k_edit', 'gpt2']; [tiktoken.get_encoding(encoding).special_tokens_set for encoding in encodings]" ENV UV_PATH=/usr/local/bin/uv ENV PLATFORM=$PLATFORM ENV GIN_MODE=release COPY --from=builder /app/main /app/entrypoint.sh /app/ # run the server, using sh as the entrypoint to avoid process being the root process # and using bash to recycle resources CMD ["/bin/bash", "-c", "/app/entrypoint.sh"]監控Python Plugin
如果需要監控Python plugin,Dockerfile修改如下:
FROM golang:1.23-alpine AS builder ARG VERSION=unknown # copy project COPY . /app # set working directory WORKDIR /app # using goproxy if you have network issues # ENV GOPROXY=https://goproxy.cn,direct # download arms instgo RUN wget "http://arms-apm-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/instgo/instgo-linux-amd64" -O instgo RUN chmod 777 instgo # instgo build RUN INSTGO_EXTRA_RULES="dify_python" ./instgo go build \ -ldflags "\ -X 'github.com/langgenius/dify-plugin-daemon/internal/manifest.VersionX=${VERSION}' \ -X 'github.com/langgenius/dify-plugin-daemon/internal/manifest.BuildTimeX=$(date -u +%Y-%m-%dT%H:%M:%S%z)'" \ -o /app/main cmd/server/main.go # copy entrypoint.sh COPY entrypoint.sh /app/entrypoint.sh RUN chmod +x /app/entrypoint.sh FROM ubuntu:24.04 WORKDIR /app # check build args ARG PLATFORM=local # Install python3.12 if PLATFORM is local RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y curl python3.12 python3.12-venv python3.12-dev python3-pip ffmpeg build-essential \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* \ && update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.12 1; # preload tiktoken ENV TIKTOKEN_CACHE_DIR=/app/.tiktoken # Install dify_plugin to speedup the environment setup, test uv and preload tiktoken RUN mv /usr/lib/python3.12/EXTERNALLY-MANAGED /usr/lib/python3.12/EXTERNALLY-MANAGED.bk \ && python3 -m pip install uv \ && uv pip install --system dify_plugin \ && python3 -c "from uv._find_uv import find_uv_bin;print(find_uv_bin());" \ && python3 -c "import tiktoken; encodings = ['o200k_base', 'cl100k_base', 'p50k_base', 'r50k_base', 'p50k_edit', 'gpt2']; [tiktoken.get_encoding(encoding).special_tokens_set for encoding in encodings]" ENV UV_PATH=/usr/local/bin/uv ENV PLATFORM=$PLATFORM ENV GIN_MODE=release COPY --from=builder /app/main /app/entrypoint.sh /app/ # run the server, using sh as the entrypoint to avoid process being the root process # and using bash to recycle resources CMD ["/bin/bash", "-c", "/app/entrypoint.sh"]部署dify-plugin-daemon應用並上報監控資料。
容器化部署
在dify-plugin-daemon應用的YAML檔案中將以下
labels添加到spec.template.metadata層級下。labels: aliyun.com/app-language: golang armsPilotAutoEnable: 'on' armsPilotCreateAppName: "dify-daemon-plugin"非容器化部署
部署組件時請添加以下環境變數。
ARMS_LICENSE_KEY: xxx // 帳號對應的ARMS LicenseKey ARMS_REGION_ID: cn-heyuan // 選擇填寫對應的RegionID ARMS_ENABLE: true ARMS_APP_NAME: dify-plugin-daemon您可以通過DescribeTraceLicenseKey OpenAPI擷取LicenseKey。

查看dify-plugin-daemon監控。
在應用列表頁面進入dify-plugin-daemon應用,監控詳情如下:

調用鏈詳情:

(可選)步驟五:監控dify-sandbox
Dify 1.0.0及以上版本引入了dify-sandbox用於管理外掛程式的生命週期和背景工作調用等,如果需要監控該組件,可通過以下方式接入:
修改./build/build_[amd64|arm64].sh檔案。
在檔案中添加instgo下載命令。
下載命令樣本如下,其他地區和架構的下載命令請參見下載 instgo。
wget "http://arms-apm-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/instgo/instgo-linux-amd64" -O instgo chmod 777 instgo在
go build前添加了instgo命令。
以amd64為例,修改樣本如下:
rm -f internal/core/runner/python/python.so rm -f internal/core/runner/nodejs/nodejs.so rm -f /tmp/sandbox-python/python.so rm -f /tmp/sandbox-nodejs/nodejs.so wget "http://arms-apm-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/instgo/instgo-linux-amd64" -O instgo chmod 777 instgo echo "Building Python lib" CGO_ENABLED=1 GOOS=linux GOARCH=amd64 ./instgo go build -o internal/core/runner/python/python.so -buildmode=c-shared -ldflags="-s -w" cmd/lib/python/main.go && echo "Building Nodejs lib" && CGO_ENABLED=1 GOOS=linux GOARCH=amd64 ./instgo go build -o internal/core/runner/nodejs/nodejs.so -buildmode=c-shared -ldflags="-s -w" cmd/lib/nodejs/main.go && echo "Building main" && GOOS=linux GOARCH=amd64 ./instgo go build -o main -ldflags="-s -w" cmd/server/main.go echo "Building env" GOOS=linux GOARCH=amd64 ./instgo go build -o env -ldflags="-s -w" cmd/dependencies/init.go編譯鏡像。
以amd64為例:
docker build -t sandbox:0.2.9 -f docker/amd64/dockerfile .部署dify-sandbox應用並上報監控資料。
容器化部署
在dify-sandbox應用的YAML檔案中將以下
labels添加到spec.template.metadata層級下。labels: aliyun.com/app-language: golang armsPilotAutoEnable: 'on' armsPilotCreateAppName: "dify-sandbox"非容器化部署
部署組件時請添加以下環境變數。
ARMS_LICENSE_KEY: xxx //帳號對應的ARMS LicenseKey ARMS_REGION_ID: cn-heyuan //選擇填寫對應的region ARMS_ENABLE: true ARMS_APP_NAME: dify-sandbox您可以通過DescribeTraceLicenseKey OpenAPI擷取LicenseKey。

查看dify-sandbox監控。
在應用列表頁面進入dify-sandbox應用,監控詳情如下:

調用鏈詳情:

相關文檔
如需指定Python探針版本,請參見如何安裝指定地區與版本的探針。