クラスターメトリクスを収集するよう CloudWatch エージェントを設定する
重要
Amazon EKS クラスターに Container Insights をインストールする場合は、このセクションの手順を使用するのではなく Amazon CloudWatch Observability EKS アドオンを使用してインストールすることをお勧めします。詳細と手順については、「Amazon CloudWatch Observability EKS アドオンのインストール」を参照してください。
Container Insights をセットアップしてメトリクスを収集するには、「Amazon EKS および Kubernetes の Container Insights のクイックスタートセットアップ」の手順に従うか、このセクションの手順に従います。以下のステップでは、クラスターからメトリクスを収集できるよう CloudWatch エージェントをセットアップします。
2023 年 11 月 6 日以降にこのセクションの手順を使用して Amazon EKS クラスターにインストールを行う場合は、Amazon EKS 向けにオブザーバビリティが強化された Container Insights をそのクラスターにインストールします。
ステップ 1: CloudWatch の名前空間を作成する
CloudWatch に対して amazon-cloudwatch
という Kubernetes 名前空間を作成するには、次のステップを使用します。すでにこの名前空間を作成している場合は、以下のステップをスキップできます。
CloudWatch の名前空間を作成するには
-
以下のコマンドを入力します。
kubectl apply -f https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/cloudwatch-namespace.yaml
ステップ 2: クラスターのサービスアカウントを作成する
次の方法のいずれかを使用して、CloudWatch エージェントのサービスアカウントを作成します (作成済みでない場合)。
kubectl
を使用します。kubeconfig
ファイルを使用する
認証に kubectl
を使用する
kubectl
を使用して CloudWatch エージェントのサービスアカウントを作成するには
-
次のコマンドを入力します。
kubectl apply -f https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/cwagent/cwagent-serviceaccount.yaml
前のステップに従っていないが、使用する CloudWatch エージェントのサービスアカウントが既にある場合は、そのアカウントに次のルールがあることを確認する必要があります。さらに、Container Insights のインストールの残りの手順では、cloudwatch-agent
の代わりにそのサービスアカウントの名前を使用する必要があります。
rules: - apiGroups: [""] resources: ["pods", "nodes", "endpoints"] verbs: ["list", "watch"] - apiGroups: [ "" ] resources: [ "services" ] verbs: [ "list", "watch" ] - apiGroups: ["apps"] resources: ["replicasets", "daemonsets", "deployments", "statefulsets"] verbs: ["list", "watch"] - apiGroups: ["batch"] resources: ["jobs"] verbs: ["list", "watch"] - apiGroups: [""] resources: ["nodes/proxy"] verbs: ["get"] - apiGroups: [""] resources: ["nodes/stats", "configmaps", "events"] verbs: ["create", "get"] - apiGroups: [""] resources: ["configmaps"] resourceNames: ["cwagent-clusterleader"] verbs: ["get","update"] - nonResourceURLs: ["/metrics"] verbs: ["get", "list", "watch"]
認証に kubeconfig
を使用する
または、認証に kubeconfig
ファイルを使用することもできます。この方法を使用して CloudWatch エージェント設定で kubeconfig
パスを直接指定すれば、サービスアカウントは不要になります。また、認証のための Kubernetes コントロールプレーン API への依存関係を除去できるため、セットアップが合理化され、kubeconfig ファイルを通じて認証を管理することでセキュリティが強化される可能性があります。
この方法を使用するには、次の例のように CloudWatch エージェント設定ファイルを更新して kubeconfig
ファイルへのパスを指定します。
{ "logs": { "metrics_collected": { "kubernetes": { "cluster_name": "
YOUR_CLUSTER_NAME
", "enhanced_container_insights": false, "accelerated_compute_metrics": false, "tag_service": false, "kube_config_path": "/path/to/your/kubeconfig" "host_ip": "
HOSTIP
" } } } }
kubeconfig
ファイルを作成するには、system:masters
Kubernetes ロールを持つ admin/{create_your_own_user}
ユーザーの Certificate Signing Request (CSR) を作成します。次に、Kubernetes クラスターの認証局 (CA) で署名し、kubeconfig
ファイルを作成します。
ステップ 3: CloudWatch エージェント用の ConfigMap を作成する
CloudWatch エージェント用の ConfigMap を作成するには、次のステップを使用します。
CloudWatch エージェント用の ConfigMap を作成するには
-
以下のコマンドを実行して、ConfigMap YAML を
kubectl
クライアントホストにダウンロードします。curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/cwagent/cwagent-configmap-enhanced.yaml
-
ダウンロードした YAML ファイルを次のように編集します。
-
cluster_name –
kubernetes
セクションで、{{cluster_name}}
をクラスターの名前と置き換えます。{{}}
文字を削除します。または、Amazon EKS クラスターを使用している場合、"cluster_name"
フィールドと値を削除できます。そうした場合、CloudWatch エージェントは Amazon EC2 タグからクラスター名を検出します。
-
-
(オプション) モニターリング要件に基づいて、次のように ConfigMap をさらに変更します。
-
metrics_collection_interval –
kubernetes
セクションで、エージェントがメトリクスを収集する頻度を指定できます。デフォルト値は 60 秒です。kubelet でのデフォルトの cadvisor 収集間隔は 15 秒であるため、この値を 15 秒未満に設定しないでください。 -
endpoint_override –
logs
セクションで、デフォルトのエンドポイントを上書きする場合は、CloudWatch Logs エンドポイントを指定できます。VPC のクラスターからデータを発行し、データの送信先を VPC エンドポイントとする場合は、この操作を行うことをお勧めします。 -
force_flush_interval –
logs
セクションで、CloudWatch Logs に発行される前にバッチ処理のログイベントのインターバルを指定できます。デフォルト値は 5 秒です。 -
region – デフォルトでは、エージェントはワーカーノードがあるリージョンにメトリクスを発行します。これを無効にするには、
region
セクションにagent
フィールドを追加できます。例:"region":"us-west-2"
。 -
statsd セクション – クラスターの各ワーカーノードで StatsD リスナーとして CloudWatch Logs エージェントを実行する場合は、次の例のように
statsd
セクションにmetrics
セクションを追加できます。このセクションの他の StatsD オプションについては、「StatsD を使用してカスタムメトリクスを取得する」を参照してください。"metrics": { "metrics_collected": { "statsd": { "service_address":":8125" } } }
JSON セクションの完全な例を次に示します。認証に
kubeconfig
ファイルを使用している場合は、kube_config_path
パラメータを追加して kubeconfig ファイルへのパスを指定します。{ "agent": { "region": "us-east-1" }, "logs": { "metrics_collected": { "kubernetes": { "cluster_name": "MyCluster", "metrics_collection_interval": 60, "kube_config_path": "
/path/to/your/kubeconfig
" //if using kubeconfig for authentication } }, "force_flush_interval": 5, "endpoint_override": "logs.us-east-1.amazonaws.com" }, "metrics": { "metrics_collected": { "statsd": { "service_address": ":8125" } } } }
-
-
次のコマンドを実行して、クラスターに ConfigMap を作成します。
kubectl apply -f cwagent-configmap.yaml
ステップ 4: CloudWatch エージェントを DaemonSet としてデプロイする
CloudWatch エージェントのインストールを完了してコンテナメトリクスの収集を開始するには、次のステップを使用します。
CloudWatch エージェントを DaemonSet としてデプロイするには
-
-
クラスターで StatsD を使用しない場合は、次のコマンドを入力します。
kubectl apply -f https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/cwagent/cwagent-daemonset.yaml
-
StatsD を使用する場合は、以下の手順に従います。
-
次のコマンドを実行して、
kubectl
クライアントに DaemonSet YAML をダウンロードします。curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/cwagent/cwagent-daemonset.yaml
-
次のように、
port
ファイルのcwagent-daemonset.yaml
セクションのコメントを解除します。ports: - containerPort: 8125 hostPort: 8125 protocol: UDP
-
次のコマンドを実行して、クラスターに CloudWatch エージェントをデプロイします。
kubectl apply -f cwagent-daemonset.yaml
次のコマンドを実行して、クラスターの Windows ノードに CloudWatch エージェントをデプロイします。StatsD リスナーは Windows 上の CloudWatch エージェントではサポートされていません。
kubectl apply -f cwagent-daemonset-windows.yaml
-
-
-
次のコマンドを実行して、エージェントがデプロイされたことを確認します。
kubectl get pods -n amazon-cloudwatch
操作を完了すると、CloudWatch エージェントは /aws/containerinsights/
という名前のロググループを作成し、このロググループにパフォーマンスログイベントを送信します。また、このエージェントを StatsD リスナーとしてもセットアップする場合、エージェントはアプリケーションポッドがスケジュールされたノードの IP アドレスを使用して、ポート 8125 で StatsD メトリクスをリッスンします。Cluster_Name
/performance
トラブルシューティング
エージェントが正しくデプロイされない場合は、次の操作を試してください。
-
次のコマンドを実行して、ポッドのリストを取得します。
kubectl get pods -n amazon-cloudwatch
-
次のコマンドを実行して、出力の下部にあるイベントを確認します。
kubectl describe pod
pod-name
-n amazon-cloudwatch -
次のコマンドを実行して、ログを確認します。
kubectl logs
pod-name
-n amazon-cloudwatch