Amazon CloudWatch
ユーザーガイド

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

CloudWatch Container Insights is in open preview. The preview is open to all AWS accounts and you do not need to request access. Features may be added or changed before announcing General Availability. Don’t hesitate to contact us with any feedback or let us know if you would like to be informed when updates are made by emailing us at containerinsightsfeedback@amazon.com

以下のステップでは、クラスターからメトリクスを収集できるよう CloudWatch エージェントをセットアップします。

ステップ 1: CloudWatch の名前空間を作成する

CloudWatch に対して amazon-cloudwatch という Kubernetes 名前空間を作成するには、次のステップを使用します。すでにこの名前空間を作成している場合は、以下のステップをスキップできます。

CloudWatch の名前空間を作成するには

  1. 次のコマンドを実行して、YAML 名前空間を kubectl クライアントホストにダウンロードします。

    curl -O https://s3.amazonaws.com/cloudwatch-agent-k8s-yamls/kubernetes-monitoring/cloudwatch-namespace.yaml
  2. amazon-cloudwatch 名前空間を作成するには、次のコマンドを実行します。

    kubectl apply -f cloudwatch-namespace.yaml

ステップ 2: クラスターのサービスアカウントを作成する

次のステップを使用して、CloudWatch エージェントのサービスアカウントを作成します (作成済みでない場合)。

CloudWatch エージェントのサービスアカウントを作成するには

  1. 次のコマンドを実行して、サービスアカウントの YAML を kubectl クライアントホストにダウンロードします。

    curl -O https://s3.amazonaws.com/cloudwatch-agent-k8s-yamls/kubernetes-monitoring/cwagent-serviceaccount.yaml
  2. 次のコマンドを実行して、Amazon EKS でサービスアカウントを作成します。

    kubectl apply -f cwagent-serviceaccount.yaml

前のステップに従っていないが、使用する CloudWatch エージェントのサービスアカウントがすでにある場合は、そのアカウントに次のルールがあることを確認する必要があります。さらに、Container Insights のインストールの残りの手順では、cloudwatch-agent の代わりにそのサービスアカウントの名前を使用する必要があります。

rules: - apiGroups: [""] resources: ["pods", "nodes", "endpoints"] verbs: ["watch", "list"] - apiGroups: [""] resources: ["nodes/proxy"] verbs: ["get"] - apiGroups: [""] resources: ["nodes/stats", "configmaps", “events”] verbs: ["create"] - apiGroups: [""] resources: ["configmaps"] resourceNames: ["cwagent-clusterleader"] verbs: ["get", "update"] - nonResourceURLs: ["/metrics"] verbs: ["get"]

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

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

CloudWatch エージェントの ConfigMap を作成するには

  1. 以下のコマンドを実行して、ConfigMap YAML を kubectl クライアントホストにダウンロードします。

    curl -O https://s3.amazonaws.com/cloudwatch-agent-k8s-yamls/kubernetes-monitoring/cwagent-configmap.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_overridestructuredlogs セクションで、デフォルトのエンドポイントを上書きする場合は、CloudWatch Logs エンドポイントを指定できます。VPC のクラスターからデータを発行し、データの送信先を VPC エンドポイントとする場合は、この操作を行うことをお勧めします。

    • force_flush_intervalstructuredlogs セクションで、CloudWatch Logs に発行される前にログイベントのバッチ処理を指定できます。デフォルト値は 5 秒です。

    • region – デフォルトでは、エージェントはワーカーノードがあるリージョンにメトリクスを発行します。これを無効にするには、agent セクションに region フィールドを追加できます。例: "region":"us-west-2"

    • statsd セクション – クラスターの各ワーカーノードで StatsD リスナーとして CloudWatch Logs エージェントを実行する場合は、次の例のように metrics セクションに statsd セクションを追加できます。このセクションの他の StatsD オプションについては、「StatsD を使用したカスタムメトリクスの取得 」を参照してください。

      "metrics": { "metrics_collected": { "statsd": { "service_address":":8125" } } }

      JSON セクションの完全な例を次に示します。

      { "agent": { "region": "us-east-1" }, "structuredlogs": { "metrics_collected": { "kubernetes": { "cluster_name": "MyCluster", "metrics_collection_interval": 60 } }, "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: DaemonSet として CloudWatch エージェントをデプロイする

CloudWatch エージェントのインストールを完了してコンテナメトリクスの収集を開始するには、次のステップを使用します。

Daemonset として CloudWatch エージェントをデプロイするには

  1. 次のコマンドを実行して、kubectl クライアントに DaemonSet YAML をダウンロードします。

    curl -O https://s3.amazonaws.com/cloudwatch-agent-k8s-yamls/kubernetes-monitoring/cwagent-daemonset.yaml
  2. statsd セクション – (オプション) クラスターの各ワーカーノードで StatsD リスナーとして CloudWatch Logs エージェントを実行する場合は、次のように cwagent-daemonset.yaml ファイルの port セクションでコメントを解除します。

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

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

    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