Container Service for Kubernetes (ACK) または Container Compute Service (ACS) クラスターで Python アプリケーションを実行する場合、Application Real-Time Monitoring Service (ARMS) は、分散トレーシング、アプリケーショントポロジーマップ、API コール分析を提供します。これらのデータを収集するには、ack-onepilot コンポーネントを使用して ARMS Python エージェントをインストールします。
次の 2 つのインストール方法が利用できます:
| 方法 | ack-onepilot バージョン | Dockerfile の変更 |
|---|---|---|
| 自動インジェクション (推奨) | 5.0.0 より後のバージョン | 不要 |
| 手動インストール | 3.2.4 以降 | 必要 |
Python エージェントに関するご質問は、「Python エージェントに関する FAQ」をご参照ください。DingTalk グループ (ID: 159215000379) からもお問い合わせいただけます。
前提条件
ACK または ACS クラスターが作成されていること
ACK クラスター:「ACK マネージドクラスターの作成」、「ACK 専用クラスターの作成 (新規作成は終了)」、または「ACK Serverless クラスターの作成」
ACS クラスター:「ACS クラスターの作成」
名前空間が作成されます。詳細については、「名前空間とクォータを管理する」をご参照ください。このガイドの例では
arms-demoを使用します。使用している Python バージョンとフレームワークがサポートされていること。「アプリケーションモニタリングでサポートされる Python ライブラリ」をご参照ください。
Python フレームワークの互換性
作業を進める前に、以下のフレームワーク固有の要件を確認してください。
uvicorn
アプリケーションが uvicorn で起動する場合、次のいずれかの方法を選択してください:
方法 A:コード内でエージェントをインポートする。 uvicorn のエントリーファイルの先頭行に次の import 文を追加します:
from aliyun.opentelemetry.instrumentation.auto_instrumentation import sitecustomize方法 B: aliyun-instrument プレフィックスを付けて gunicorn に切り替えます。 uvicorn コマンドを置き換えます:
# 変更前:
uvicorn app:app --workers 4 --port=9090 --host 0.0.0.0
# 変更後:
aliyun-instrument gunicorn -w 4 -k uvicorn.workers.UvicornWorker -b 0.0.0.0:8000 app:appaliyun-instrument プレフィックスは、ARMS Python エージェントの初期化と非侵入型インストルメンテーションを担当します。
uWSGI
アプリケーションが uWSGI で起動する場合は、「uWSGI で起動する Django または Flask プロジェクトへの Python エージェントのインストール」をご参照ください。
gevent
gevent コルーチンを使用する場合、GEVENT_ENABLE 環境変数を true に設定します。
たとえば、コードに次の内容が含まれている場合:
from gevent import monkey
monkey.patch_all()デプロイメントで次の環境変数を設定してください:
GEVENT_ENABLE=trueステップ 1:ack-onepilot のインストール
ack-onepilot は、ARMS エージェントのインストールを管理するクラスター側のコンポーネントです。
ACK コンソールにログインします。[クラスター] ページで、クラスターの名前をクリックします。
左側のナビゲーションペインで、[アドオン]をクリックします。右上隅で[ack-onepilot]を検索します。
重要ack-onepilot のバージョンが 3.2.4 以降であることを確認してください。
[ack-onepilot] カードの[インストール]をクリックします。
説明デフォルトでは、ack-onepilot は 1,000 Pod をサポートします。1,000 Pod 追加ごとに、コンポーネントに 0.5 CPU コアと 512 MB のメモリを追加してください。
ダイアログボックスでパラメーターを設定し、[OK] をクリックします。デフォルト値が推奨されます。
説明インストール後、[アドオン] ページから ack-onepilot をアップグレード、設定、またはアンインストールできます。
ack-onepilot のバージョンに基づいて次のステップを選択します:
5.0.0 より後のバージョン:「ステップ 3:権限の付与」に進みます。Dockerfile の変更は不要です。これにより、Python アプリケーションを完全に非侵入的な方法でインストールできます。
その他のバージョン (3.2.4 以降):「ステップ 2:Dockerfile の変更」に進みます。
ステップ 2:Dockerfile の変更 (ack-onepilot 5.0.0 以前)
ack-onepilot のバージョンが 5.0.0 より後の場合は、このステップをスキップしてください。
Dockerfile に ARMS Python エージェントを追加し、起動コマンドを更新してください。
PyPI からエージェントインストーラーをインストールしてください:
RUN pip3 install aliyun-bootstrapエージェントをインストールします。
<region-id>を、お使いの Alibaba Cloud リージョン ID (例:cn-hangzhou) に置き換えます:説明特定のエージェントバージョンをインストールするには、
aliyun-bootstrap -a install -v <version>を実行します。 すべてのリリースバージョンについては、「Python エージェントのリリースノート」をご参照ください。RUN ARMS_REGION_ID=<region-id> aliyun-bootstrap -a installaliyun-instrumentプレフィックスを使用するように、起動コマンドを更新します:CMD ["aliyun-instrument", "python", "app.py"]イメージをビルドしてください。
完全な Dockerfile の例
<region-id> を、cn-hangzhou などの Alibaba Cloud リージョン ID に置き換えます。
ステップ 3:権限の付与
権限の設定は、クラスタータイプによって異なります。
ACK マネージドクラスター
ARMS Addon Token がある ACK マネージドクラスターでは、追加の権限設定は不要です。
ACK 専用クラスターおよび登録済みクラスター
AliyunARMSFullAccess および AliyunSTSAssumeRoleAccess の権限がResource Access Management (RAM) ユーザーに付与されていることを確認してください。
ack-onepilot のインストール後、次のいずれかの方法を使用して AccessKey ID と AccessKey Secret を設定してください。
方法 1:Helm 設定を更新する
ACK コンソールにログオンします。左側のナビゲーションペインで、[クラスター] をクリックします。
クラスター名をクリックします。左側のナビゲーションペインで、[アプリケーション] > [Helm] を選択します。[ack-onepilot] の横にある [更新] をクリックします。
accessKeyとaccessKeySecretの値を、ご自身の AccessKey ID と AccessKey Secret に置き換えた後、[OK] をクリックします。説明AccessKey Secret は、AccessKey ペアを最初に作成したときにのみ表示されます。安全に保管してください。後で取得することはできません。

デプロイメントを再起動してください。
方法 2:Kubernetes Secret を使用する
ACK コンソールにログオンします。左側のナビゲーションペインで、[クラスター]をクリックします。
クラスター名をクリックします。左側のナビゲーションペインで、[設定] > [シークレット] を選択します。
[作成] をクリックします。パネルで [追加] をクリックし、アクセスキー ID とアクセスキーシークレットを入力します。
説明AccessKey Secret は、AccessKey ペアを最初に作成したときにのみ表示されます。安全に保管してください。後で取得することはできません。

左側のナビゲーションペインで、[ワークロード] > [デプロイメント] を選択します。ack-onepilot コンポーネントをクリックします (通常、
ack-onepilot名前空間ではack-onepilot-ack-onepilotという名前です)。右上隅の[編集]をクリックします。
[環境] セクションまでスクロールします。[追加] をクリックし、作成した Secret を参照する環境変数を追加して、[OK] をクリックします。
ONE_PILOT_ACCESSKEYONE_PILOT_ACCESSKEY_SECRET

ACK Serverless (ASK) および Elastic Container Instance (ECI) クラスター
Cloud Resource Access Authorization ページで、クラスターが ARMS にアクセスすることを承認してください。
ack-onepilot がデプロイされているすべての Pod を再起動してください。
ステップ 4:ARMS モニタリングの有効化
Kubernetes デプロイメントに ARMS ラベルを追加して、モニタリングを有効化してください。
ack-onepilot 5.0.0 より後のバージョンでは、このステップ中にコンポーネントが Python エージェントパッケージを自動的にダウンロードしてインジェクトします。Dockerfile の変更は不要です。init コンテナがエージェントのインジェクションを処理し、次のデフォルト設定を使用します:
リソース:0.5 CPU コア、250 MiB のメモリ (初期化後に解放)
実行時間: 約 10 秒。init コンテナのリソースを調整するには、これらの環境変数を設定します: | 環境変数 | 説明 | 例 | |---|---|---| |
PYTHON_INIT_RESOURCE_REQUESTS_CPU| CPU リクエスト |500m| |PYTHON_INIT_RESOURCE_REQUESTS_MEM| メモリリクエスト |250Mi| |PYTHON_INIT_RESOURCE_LIMIT_CPU| CPU 制限 |1000m| |PYTHON_INIT_RESOURCE_LIMIT_MEM| メモリ制限 |500Mi| この自動インジェクション機能はベータ版です。ご不明な点がある場合は、DingTalk グループ (ID: 159215000379) を通じてお問い合わせください。
デプロイメントへのラベルの追加
ACK コンソールにログインします。左側のナビゲーションペインで、[クラスター] をクリックします。
クラスターの名前をクリックします。左側のナビゲーションペインで、[ワークロード] > [デプロイ] を選択します。
対象のアプリケーションを探し、[アクション] 列で [
] > [YAML の編集] を選択します。 または、[YAML から作成] をクリックして新しい アプリケーションを作成します。spec.template.metadataの配下に次のラベルを追加し、<app-name>をmy-python-serviceのようなアプリケーションのわかりやすい名前に置き換えます。重要ack-onepilot 5.0.0 より後のバージョンを使用しているが、Dockerfile にエージェントを手動でインストール済みの場合は、次のラベルを追加して自動インジェクションを無効にしてください:
yaml armsAutoInstrumentationEnable: "off"labels: aliyun.com/app-language: python # 必須。これが Python アプリケーションであることを識別します。 armsPilotAutoEnable: 'on' # ARMS モニタリングを有効化します。 armsPilotCreateAppName: "<app-name>" # ARMS コンソールでの表示名。
[更新]をクリックします。
完全な YAML の例
次の YAML は、ARMS モニタリングを使用する 2 つのサンプル Python アプリケーションをデプロイします:
インストールの確認
エージェントがデータを報告していることを確認してください。
ARMS コンソールを開いてください。
左側のナビゲーションペインで、[アプリケーション監視] > [アプリケーション] を選択します。
Python アプリケーションがリストに表示され、データを報告していることを確認してください。通常、これには約 1 分かかります。

一般的な問題のトラブルシューティング
数分経過してもアプリケーションが ARMS コンソールに表示されない場合:
ポッドにラベルが適用されていることを確認 (デプロイメントではなく):
aliyun.com/app-language、armsPilotAutoEnable、およびarmsPilotCreateAppNameが存在することを確認します。kubectl get pod <pod-name> -n <namespace> -o jsonpath='{.metadata.labels}'init コンテナのステータスを確認してください (ack-onepilot 5.0.0 より後):出力で init コンテナを探してください。正常に完了したことを確認してください。
kubectl describe pod <pod-name> -n <namespace>ack-onepilot が実行中であることの確認: すべての ack-onepilot ポッドが
Runningステータスになっている必要があります。kubectl get pods -n ack-onepilot権限を確認してください:必要な RAM ポリシーがアタッチされていることを確認してください。「ステップ 3:権限の付与」をご参照ください。
バージョンに関する注意事項
デフォルトでは、aliyun-bootstrap または自動インジェクション方法を使用するたびに、最新の Python エージェントバージョンがインストールされます。 特定のバージョンを固定するには、「Python エージェントに関する FAQ」の「特定のリージョンとバージョンのエージェントをインストールするにはどうすればよいですか?」セクションをご参照ください。