はじめに
AWSのElastic Kubernetes Service (EKS)を使用している場合、アプリケーションのパフォーマンスを監視することも重要です。特にJavaアプリケーションの場合、JMX(Java Management Extensions)メトリクスは貴重な情報源となります。この記事では、Amazon CloudWatch Observabilityアドオンを使用したJMXメトリクスの収集方法について説明します。
前提条件
- AWSアカウントとEKSクラスターがセットアップされていること
- 基本的なKubernetesの知識
- CloudWatchの基本的な理解
設定手順
1. Amazon CloudWatch Observabilityアドオンのインストール
まず、EKSクラスターにAmazon CloudWatch Observabilityアドオンをインストールする必要があります。このアドオンは、CloudWatchエージェントを利用してCloudWatch Application Signalsで使用するアプリケーションのメトリクスとトレースをデフォルトで収集します。アドオンのインストール方法はAWS公式ドキュメントのAmazon CloudWatch Observability EKS アドオンのクイックスタートを参照してください。
ただし、注意点としてこのアドオンをインストールしただけではJMXメトリクスの収集は行われません。
2. JMXメトリクス収集の有効化
AWS公式ドキュメントの独自のサービスを使用して Amazon EKS クラスターで Application Signals を有効にするにある通り、JMXメトリクスを収集するには、ワークロード(Pod)またはNamespaceのannotationsに特定の設定を追加する必要があります。
具体的には以下のannotationを追加します。
instrumentation.opentelemetry.io/inject-java: "true"
ワークロード単位で設定する場合、DeploymentではなくPodのannotationsに追加する必要があります。以下は、Deploymentの設定例です。
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: java-app
name: java-app
spec:
replicas: 1
selector:
matchLabels:
app: java-app
template:
metadata:
labels:
app: java-app
annotations:
instrumentation.opentelemetry.io/inject-java: "true"
spec:
containers:
- image: ryotamori/jmx-agent-example:v2
name: jmx-agent-example
ワークロード側のJMXメトリクス公開方法
JMXメトリクスの公開方法には主に2つあります。
- JMXエクスポーター
- RMI(Remote Method Invocation)
どちらの方法でメトリクスを公開しても、Container Insightsによって収集されることを確認しています。
メトリクスの確認方法
設定が完了すると、CloudWatchメトリクスのカスタム名前空間にApplicationSignals
が追加されます。ここで収集されたJMXメトリクスを確認することができます。
Application Signalsで収集されるメトリクス
AWS公式ドキュメントのApplication Signals によって収集されるメトリクスに、詳細な情報が記載されています。
また、メトリクスのカスタマイズ方法については、CloudWatch Application Signals を有効にするのドキュメントを参照してください。
不要なメトリクスの抑止
デフォルトでは、neuronやdcgm-exporterなどのメトリクスも収集されますが、これらを使用していない場合、CloudWatch Agentのログに継続的に警告が出力されます。
これらの不要なメトリクスを抑止するには、アドオンの高度な設定でCloudWatch Agentの設定を変更します。以下は、Application Signalsを有効にしつつ、高速コンピューティングメトリクスを抑止する設定例です:
{
"agent": {
"config": {
"logs": {
"metrics_collected": {
"application_signals": {},
"kubernetes": {
"enhanced_container_insights": true,
"accelerated_compute_metrics": false
}
}
}
}
}
}
この設定方法の詳細は、高速コンピューティングメトリクスの収集をオプトアウトするのドキュメントを参照してください。