クラスターメトリクスを収集するよう CloudWatch エージェントをセットアップする - Amazon CloudWatch

クラスターメトリクスを収集するよう 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 エージェントのサービスアカウントを作成します (作成済みでない場合)。

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"]

ステップ 3: CloudWatch エージェント用の ConfigMap を作成する

CloudWatch エージェント用の ConfigMap を作成するには、次のステップを使用します。

CloudWatch エージェント用の ConfigMap を作成するには
  1. 以下のコマンドを実行して、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
  2. ダウンロードした YAML ファイルを次のように編集します。

    • cluster_namekubernetes セクションで、{{cluster_name}} をクラスターの名前と置き換えます。{{}} 文字を削除します。または、Amazon EKS クラスターを使用している場合、"cluster_name" フィールドと値を削除できます。そうした場合、CloudWatch エージェントは Amazon EC2 タグからクラスター名を検出します。

  3. (オプション) モニターリング要件に基づいて、次のように ConfigMap をさらに変更します。

    • metrics_collection_intervalkubernetes セクションで、エージェントがメトリクスを収集する頻度を指定できます。デフォルト値は 60 秒です。kubelet でのデフォルトの cadvisor 収集間隔は 15 秒であるため、この値を 15 秒未満に設定しないでください。

    • endpoint_overridelogs セクションで、デフォルトのエンドポイントを上書きする場合は、CloudWatch Logs エンドポイントを指定できます。VPC のクラスターからデータを発行し、データの送信先を VPC エンドポイントとする場合は、この操作を行うことをお勧めします。

    • force_flush_intervallogs セクションで、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 セクションの完全な例を次に示します。

      { "agent": { "region": "us-east-1" }, "logs": { "metrics_collected": { "kubernetes": { "cluster_name": "MyCluster", "metrics_collection_interval": 60, "enhanced_container_insights": true } }, "force_flush_interval": 5, "endpoint_override": "logs.us-east-1.amazonaws.com" }, "metrics": { "metrics_collected": { "statsd": { "service_address": ":8125" } } } }
  4. 次のコマンドを実行して、クラスターに 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 を使用する場合は、以下の手順に従います。

      1. 次のコマンドを実行して、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
      2. 次のように、port ファイルの cwagent-daemonset.yaml セクションのコメントを解除します。

        ports: - containerPort: 8125 hostPort: 8125 protocol: UDP
      3. 次のコマンドを実行して、クラスターに CloudWatch エージェントをデプロイします。

        kubectl apply -f cwagent-daemonset.yaml
      4. 次のコマンドを実行して、クラスターの Windows ノードに CloudWatch エージェントをデプロイします。StatsD リスナーは Windows 上の CloudWatch エージェントではサポートされていません。

        kubectl apply -f cwagent-daemonset-windows.yaml
  1. 次のコマンドを実行して、エージェントがデプロイされたことを確認します。

    kubectl get pods -n amazon-cloudwatch

操作を完了すると、CloudWatch エージェントは /aws/containerinsights/Cluster_Name/performance という名前のロググループを作成し、このロググループにパフォーマンスログイベントを送信します。また、このエージェントを StatsD リスナーとしてもセットアップする場合、エージェントはアプリケーションポッドがスケジュールされたノードの IP アドレスを使用して、ポート 8125 で StatsD メトリクスをリッスンします。

トラブルシューティング

エージェントが正しくデプロイされない場合は、次の操作を試してください。

  • 次のコマンドを実行して、ポッドのリストを取得します。

    kubectl get pods -n amazon-cloudwatch
  • 次のコマンドを実行して、出力の下部にあるイベントを確認します。

    kubectl describe pod pod-name -n amazon-cloudwatch
  • 次のコマンドを実行して、ログを確認します。

    kubectl logs pod-name -n amazon-cloudwatch