メインコンテンツまでスキップ

クラスターメトリクス

Amazon CloudWatch Observability EKS add-onを使用して、EKSクラスター用のCloudWatch Container Insightsを有効にします。このアドオンは、ノード、ポッド、コンテナなどのクラスターのさまざまな側面に関するメトリクスを収集し、CloudWatchに送信するCloudWatchエージェントをデプロイします。

内部的には、CloudWatchエージェントはOpenTelemetry上に構築されています。OTel Container Insightsを有効にすると、エージェントは組み込みのOpenTelemetryパイプラインを実行します:AWS Container Insights Receiverがノードとコンテナのテレメトリを収集し、AWS CloudWatch EMF ExporterがそれをCloudWatch Embedded Metric Format (EMF)に変換してCloudWatch Logsに送信します。そこでメトリクスはContainerInsights名前空間に表示されます。アドオンがこのパイプラインを管理するため、デプロイや保守するコレクターマニフェスト、Helmチャート、DaemonSetはありません。エージェントはDaemonSetとして実行されるため、クラスター内の各ノードで1つのポッドが実行されます。

CloudWatchエージェントに権限を付与する​

CloudWatchエージェントは、メトリクスとログをCloudWatchに送信するためのIAM権限が必要です。Amazon EKS Pod Identityを使用して権限を付与します。これにより、Kubernetes Service AccountがIAMロールを引き受けることができます。静的な認証情報は必要ありません。

Pod Identityの前提条件であるEKS Pod Identity Agentアドオンは、prepare-environmentによって既にクラスターにインストールされています。

CloudWatchエージェントが引き受けることができるIAMロールを作成します。信頼ポリシーはEKS Pod Identityサービスプリンシパルを許可し、AWSマネージドCloudWatchAgentServerPolicyをアタッチします:

~$aws iam create-role \
--role-name $EKS_CLUSTER_NAME-cloudwatch-agent \
--assume-role-policy-document '{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":{"Service":"pods.eks.amazonaws.com"},"Action":["sts:AssumeRole","sts:TagSession"]}]}'
~$aws iam attach-role-policy \
--role-name $EKS_CLUSTER_NAME-cloudwatch-agent \
--policy-arn arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy

アドオンがamazon-cloudwatch名前空間に作成するcloudwatch-agent Service Accountにロールを関連付けます:

~$aws eks create-pod-identity-association \
--cluster-name $EKS_CLUSTER_NAME \
--namespace amazon-cloudwatch \
--service-account cloudwatch-agent \
--role-arn arn:aws:iam::$AWS_ACCOUNT_ID:role/$EKS_CLUSTER_NAME-cloudwatch-agent

Container Insightsを有効化する​

次に、OTel Container Insightsを有効にしてamazon-cloudwatch-observabilityアドオンをインストールします。これは、コンソールまたはAWS CLIのどちらを使用してもインストールされる同じアドオンで、CloudWatchエージェントをデプロイして設定します:

~$aws eks create-addon \
--cluster-name $EKS_CLUSTER_NAME \
--addon-name amazon-cloudwatch-observability \
--configuration-values '{"otelContainerInsights":{"enabled":true}}'
~$aws eks wait addon-active \
--cluster-name $EKS_CLUSTER_NAME \
--addon-name amazon-cloudwatch-observability
注記

otelContainerInsights.enabled設定はOTel Container Insightsをオンにします。デフォルトでは有効になっていません。

アドオンはamazon-cloudwatch名前空間にCloudWatchエージェントをDaemonSetとしてデプロイします。エージェントポッドが実行されていることを確認します:

~$kubectl get pods -n amazon-cloudwatch -l app.kubernetes.io/name=cloudwatch-agent
NAME                     READY   STATUS    RESTARTS   AGE
cloudwatch-agent-4frxx   1/1     Running   0          31s
cloudwatch-agent-5rvpc   1/1     Running   0          31s
cloudwatch-agent-tptl7   1/1     Running   0          31s

エージェントはPod Identityを介してIAMロールを引き受けるため、すぐにメトリクスをCloudWatchに送信できます。メトリクスを表示するには、CloudWatchコンソールを開き、Container Insightsに移動します:

ヒント

CloudWatchにデータが表示され始めるまで2〜3分かかることがあります。

AWS console iconCloudWatchコンソールを開く

ContainerInsightsConsole

コンソールを探索して、クラスター、名前空間、ポッドなど、メトリクスが表示されるさまざまな方法を確認することができます。