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

Container Service for Kubernetes:Python アプリケーションの監視

最終更新日:Nov 09, 2025

Alibaba Cloud Container Service for Kubernetes (ACK) クラスターにデプロイされた Python アプリケーションのパフォーマンスを監視できます。これらのアプリケーションには、Django、Flask、FastAPI などのフレームワークで構築された Web アプリケーションや、LlamaIndex や Langchain で開発された人工知能 (AI) または大規模言語モデル (LLM) アプリケーションが含まれます。Application Real-Time Monitoring Service (ARMS) を使用するには、ack-onepilot コンポーネントをインストールし、Dockerfile を変更します。ARMS は、アプリケーションのトポロジー、トレース分析、API 呼び出し分析、異常検出、大規模モデルのインタラクションの詳細なトレースなど、アプリケーションパフォーマンス管理機能を提供します。

前提条件

  • 名前空間が作成されていること。詳細については、「名前空間とリソースクォータの管理」をご参照ください。この例では、arms-demo という名前の名前空間が使用されます。

  • Python ランタイムがバージョン 3.8 以降であること。

    ARMS は Python 3.8 以降と互換性があります。それより前のバージョンを使用すると、接続の問題が発生する可能性があります。

  • ARMS が有効化されていること。

    ARMS は Alibaba Cloud のアプリケーションパフォーマンス管理 (APM) サービスです。ARMS を使用したアプリケーション監視の詳細については、「Application Real-Time Monitoring Service とは」および「アプリケーション監視とは」をご参照ください。

ステップ 1: アプリケーション監視のために ack-onepilot コンポーネントをインストールする

重要
  1. ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。

  2. クラスター ページで、管理するクラスターを見つけてその名前をクリックします。左側のナビゲーションウィンドウで、[アドオン] をクリックします。

  3. [ログとモニタリング] セクションで [ack-onepilot] を見つけ、[インストール] をクリックします。表示されるダイアログボックスで、必要に応じてパラメーターを設定します。デフォルト値を使用することをお勧めします。その後、[OK] をクリックします。

    説明

    ack-onepilot のバージョンが 3.2.4 以降であることを確認してください。デフォルトでは、ack-onepilot コンポーネントは 1,000 個の Pod をサポートします。この制限を超える 1,000 Pod ごとに、ack-onepilot の CPU リソースを 0.5 コア、メモリリソースを 512 MB 増やしてください。

ステップ 2: ARMS にリソースへのアクセスを権限付与する

  • addon.arms.token がない ACK クラスターにデプロイされたアプリケーションを監視するには、次の操作を実行して ACK クラスターに ARMS へのアクセスを権限付与します。addon.arms.token が既に存在する場合、追加の権限付与は必要ありません。

    説明

    ACK クラスターでは、addon.arms.token により、ARMS はパスワードなしの権限付与を自動的に実行できます。通常、ACK マネージドクラスター にはデフォルトで addon.arms.token があります。ただし、以前に作成された一部の ACK マネージドクラスター には addon.arms.token が含まれていない場合があります。

    1. クラスターに addon.arms.token があるかどうかを確認します。

      クラスター内の addon.arms.token シークレットを確認する

      1. ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。

      2. クラスター ページで、変更するクラスターの名前をクリックします。左側のナビゲーションウィンドウで、[設定] > [シークレット] を選択します。

      3. ページの上部で、[名前空間] ドロップダウンリストから [kube-system] を選択し、addon.arms.token が存在するかどうかを確認します。

    2. addon.arms.token が存在しない場合は、次の手順を実行して、クラスターが ARMS リソースにアクセスすることを手動で権限付与します。

      1. ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。

      2. クラスター ページで、ターゲットクラスターを見つけてその名前をクリックします。左側のナビゲーションウィンドウで、クラスター情報 をクリックします。

      3. [基本情報] タブをクリックします。[クラスターリソース] セクションで、[ワーカー RAM ロール] の右側にあるリンクをクリックします。

      4. [権限] タブで、[権限を付与] をクリックします。

      5. AliyunARMSFullAccess ポリシーを選択し、[OK] をクリックします。

  • Elastic Container Instance に接続されている ACK マネージドクラスター にデプロイされたアプリケーションを監視するには、RAM クイック権限付与ページに移動して権限付与を完了します。その後、ack-onepilot 用に作成された Pod を再起動します。

ステップ 3: ARMS Python エージェントを Dockerfile に統合する

Dockerfile を変更して、ARMS Python エージェントを Python アプリケーションに統合し、アプリケーションを起動します。

  1. Python Package Index (PyPI) リポジトリからエージェントインストーラーをダウンロードします。

    pip3 install aliyun-bootstrap
  2. aliyun-bootstrap を使用してエージェントをインストールします。

    # Alibaba Cloud アカウントのリージョン ID。
    ARMS_REGION_ID=xxx aliyun-bootstrap -a install
    説明

    特定のバージョンの Python エージェントをインストールするには、次のコマンドを実行します。

    # ${version} を実際のバージョン番号に置き換えます。
    aliyun-bootstrap -a install -v ${version}

    Python エージェントのすべてのリリースバージョンに関する詳細については、「Python エージェントのリリースノート」をご参照ください。

  3. ARMS Python エージェントを使用してアプリケーションを起動します。

    aliyun-instrument python app.py
  4. イメージをビルドします。

次のコードは、Dockerfile の完全な例です。

    変更前の Dockerfile

    # Python 3.10 ベースイメージを使用します。
    FROM docker.m.daocloud.io/python:3.10
    
    # 作業ディレクトリを設定します。
    WORKDIR /app
    
    # requirements.txt ファイルを作業ディレクトリにコピーします。
    COPY requirements.txt .
    
    # pip を使用して依存関係をインストールします。
    RUN pip install --no-cache-dir -r requirements.txt
    
    COPY ./app.py /app/app.py
    # コンテナーのポート 8000 を公開します。
    EXPOSE 8000
    CMD ["python","app.py"]

    変更後の Dockerfile

    # 公式の Python 3.10 ベースイメージを使用します。
    FROM docker.m.daocloud.io/python:3.10
    
    # 作業ディレクトリを設定します。
    WORKDIR /app
    
    # requirements.txt ファイルを作業ディレクトリにコピーします。
    COPY requirements.txt .
    
    # pip を使用して依存関係をインストールします。
    RUN pip install --no-cache-dir -r requirements.txt
    #########################Aliyun Python エージェントをインストールします###############################
    # Alibaba Cloud アカウントのリージョン ID。
    RUN pip3 install aliyun-bootstrap && ARMS_REGION_ID=xxx aliyun-bootstrap -a install 
    ##########################################################
    
    COPY ./app.py /app/app.py
    
    
    # コンテナーのポート 8000 を公開します。
    EXPOSE 8000
    #########################################################
    CMD ["aliyun-instrument","python","app.py"]

ステップ 4: Python アプリケーションの ARMS アプリケーション監視を有効にする

  1. ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。

  2. クラスター ページで、管理するクラスターを見つけてその名前をクリックします。左側のナビゲーションウィンドウで、ワークロード > 展開 を選択します。

  3. [ステートレス] ページで、ターゲットアプリケーションの image > [YAML の編集] をクリックします。

  4. YAML ファイルで、`spec.template.metadata` の下に次の labels を追加します。

    labels:
      aliyun.com/app-language: python # Python アプリケーションに必須です。これが Python アプリケーションであることを指定します。
      armsPilotAutoEnable: 'on'
      armsPilotCreateAppName: "deployment-name"    # ARMS でのアプリケーションの表示名。
    重要

    インストールした ack-onepilot コンポーネントのバージョンが 5.0.0 より後の場合、このステップでコンポーネントが Python エージェントパッケージを自動的にダウンロードして挿入します。これにより、完全に非侵入型のインストールが実現します。この機能を使用したくない場合、またはコンテナーに Python エージェントを手動でインストール済みの場合は、次のラベルを使用して Python の非侵入型挿入機能を無効にすることをお勧めします。

    labels:
      aliyun.com/app-language: python # Python アプリケーションに必須です。これが Python アプリケーションであることを指定します。
      armsPilotAutoEnable: 'on'
      armsPilotCreateAppName: "deployment-name"    # ARMS でのアプリケーションの表示名。
      armsAutoInstrumentationEnable: "off"  # Python アプリケーションの非侵入型挿入機能を無効にします。

    image

    次のコードは、ステートレスアプリケーション (Deployment) を作成し、ARMS アプリケーション監視を有効にするための完全な YAML テンプレートです。

    完全な YAML テンプレートを表示するには展開してください

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        app: arms-python-client
      name: arms-python-client
      namespace: arms-demo
    spec:
      progressDeadlineSeconds: 600
      replicas: 1
      revisionHistoryLimit: 10
      selector:
        matchLabels:
          app: arms-python-client
      strategy:
        rollingUpdate:
          maxSurge: 25%
          maxUnavailable: 25%
        type: RollingUpdate
      template:
        metadata:
          labels:
            app: arms-python-client
            aliyun.com/app-language: python # Python アプリケーションに必須です。このラベルは、アプリケーションが Python アプリケーションであることを示します。
            armsPilotAutoEnable: 'on'
            armsPilotCreateAppName: "arms-python-client"    # ARMS でのアプリケーションの表示名。
        spec:
          containers:
            - image: registry.cn-hangzhou.aliyuncs.com/arms-default/python-agent:arms-python-client
              imagePullPolicy: Always
              name: client
              resources:
                requests:
                  cpu: 250m
                  memory: 300Mi
              terminationMessagePath: /dev/termination-log
              terminationMessagePolicy: File
          dnsPolicy: ClusterFirst
          restartPolicy: Always
          schedulerName: default-scheduler
          securityContext: {}
          terminationGracePeriodSeconds: 30
    
    ---
    
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        app: arms-python-server
      name: arms-python-server
      namespace: arms-demo
    spec:
      progressDeadlineSeconds: 600
      replicas: 1
      revisionHistoryLimit: 10
      selector:
        matchLabels:
          app: arms-python-server
      strategy:
        rollingUpdate:
          maxSurge: 25%
          maxUnavailable: 25%
        type: RollingUpdate
      template:
        metadata:
          labels:
            app: arms-python-server
            aliyun.com/app-language: python # Python アプリケーションに必須です。このラベルは、アプリケーションが Python アプリケーションであることを示します。
            armsPilotAutoEnable: 'on'
            armsPilotCreateAppName: "arms-python-server"    # ARMS でのアプリケーションの表示名。
        spec:
          containers:
            - env:
              - name: CLIENT_URL
                value: 'http://arms-python-client-svc:8000'
              image: registry.cn-hangzhou.aliyuncs.com/arms-default/python-agent:arms-python-server
              imagePullPolicy: Always
              name: server
              resources:
                requests:
                  cpu: 250m
                  memory: 300Mi
              terminationMessagePath: /dev/termination-log
              terminationMessagePolicy: File
          dnsPolicy: ClusterFirst
          restartPolicy: Always
          schedulerName: default-scheduler
          securityContext: {}
          terminationGracePeriodSeconds: 30
    
    ---
    
    apiVersion: v1
    kind: Service
    metadata:
      labels:
        app: arms-python-server
      name: arms-python-server-svc
      namespace: arms-demo
    spec:
      internalTrafficPolicy: Cluster
      ipFamilies:
        - IPv4
      ipFamilyPolicy: SingleStack
      ports:
        - name: http
          port: 8000
          protocol: TCP
          targetPort: 8000
      selector:
        app: arms-python-server
      sessionAffinity: None
      type: ClusterIP
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: arms-python-client-svc
      namespace: arms-demo
    spec:
      internalTrafficPolicy: Cluster
      ipFamilies:
        - IPv4
      ipFamilyPolicy: SingleStack
      ports:
        - name: http
          port: 8000
          protocol: TCP
          targetPort: 8000
      selector:
        app: arms-python-client
      sessionAffinity: None
      type: ClusterIP
    

ステップ 5: 監視の詳細を表示する

  1. 約 1 分後、ARMS コンソール[アプリケーション監視] > [アプリケーション一覧] ページで、Python アプリケーションとそのレポートされたデータを表示できます。

    image

  2. [アプリケーション名] をクリックして、ARMS コンソールのアプリケーション監視ページで監視の詳細を表示します。詳細については、「アプリケーション概要」をご参照ください。

(オプション) ステップ 6: リソースのリリース

ARMS を使用して Python アプリケーションを監視する必要がなくなった場合は、ARMS Python エージェントをアンインストールして監視を停止できます。詳細については、「Python エージェントのアンインストール」をご参照ください。