Amazon EKS および Kubernetes クラスターに Prometheus メトリクスコレクションを使用して CloudWatch エージェントをインストールする - Amazon CloudWatch

Amazon EKS および Kubernetes クラスターに Prometheus メトリクスコレクションを使用して CloudWatch エージェントをインストールする

このセクションでは、Amazon EKS または Kubernetes を実行しているクラスターで Prometheus モニターリングを使用して CloudWatch エージェントをセットアップする方法について説明します。これを行うと、エージェントは、そのクラスターで実行されている次のワークロードのメトリクスを自動的にスクレイプし、インポートします。

  • AWS App Mesh

  • NGINX

  • Memcached

  • Java/JMX

  • HAProxy

  • Fluent Bit

また、追加の Prometheus ワークロードとソースをスクレイプしてインポートするようにエージェントを設定することもできます。

以下のステップに従って Prometheus メトリクスコレクション用の CloudWatch エージェントをインストールする前に、Amazon EKS でクラスターが実行されているか、Amazon EC2 インスタンスで Kubernetes クラスターが実行されている必要があります。

VPC セキュリティグループの要件

Prometheus ワークロードのセキュリティグループの受信ルールでは、Prometheus のメトリクスをプライベート IP でスクレイピングするために、CloudWatch エージェントへの Prometheus ポートを開く必要があります。

CloudWatch エージェントのセキュリティグループの出力ルールでは、CloudWatch エージェントがプライベート IP によって Prometheus ワークロードのポートに接続できるようにする必要があります。

Amazon EKS および Kubernetes クラスターに Prometheus メトリクスコレクションを使用して CloudWatch エージェントをインストールする

このセクションでは、Amazon EKS または Kubernetes を実行しているクラスターで Prometheus モニターリングを使用して CloudWatch エージェントをセットアップする方法について説明します。これを行うと、エージェントは、そのクラスターで実行されている次のワークロードのメトリクスを自動的にスクレイプし、インポートします。

  • AWS App Mesh

  • NGINX

  • Memcached

  • Java/JMX

  • HAProxy

  • Fluent Bit

また、追加の Prometheus ワークロードとソースをスクレイプしてインポートするようにエージェントを設定することもできます。

以下のステップに従って Prometheus メトリクスコレクション用の CloudWatch エージェントをインストールする前に、Amazon EKS でクラスターが実行されているか、Amazon EC2 インスタンスで Kubernetes クラスターが実行されている必要があります。

VPC セキュリティグループの要件

Prometheus ワークロードのセキュリティグループの受信ルールでは、Prometheus のメトリクスをプライベート IP でスクレイピングするために、CloudWatch エージェントへの Prometheus ポートを開く必要があります。

CloudWatch エージェントのセキュリティグループの出力ルールでは、CloudWatch エージェントがプライベート IP によって Prometheus ワークロードのポートに接続できるようにする必要があります。

IAM ロールの設定

最初のステップでは、クラスターで必要な IAM ロールを設定します。2 つの方法があります。

  • サービスアカウントの IAM ロール (サービスロールとも呼ばれます) を設定します。このメソッドは、EC2 起動タイプと Fargate 起動タイプの両方で機能します。

  • クラスターに使用される IAM ロールに IAM ポリシーを追加します。これは EC2 起動タイプでのみ機能します。

サービスロール (EC2 起動タイプと Fargate 起動タイプ) を設定する

サービスロールを設定するには、次のコマンドを入力します。MyCluster をクラスターの名前に置き換えます。

eksctl create iamserviceaccount \ --name cwagent-prometheus \ --namespace amazon-cloudwatch \ --cluster MyCluster \ --attach-policy-arn arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy \ --approve \ --override-existing-serviceaccounts

クラスターの IAM ロールにポリシーを追加する (EC2 起動タイプのみ)

Prometheus のサポートのためにクラスターで IAM ポリシーを設定するには
  1. Amazon EC2 コンソール (https://console.aws.amazon.com/ec2/) を開きます。

  2. ナビゲーションペインで、[インスタンス] を選択します。

  3. クラスターの IAM ロール名のプレフィックスを検索する必要があります。これを行うには、クラスター内のインスタンスの名前の横にあるチェックボックスをオンにし、[アクション]、[インスタンス設定]、[Attach/Replace IAM Role (IAM ロールのアタッチ/置換)] の順に選択します。次に、IAM ロールのプレフィックス (eksctl-dev303-workshop-nodegroup など) をコピーします。

  4. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  5. ナビゲーションペインで Roles (ロール) を選択します。

  6. 検索ボックスを使用して、この手順で先ほどコピーしたプレフィックスを検索し、そのロールを選択します。

  7. [ポリシーのアタッチ] を選択します。

  8. 検索ボックスを使用して、[CloudWatchAgentServerPolicy] を検索します。[CloudWatchAgentServerPolicy] の横にあるチェックボックスをオンにして、[Attach policy (ポリシーをアタッチ)] を選択します。

Prometheus メトリクスを収集するための CloudWatch エージェントのインストール

メトリクスを収集するには、CloudWatch エージェントをクラスターにインストールする必要があります。エージェントのインストール方法は、Amazon EKS クラスターと Kubernetes クラスターによって異なります。

Prometheus をサポートする以前のバージョンの CloudWatch エージェントを削除する

Prometheus をサポートするバージョンの CloudWatch エージェントが既にクラスターにインストールされている場合は、次のコマンドを入力してそのバージョンを削除する必要があります。この操作は、Prometheus をサポートする以前のバージョンのエージェントでのみ必要です。Prometheus をサポートせずに Container Insights を有効にする CloudWatch エージェントを削除する必要はありません。

kubectl delete deployment cwagent-prometheus -n amazon-cloudwatch

EC2 起動タイプの Amazon EKS クラスターへの CloudWatch エージェントのインストール

Prometheus をサポートする CloudWatch エージェントを Amazon EKS クラスターにインストールするには、次の手順に従います。

Amazon EKS クラスターに Prometheus サポートをする CloudWatch エージェントをインストールするには
  1. 次のコマンドを入力して、amazon-cloudwatch 名前空間がすでに作成されているかどうかを確認します。

    kubectl get namespace
  2. 結果に amazon-cloudwatch が表示されない場合は、次のコマンドを入力して作成します。

    kubectl create namespace amazon-cloudwatch
  3. デフォルトの設定でエージェントをデプロイし、インストール先の AWS リージョンにデータを送信するには、次のコマンドを入力します。

    kubectl apply -f https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/service/cwagent-prometheus/prometheus-eks.yaml

    エージェントから代わりに別のリージョンにデータを送信するには、次のステップに従います。

    1. 次のコマンドを入力して、エージェントの YAML ファイルをダウンロードします。

      curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/service/cwagent-prometheus/prometheus-eks.yaml
    2. テキストエディタでファイルを開き、ファイルの cwagentconfig.json ブロックを検索します。

    3. ハイライト表示された行を追加し、必要なリージョンを指定します。

      cwagentconfig.json: | { "agent": { "region": "us-east-2" }, "logs": { ...
    4. ファイルを保存し、更新されたファイルを使用してエージェントをデプロイします。

      kubectl apply -f prometheus-eks.yaml

Fargate 起動タイプの Amazon EKS クラスターへの CloudWatch エージェントのインストール

Prometheus をサポートする CloudWatch エージェントを Fargate 起動タイプの Amazon EKS クラスターにインストールするには、次の手順に従います。

Prometheus をサポートする CloudWatch エージェントを Fargate 起動タイプの Amazon EKS クラスターにインストールするには
  1. クラスター内で実行できるように、次のコマンドを入力して、CloudWatch エージェントの Fargate プロファイルを作成します。MyCluster をクラスターの名前に置き換えます。

    eksctl create fargateprofile --cluster MyCluster \ --name amazon-cloudwatch \ --namespace amazon-cloudwatch
  2. CloudWatch エージェントをインストールするには、次のコマンドを入力します。MyCluster をクラスターの名前に置き換えます。この名前は、エージェントによって収集されたログイベントを保存するロググループ名に使用されます。また、エージェントによって収集されたメトリクスのディメンションとしても使用されます。

    region は、メトリクスの送信先となるリージョンの名前に置き換えます。例えば、us-west-1 と指定します。

    curl https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/service/cwagent-prometheus/prometheus-eks-fargate.yaml | sed "s/{{cluster_name}}/MyCluster/;s/{{region_name}}/region/" | kubectl apply -f -

Kubernetes クラスターへの CloudWatch エージェントのインストール

Kubernetes を実行しているクラスターに Prometheus をサポートする CloudWatch エージェントをインストールするには、次のコマンドを入力します。

curl https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/service/cwagent-prometheus/prometheus-k8s.yaml | sed "s/{{cluster_name}}/MyCluster/;s/{{region_name}}/region/" | kubectl apply -f -

MyCluster をクラスターの名前に置き換えます。この名前は、エージェントによって収集されたログイベントを保存するロググループ名に使用されます。また、エージェントによって収集されたメトリクスのディメンションとしても使用されます。

region は、メトリクスの送信先となる AWS リージョンの名前に置き換えます。例えば、us-west-1 と指定します。

エージェントが実行されていることを確認する

Amazon EKS と Kubernetes クラスターの両方で、次のコマンドを入力して、エージェントが実行中であることを確認できます。

kubectl get pod -l "app=cwagent-prometheus" -n amazon-cloudwatch

結果に Running 状態の 1 つの CloudWatch エージェントポッドが含まれる場合、エージェントは実行中であり、Prometheus メトリクスを収集しています。デフォルトでは、CloudWatch エージェントは、App Mesh、NGINX、Memcached、Java/JMX、および HAProxy のメトリクスを毎分収集します。これらのメトリクスの詳細については、「CloudWatch エージェントにより収集される Prometheus メトリクス」を参照してください。CloudWatch で Prometheus メトリクスを表示する方法については「Prometheus メトリクスの表示 」を参照してください。

他の Prometheus エクスポーターからメトリクスを収集するよう CloudWatch エージェントを設定することもできます。詳細については、「追加の Prometheus ソースのスクレイピングと、それらのメトリクスのインポート」を参照してください。