Application Real-Time Monitoring Service (ARMS) は、Container Service for Kubernetes (ACK) および Container Compute Service (ACS) で実行されている Java アプリケーションを自動的にインストルメンテーションします。クラスターに ack-onepilot コンポーネントをインストールし、Deployment に 3 つのラベルを追加します。これにより、ARMS はコードを変更することなく、トレース、アプリケーショントポロジ、API 呼び出しメトリック、エラーおよびレイテンシーデータを収集します。
ACK と ACS のインストール手順は同じです。このガイドでは、ACK を例として使用します。
仕組み
ack-onepilot コンポーネント (ARMS エージェントオンボーディングアシスタント) は、クラスター内でコントローラーとして実行されます。ラベルが付けられた Pod が起動すると、ack-onepilot は ARMS Java エージェントを Pod に自動的にインジェクションします。新しいエージェントバージョンがリリースされると、次回のアプリケーション再起動時に ack-onepilot がエージェントをアップグレードします。特定のバージョンを固定するには、「エージェントバージョンの手動制御」をご参照ください。
インジェクションのメカニズムの詳細については、「ack-onepilot の仕組み」をご参照ください。
レガシーコンポーネントである arms-pilot はメンテナンスが終了しています。ack-onepilot はその後継であり、完全な互換性があります。移行に際してアプリケーション設定の変更は不要です。移行手順については、「arms-pilot のアンインストールと ack-onepilot のインストール」をご参照ください。
プロセスの概要
ARMS モニタリングの設定は、3 つのステップで完了します。
ack-onepilot のインストール -- ACK コンソールを使用してモニタリングコンポーネントをデプロイします。
[ARMS への権限付与] -- ARMS のクラスター認証を設定します (クラスターの種類によって異なります)。
Deployment へのラベル付け -- Pod テンプレートに 3 つのラベルを追加して、自動インストルメンテーションを有効にします。
前提条件
開始する前に、以下を確認してください。
ACK または ACS クラスター:
クラスター内の名前空間 (「名前空間とクォータの管理」をご参照ください)。このガイドでは、
arms-demoを名前空間の例として使用します要件を満たす JDK バージョン (「サポートされている JDK バージョン」をご参照ください)
JVM の最大ヒープメモリ (
-Xmx) が 256 MB を超えていること
ステップ1:ack-onepilot のインストール
ACK コンソールにログインします。 [クラスター] ページで、クラスター名をクリックします。
ナビゲーションペインで、 [アドオン] をクリックします。 [ack-onepilot] を検索します。
[ack-onepilot] カードで、 [インストール] をクリックします。
ダイアログボックスで、デフォルトのパラメーター値を変更せずに、 [OK] をクリックします。
ack-onepilot は、デフォルトで最大 1,000 個の Pod をサポートします。Pod が 1,000 個追加されるごとに、コンポーネントに 0.5 コアの CPU と 512 MB のメモリを割り当ててください。
インストール後、 [アドオン] ページから ack-onepilot のアップグレード、設定、またはアンインストールが可能です。
ステップ2:ARMS への権限付与
必要な権限は、クラスターの種類によって異なります。お使いのクラスターの種類を確認し、対応する手順に従ってください。
ACK マネージドクラスター
ARMS アドオントークンを持つ ACK マネージドクラスターは自動的に承認されます。続行する前に、トークンが存在するかどうかを確認してください。
クラスターに ARMS アドオントークンがある場合、ARMS はクラスターに対してパスワードなしの権限付与を実行します。一部の ACK マネージドクラスターには ARMS アドオントークンが存在しない場合があります。ARMS を使用してクラスター内のアプリケーションをモニタリングする前に、ACK マネージドクラスターに ARMS アドオントークンがあるかどうかを確認することを推奨します。
ACK 専有クラスターおよび登録済みクラスター
ACK 専有クラスターおよび ACK One 登録済みクラスターには、以下の 2 つが必要です。
お使いの Alibaba Cloud アカウントに AliyunARMSFullAccess および AliyunSTSAssumeRoleAccess 権限が必要です。「RAM ユーザーの権限管理」をご参照ください。
ack-onepilot コンポーネントには、ARMS 権限を持つ AccessKey ペアが必要です。
以下のいずれかの方法を使用して、ack-onepilot に AccessKey ペアを指定します。
方法1:Helm での AccessKey ペアの指定
ACK コンソールにログインします。 [クラスター] をクリックし、次にクラスター名をクリックします。
ナビゲーションペインで、 [アプリケーション] > [Helm] を選択します。 [ack-onepilot] の横にある [更新] をクリックします。
accessKeyとaccessKeySecretの値を AccessKey ID と AccessKey シークレットに置き換えます。 [OK] をクリックします。説明AccessKey ペアを取得するには、「AccessKey ペアの作成」をご参照ください。
admissionRegistration: failurePolicy: Ignore onlyLabel: false configuration: downloadTimeout: "90" controller: accessKey: __ACCESSKEY__ accessKeySecret: __ACCESSKEY_SECRET__ accessSource: ACSKS cluster_id: c0c3c907a2e30 clusterProfile: __ACK_CLUSTER_PROFILE__ clusterType: __ACK_CLUSTER_TYPE__ imagePullPolicy: Always is_finance: <no value> logLevel: 1アプリケーションの Deployment を再起動します。
方法2:Kubernetes Secret の使用
ACK コンソールにログインします。 [クラスター] をクリックし、次にクラスター名をクリックします。
ナビゲーションペインで、 [設定] > [シークレット] を選択します。 [ack-onepilot] 名前空間を選択し、AccessKey ID と AccessKey シークレットを格納する Secret を作成します。
説明AccessKey ペアを取得するには、「AccessKey ペアの作成」をご参照ください。
Secret を作成する際、 [Name] を
ack-onepilot-akskに設定し、 [Type] に [Opaque] を選択し、データテーブルに 2 つの行を追加します。キーakは AccessKey ID に、キーskは AccessKey シークレットにそれぞれ対応します。ナビゲーションペインで、 [ワークロード] > [デプロイメント] を選択します。ack-onepilot コンポーネント (通常は
ack-onepilot名前空間内のack-onepilot-ack-onepilot) をクリックします。右上隅の [編集] をクリックします。 [環境変数] セクションで、以下の 2 つの変数を追加して Secret の値を参照するようにし、 [OK] をクリックします。
環境変数
説明
ONE_PILOT_ACCESSKEYSecret に格納されている AccessKey ID を参照します
ONE_PILOT_ACCESSKEY_SECRETSecret に格納されている AccessKey シークレットを参照します
ACK Serverless クラスター (ASK) および ECI 統合クラスター
[リソースアクセス承認] ページで権限付与を完了し、ack-onepilot コンポーネントのすべての Pod を再起動します。
ステップ3:Deployment へのラベル付け
Deployment YAML の spec.template.metadata.labels セクションに 3 つのラベルを追加して、ARMS モニタリングを有効にします。
labels:
armsPilotAutoEnable: "on"
armsPilotCreateAppName: "<your-deployment-name>" # をお使いのアプリケーション名に置き換えます。
aliyun.com/app-language: java ラベル | 値 | 説明 |
|
| Pod へのエージェントの自動インジェクションを有効にします |
|
| ARMS コンソールに表示されるアプリケーション名。お使いのアプリケーション名に置き換えてください。 |
|
| エージェントのアプリケーション言語を指定します |
ラベルは metadata.labels (Deployment メタデータ) ではなく、 spec.template.metadata.labels (Pod テンプレート) に配置する必要があります。ラベルを間違った場所に配置すると、モニタリングデータが表示されない一般的な原因となります。
既存の Deployment へのラベルの適用
ACK コンソールにログインします。 [クラスター] をクリックし、次にクラスター名をクリックします。
ナビゲーションペインで、 [ワークロード] > [デプロイメント] を選択します。
[ステートレス] ページで、対象のアプリケーションの横にある [
] > [YAML の編集] をクリックします。spec.template.metadata.labelsに 3 つのラベルを追加し、 [更新] をクリックします。
アプリケーションセキュリティの詳細については、「アプリケーションセキュリティとは」をご参照ください。
アプリケーションセキュリティの課金の詳細については、「課金の概要」をご参照ください。
apiVersion: v1
kind: Namespace
metadata:
name: arms-demo
---
apiVersion: apps/v1 # 1.8.0 より前のバージョンの場合は apps/v1beta1 を使用します
kind: Deployment
metadata:
name: arms-springboot-demo
namespace: arms-demo
labels:
app: arms-springboot-demo
spec:
replicas: 2
selector:
matchLabels:
app: arms-springboot-demo
template:
metadata:
labels:
app: arms-springboot-demo
armsPilotAutoEnable: "on"
armsPilotCreateAppName: "arms-k8s-demo"
spec:
containers:
- resources:モニタリングを有効にした新規 Deployment の作成
[ステートレス] ページで [YAMLから作成] をクリックし、Deployment 定義にラベルを含めます。
モニタリングデータの検証
[ステートレス] ページで、対象アプリケーションの [操作] 列にある [
] > [ARMSコンソール] をクリックして、アプリケーションのモニタリング詳細を表示します。