Application Real-Time Monitoring Service (ARMS) は、ack-onepilot アドオンを介して Container Service for Kubernetes (ACK) クラスターで実行される Java アプリケーションをモニタリングします。このアドオンをインストールして権限を付与することで、本番環境での問題診断を大幅に迅速化できます。
背景情報
アプリケーションリアルタイム監視サービス (ARMS) は、Alibaba Cloud のアプリケーションパフォーマンス管理 (APM) 製品です。Container Service for Kubernetes (ACK) では、ack-onepilot アドオンをインストールして承認することで、コードを一切変更することなく、Java アプリケーションをエンドツーエンドで監視できます。
このアドオンは、アプリケーションのトポロジーとインターフェイスを自動的に検出し、3D トポロジーマップを生成します。インターフェイスをモニタリングし、異常なトランザクションや低速なトランザクションをキャプチャします。このモニタリングデータを使用して、障害のあるインターフェイスや低速なインターフェイスを迅速に特定し、呼び出しパラメーターを再現し、メモリリークを検出し、システムのボトルネックを特定できます。ARMS アプリケーションモニタリングの詳細については、「アプリケーションモニタリングとは」をご参照ください。
前提条件
名前空間が作成されていること。詳細については、「名前空間とリソースクォータの管理」をご参照ください。このトピックでは、
arms-demo名前空間を例として使用します。JDK のバージョンがアプリケーションモニタリングでサポートされていること。ARMS は、次の JDK バージョンをサポートしています:
JDK 1.7.0 以降
重要ARMS エージェント V3.0.X 以降は Java 7 をサポートしなくなります。Java 7 をまだ使用している場合は、Java のバージョンをアップグレードすることを推奨します。詳細については、「アプリケーションモニタリングは Java 7 をサポートしなくなりました」をご参照ください。
JDK 1.8.0_25 以降
説明Kubernetes クラスターにアプリケーションをデプロイする場合、JDK V1.8.0_191 以降を使用することを推奨します。
JDK のバージョンが 1.8.0_25 または 1.8.0_31 でないことを確認してください。そうでない場合、ARMS エージェントのインストールに失敗する可能性があります。この場合、JDK を最新の 1.8.X にアップグレードすることを推奨します。
JDK 11.0.8 以降
JDK 17
手順1:ARMS アプリケーションモニタリングアドオンのインストール
レガシーコンポーネントである arms-pilot はメンテナンスが終了しています。ack-onepilot はその後継であり、完全な互換性があります。移行に際してアプリケーション設定の変更は不要です。移行手順については、「arms-pilot のアンインストールと ack-onepilot のインストール」をご参照ください。
デフォルトでは、ack-onepilot アドオンは最大 1,000 個の Pod をサポートします。クラスター内で Pod が 1,000 個追加されるごとに、アドオンの CPU リソースを 0.5 コア、メモリを 512 MB 増やしてください。
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のナビゲーションウィンドウで、 を選択します。
[ログとモニタリング] セクションで ack-onepilot アドオンを見つけ、アドオンカードにある インストール をクリックします。
ダイアログボックスで、アドオンのパラメーターを設定します。デフォルト値のままにすることを推奨します。OK をクリックしてインストールを完了します。
インストールが完了したら、アドオン管理 ページで ack-onepilot アドオンのアップグレード、設定、またはアンインストールができます。
手順2:ARMS リソースへのアクセス権限の付与
手動で権限を付与する必要があるかどうかは、クラスターに addon.arms.token Secret が存在するかどうかによって決まります。Secret が存在する場合、権限付与は不要なため、手順3に進むことができます。Secret が存在しない場合は、ARMS がクラスター内のアプリケーションをモニタリングできるように、クラスターに ARMS リソースへのアクセス権限を手動で付与します。
クラスターに addon.arms.token Secret が含まれている場合、ARMS は認証情報なしで、クラスターに ARMS リソースへのアクセス権限を自動的に付与します。 ほとんどの ACK マネージドクラスターにはデフォルトでこの Secret が含まれていますが、以前に作成された ACK マネージドクラスターには含まれていない場合があります。
addon.arms.token Secret の存在確認
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、 を選択します。
シークレット ページで、名前空間 ドロップダウンリストから [kube-system] を選択し、
addon.arms.tokenSecret がリストに表示されているか確認します。
ARMS リソースへのアクセス権限の手動付与
クラスターに addon.arms.token Secret が存在しない場合にのみ、次の手順を実行します。
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、[クラスター情報] をクリックします。
基本情報 タブで、クラスターリソース セクションを見つけ、Worker RAM ロール の右側にあるリンクをクリックします。
役割 ページで 権限管理 タブをクリックし、次に [権限の追加] をクリックします。
権限を AliyunARMSFullAccess に設定し、OK をクリックします。
Elastic Container Instance (ECI) と統合されたクラスターへの権限付与
ECI と統合された ACK マネージドクラスター内のアプリケーションを監視するには、RAM クイック承認ページで権限を付与し、次に ack-onepilot アドオンのすべての Pod を再起動します。
手順3:Java アプリケーションでの ARMS アプリケーションモニタリングの有効化
Java アプリケーションの作成時に ARMS アプリケーションモニタリングを有効にします。次の手順では、ACK コンソールで YAML テンプレートから Deployment を作成します。
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、 を選択します。
デプロイメント ページで、YAML のリソースの作成 をクリックします。
サンプルテンプレート を選択し、[テンプレート] フィールド (YAML 形式) の spec.template.metadata セクションに次の
labelsを追加します。labels: armsPilotAutoEnable: "on" armsPilotCreateAppName: "<your-deployment-name>" # <your-deployment-name> を実際のアプリケーション名に置き換えます。 armsSecAutoEnable: "on" # アプリケーションをアプリケーションセキュリティに接続する場合は、このパラメーターを設定する必要があります。
Deployment の Pod テンプレートにある armsPilotAutoEnable: "on" と armsPilotCreateAppName: "arms-k8s-demo" のラベルにより、ARMS アプリケーションモニタリングが有効になります。次の YAML スニペットは、Pod テンプレート内でラベルが追加される場所を示しています。
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:
limits:
# ...次の完全なサンプル YAML ファイルは、Deployment を作成し、ARMS アプリケーションモニタリングを有効にします。
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"
one-agent.jdk.version: "OpenJDK11"
spec:
containers:
- resources:
limits:
cpu: 0.5
image: registry.cn-hangzhou.aliyuncs.com/arms-docker-repo/arms-springboot-demo:v0.1
imagePullPolicy: Always
name: arms-springboot-demo
env:
- name: SELF_INVOKE_SWITCH
value: "true"
- name: COMPONENT_HOST
value: "arms-demo-component"
- name: COMPONENT_PORT
value: "6666"
- name: MYSQL_SERVICE_HOST
value: "arms-demo-mysql"
- name: MYSQL_SERVICE_PORT
value: "3306"
---
apiVersion: apps/v1 # 1.8.0 より前のバージョンでは apps/v1beta1 を使用します
kind: Deployment
metadata:
name: arms-springboot-demo-subcomponent
namespace: arms-demo
labels:
app: arms-springboot-demo-subcomponent
spec:
replicas: 2
selector:
matchLabels:
app: arms-springboot-demo-subcomponent
template:
metadata:
labels:
app: arms-springboot-demo-subcomponent
armsPilotAutoEnable: "on"
armsPilotCreateAppName: "arms-k8s-demo-subcomponent"
one-agent.jdk.version: "OpenJDK11"
spec:
containers:
- resources:
limits:
cpu: 0.5
image: registry.cn-hangzhou.aliyuncs.com/arms-docker-repo/arms-springboot-demo:v0.1
imagePullPolicy: Always
name: arms-springboot-demo-subcomponent
env:
- name: SELF_INVOKE_SWITCH
value: "false"
- name: MYSQL_SERVICE_HOST
value: "arms-demo-mysql"
- name: MYSQL_SERVICE_PORT
value: "3306"
---
apiVersion: v1
kind: Service
metadata:
labels:
name: arms-demo-component
name: arms-demo-component
namespace: arms-demo
spec:
ports:
# この Service が公開するポート
- name: arms-demo-component-svc
port: 6666
targetPort: 8888
# この Service のトラフィックを受信するために一致する必要があるラベルのキーと値
selector:
app: arms-springboot-demo-subcomponent
---
apiVersion: apps/v1 # 1.8.0 より前のバージョンでは apps/v1beta1 を使用します
kind: Deployment
metadata:
name: arms-demo-mysql
namespace: arms-demo
labels:
app: mysql
spec:
replicas: 1
selector:
matchLabels:
app: mysql
template:
metadata:
labels:
app: mysql
spec:
containers:
- resources:
limits:
cpu: 0.5
image: registry.cn-hangzhou.aliyuncs.com/arms-docker-repo/arms-demo-mysql:v0.1
name: mysql
ports:
- containerPort: 3306
name: mysql
---
apiVersion: v1
kind: Service
metadata:
labels:
name: mysql
name: arms-demo-mysql
namespace: arms-demo
spec:
ports:
# この Service が公開するポート
- name: arms-mysql-svc
port: 3306
targetPort: 3306
# この Service のトラフィックを受信するために一致する必要があるラベルのキーと値
selector:
app: mysql
---アプリケーションセキュリティの詳細については、「アプリケーションセキュリティとは」をご参照ください。
アプリケーションセキュリティの課金の詳細については、「課金」をご参照ください。
上記の手順を完了すると、ACK クラスターにデプロイされたアプリケーションで ARMS アプリケーションモニタリングが有効になります。
次のステップ
アプリケーションモニタリングの詳細を表示するには、デプロイメント ページに移動して対象のアプリケーションを見つけます。アクション 列で
アイコンをクリックし、ARMS コントロール台 を選択します。詳細については、「アプリケーション概要」をご参照ください。
よくある質問
以下では、アプリケーションモニタリングに関するよくある質問について説明します。