Application Real-Time Monitoring Service (ARMS) を使用すると、Python エージェントを使用して Dify アプリケーションを監視できます。Alibaba Cloud が開発した Python エージェントは、OpenTelemetry 標準に基づく自動イベントトラッキングを提供する Python 用のデータ収集エージェントです。
ステップ 1: コンテナークラスターに Dify アプリケーションをデプロイする
「Dify を使用してカスタム AI Q&A アシスタントを構築する」の手順に従って Dify アプリケーションを構築します。
Dify アプリケーションをホストする Container Service for Kubernetes (ACK) クラスターに、エージェントインストールアシスタント (ack-onepilot) をインストールし、ARMS リソースへのアクセス権限を付与し、アプリケーション監視を有効にします。詳細については、「ack-onepilot コンポーネントを使用して Container Service for Kubernetes (ACK) および Container Compute Service (ACS) 用の Python エージェントをインストールする」をご参照ください。
ステップ 2: 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 for Kubernetes コンソールにログインし、[クラスターリスト] ページで、対象のクラスターの名前をクリックします。
左側のナビゲーションウィンドウで、を選択します。dify-system 名前空間で、[作成] をクリックします。
設定項目名: dify-bootstrap (例)
名前: entrypoint.sh
値: 前のステップで作成した Dify スクリプト。
[OK] をクリックして設定項目を保存します。
ステップ 3: ack-dify-api を編集する
ターゲットクラスターの ページで、dify-system 名前空間に移動し、ack-dify-api を見つけ、[アクション] 列にある [編集] をクリックします。

[環境変数] セクションで、[追加] をクリックし、次の変数を追加します。
タイプ
変数名
変数
説明
カスタム
GEVENT_ENABLE
true
必須。
カスタム
OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT
true
入出力コンテンツを収集します。
デフォルト値: true。収集はデフォルトで有効になっています。
無効にすると、ユーザーがクエリを送信したときに、エージェントはモデル、ツール、ナレッジベースの入出力などのフィールドのサイズのみを収集し、これらのフィールドのコンテンツは収集しません。
カスタム
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 アプリケーションがデータを生成していることを確認してください。
ステップ 4: dify-plugin-daemon を監視する
Dify-Plugin-Daemon は Dify のプラグインマネージャーであり、Dify の大規模言語モデル (LLM)、プラグイン、および Agent ポリシーの実行を担当します。Go エージェントを使用して Dify-Plugin-Daemon を監視できます。Go 監視を有効にするには、Dockerfile を変更し、イメージを再コンパイルし、環境変数を構成する必要があります。Dify-Plugin-Daemon 用の Go エージェントは、必要に応じてプラグインランタイム用の Python エージェントをマウントすることもできます。エージェントを接続するには、次の手順を実行します。
Dockerfile を変更し、対応するイメージを再コンパイルします。
たとえば、local.dockerfile に次の変更を加えます。
Python プラグインを監視しない
Python プラグインを監視する必要がない場合は、Dockerfile を次のように変更します。
FROM golang:1.23-alpine AS builder ARG VERSION=unknown # プロジェクトをコピーします。 COPY . /app # 作業ディレクトリを設定します。 WORKDIR /app # ネットワークに問題がある場合は goproxy を使用します。 # ENV GOPROXY=https://goproxy.cn,direct # 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 でビルドします。 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 # entrypoint.sh をコピーします。 COPY entrypoint.sh /app/entrypoint.sh RUN chmod +x /app/entrypoint.sh FROM ubuntu:24.04 WORKDIR /app # ビルド引数を確認します。 ARG PLATFORM=local # PLATFORM が local に設定されている場合は Python 3.12 をインストールします。 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; # tiktoken をプリロードします。 ENV TIKTOKEN_CACHE_DIR=/app/.tiktoken # dify_plugin をインストールして、環境設定を高速化し、uv をテストし、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/ # サーバーを実行します。プロセスがルートプロセスになるのを防ぐために、エントリポイントとして sh を使用します。 # bash を使用してリソースをリサイクルします。 CMD ["/bin/bash", "-c", "/app/entrypoint.sh"]Python プラグインを監視する
Python プラグインを監視するには、Dockerfile を次のように変更します。
FROM golang:1.23-alpine AS builder ARG VERSION=unknown # プロジェクトをコピーします。 COPY . /app # 作業ディレクトリを設定します。 WORKDIR /app # ネットワークに問題がある場合は goproxy を使用します。 # ENV GOPROXY=https://goproxy.cn,direct # 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 でビルドします。 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 # entrypoint.sh をコピーします。 COPY entrypoint.sh /app/entrypoint.sh RUN chmod +x /app/entrypoint.sh FROM ubuntu:24.04 WORKDIR /app # ビルド引数を確認します。 ARG PLATFORM=local # PLATFORM が local に設定されている場合は Python 3.12 をインストールします。 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; # tiktoken をプリロードします。 ENV TIKTOKEN_CACHE_DIR=/app/.tiktoken # dify_plugin をインストールして、環境設定を高速化し、uv をテストし、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/ # サーバーを実行します。プロセスがルートプロセスになるのを防ぐために、エントリポイントとして sh を使用します。 # bash を使用してリソースをリサイクルします。 CMD ["/bin/bash", "-c", "/app/entrypoint.sh"]dify-plugin-daemon アプリケーションをデプロイし、モニタリングデータをレポートします。
コンテナー化されたデプロイメント
dify-plugin-daemon アプリケーションの YAML ファイルで、spec.template.metadata パスの下に次の
labelsを追加します。labels: aliyun.com/app-language: golang armsPilotAutoEnable: 'on' armsPilotCreateAppName: "dify-daemon-plugin"コンテナー化されていないデプロイメント
コンポーネントをデプロイするときに、次の環境変数を追加します。
ARMS_LICENSE_KEY: xxx // アカウントの ARMS LicenseKey ARMS_REGION_ID: cn-heyuan // リージョンの ID ARMS_ENABLE: true ARMS_APP_NAME: dify-plugin-daemonDescribeTraceLicenseKey OpenAPI 操作を呼び出して LicenseKey を取得します。

dify-plugin-daemon のモニタリングデータを表示する
[アプリケーション一覧] ページで dify-plugin-daemon アプリケーションに移動すると、モニタリング詳細が以下のように表示されます。

トレースの詳細:

(オプション) ステップ 5: 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 instgogo 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 "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 "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 "main をビルドしています" && GOOS=linux GOARCH=amd64 ./instgo go build -o main -ldflags="-s -w" cmd/server/main.go echo "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 ファイルで、spec.template.metadata パスの下に次の
labelsを追加します。labels: aliyun.com/app-language: golang armsPilotAutoEnable: 'on' armsPilotCreateAppName: "dify-sandbox"コンテナー化されていないデプロイメント
コンポーネントをデプロイするときに、次の環境変数を追加します。
ARMS_LICENSE_KEY: xxx // アカウントの ARMS LicenseKey ARMS_REGION_ID: cn-heyuan // リージョンの ID ARMS_ENABLE: true ARMS_APP_NAME: dify-sandboxDescribeTraceLicenseKey OpenAPI 操作を呼び出して LicenseKey を取得します。

dify-sandbox のモニタリングデータを表示する
[アプリケーション一覧] ページで、dify-sandbox アプリケーションに移動します。モニタリング詳細が次のように表示されます。

トレースの詳細:

関連ドキュメント
Python エージェントのバージョンを指定する方法の詳細については、「特定のリージョンに特定のバージョンのエージェントをインストールする方法」をご参照ください。