すべてのプロダクト
Search
ドキュメントセンター

Application Real-Time Monitoring Service:Dify アプリケーションを ARMS Application Monitoring に接続する

最終更新日:Nov 13, 2025

Application Real-Time Monitoring Service (ARMS) を使用すると、Python エージェントを使用して Dify アプリケーションを監視できます。Alibaba Cloud が開発した Python エージェントは、OpenTelemetry 標準に基づく自動イベントトラッキングを提供する Python 用のデータ収集エージェントです。

ステップ 1: コンテナークラスターに Dify アプリケーションをデプロイする

  1. Dify を使用してカスタム AI Q&A アシスタントを構築する」の手順に従って Dify アプリケーションを構築します。

  2. 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 アプリケーションを起動します。

  1. 元の dify スクリプトを取得し、次の変更を加えます。

    1. スクリプトの先頭にエージェントのダウンロードおよびインストールコマンドを追加します。

      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
    2. スクリプトの最後にある起動セクションに、aliyun-instrument 起動コマンドを追加します。

      クリックしてサンプルスクリプト全体を表示

      #!/bin/bash
      
      set -e
      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
      
      mkdir -p logs
      
      if [[ "${MODE}" == "worker" ]]; then
      
        # 利用可能な CPU コア数を取得
        if [ "${CELERY_AUTO_SCALE,,}" = "true" ]; then
          # 指定されていない場合は、MAX_WORKERS を利用可能なコア数に設定
          AVAILABLE_CORES=$(nproc)
          MAX_WORKERS=${CELERY_MAX_WORKERS:-$AVAILABLE_CORES}
          MIN_WORKERS=${CELERY_MIN_WORKERS:-1}
          CONCURRENCY_OPTION="--autoscale=${MAX_WORKERS},${MIN_WORKERS}"
        else
          CONCURRENCY_OPTION="-c ${CELERY_WORKER_AMOUNT:-1}"
        fi
      
        exec celery -A app.celery worker -P ${CELERY_WORKER_CLASS:-gevent} $CONCURRENCY_OPTION --loglevel ${LOG_LEVEL} \
          -Q ${CELERY_QUEUES:-dataset,generation,mail,ops_trace,app_deletion}
      
      else
        if [[ "${DEBUG}" == "true" ]]; then
          exec flask run --host=${DIFY_BIND_ADDRESS:-0.0.0.0} --port=${DIFY_PORT:-5001} --debug
        else
          exec aliyun-instrument gunicorn \
            --bind "${DIFY_BIND_ADDRESS:-0.0.0.0}:${DIFY_PORT:-5001}" \
            --workers ${SERVER_WORKER_AMOUNT:-1} \
            --worker-class ${SERVER_WORKER_CLASS:-gevent} \
            --timeout ${GUNICORN_TIMEOUT:-200} \
            --access-logfile logs/gunicorn_access.log \
            --error-logfile logs/gunicorn_error.log \
            --access-logformat '%(h)s|%(l)s|%(u)s|%(t)s|%(r)s|%(s)s|%(b)s|%(f)s|%(a)s|DURATION:%(L)s' \
            --log-level info \
            app:app
        fi
      fi
  2. ACK コンソールで設定項目を追加します。

    1. Container Service for Kubernetes コンソールにログインし、[クラスターリスト] ページで、対象のクラスターの名前をクリックします。

    2. 左側のナビゲーションウィンドウで、[設定管理] > [設定項目]を選択します。dify-system 名前空間で、[作成] をクリックします。

      • 設定項目名: dify-bootstrap (例)

      • 名前: entrypoint.sh

      • : 前のステップで作成した Dify スクリプト。

    3. [OK] をクリックして設定項目を保存します。

ステップ 3: ack-dify-api を編集する

  1. ターゲットクラスターの [ワークロード] > [ステートレス] ページで、dify-system 名前空間に移動し、ack-dify-api を見つけ、[アクション] 列にある [編集] をクリックします。image.png

  2. [環境変数] セクションで、[追加] をクリックし、次の変数を追加します。

    タイプ

    変数名

    変数

    説明

    カスタム

    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 属性値の長さが制限されます。指定された文字長を超える属性値は切り捨てられます。

  3. [ライフサイクル] セクションで、[起動コマンド] として ["/bin/bash","/app/api/docker/entrypoint.sh"] を入力します。image.png

  4. [ボリューム] セクションで、[ローカルストレージの追加] をクリックします。

    • ボリュームタイプ: 設定項目

    • 設定項目名: bootstrap

    • マウントソース: dify-bootstrap

    • コンテナパス: /app/api/docker

    image.png

  5. 右上隅にある [更新] をクリックして構成を保存します。

    エージェントがインストールされた後、ARMS コンソール[LLM アプリケーション監視] > [アプリケーションリスト] ページでモニタリングデータを表示できます。詳細については、「モニタリングデータを表示する」をご参照ください。

    重要

    Dify アプリケーションがデータを生成していることを確認してください。

ステップ 4: dify-plugin-daemon を監視する

Dify-Plugin-Daemon は Dify のプラグインマネージャーであり、Dify の大規模言語モデル (LLM)、プラグイン、および Agent ポリシーの実行を担当します。Go エージェントを使用して Dify-Plugin-Daemon を監視できます。Go 監視を有効にするには、Dockerfile を変更し、イメージを再コンパイルし、環境変数を構成する必要があります。Dify-Plugin-Daemon 用の Go エージェントは、必要に応じてプラグインランタイム用の Python エージェントをマウントすることもできます。エージェントを接続するには、次の手順を実行します。

  1. 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"]
  2. 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-daemon

    DescribeTraceLicenseKey OpenAPI 操作を呼び出して LicenseKey を取得します。

    2025-08-11_16-43-22

  3. dify-plugin-daemon のモニタリングデータを表示する

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

    image.png

    トレースの詳細:

    2025-08-11_18-23-04

(オプション) ステップ 5: dify-sandbox をモニターする

Dify 1.0.0 以降のバージョンでは、プラグインのライフサイクルとバックグラウンドタスクの呼び出しを管理するために dify-sandbox が導入されています。このコンポーネントを監視するには、次の手順を実行します。

  1. ./build/build_[amd64|arm64].sh ファイルを変更します。

    1. ファイルに instgo ダウンロードコマンドを追加します。

      以下はサンプルダウンロードコマンドです。他のリージョンおよびアーキテクチャのダウンロードコマンドについては、「instgo をダウンロードする」をご参照ください。

      wget "http://arms-apm-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/instgo/instgo-linux-amd64" -O instgo
      chmod 777 instgo
    2. 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 "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
  2. イメージをコンパイルします。

    たとえば、amd64 の場合:

    docker build -t sandbox:0.2.9  -f docker/amd64/dockerfile .
  3. 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-sandbox

    DescribeTraceLicenseKey OpenAPI 操作を呼び出して LicenseKey を取得します。

    2025-08-19_17-30-58

  4. dify-sandbox のモニタリングデータを表示する

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

    image

    トレースの詳細:

    2025-08-19_18-25-44

関連ドキュメント

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