EKS メトリクスの取り込み

Amazon Managed Service for Prometheus は、Kubernetes クラスター内のコンテナ化されたワークロードから運用メトリクスを直接取得することはありません。このタスクを実行するには、ユーザーが標準の Prometheus サーバー、Grafana クラウドエージェント、または OpenTelemetry コレクタ用の AWS Distro for OpenTelemetry などの OpenTelemetry エージェントをクラスター内でデプロイおよび管理する必要があります。

このセクションでは、Prometheus サーバーを展開して AMPにメトリックを収集して取り込む方法について説明します。他の方法として、 Grafana Cloud Agent を使用する方法については、このブログ記事 をご覧ください。

Prometheus server のデプロイ

インストール Helm

公開サイトの指示に従ってヘルムをインストールします, または、以下の手順を実行します。

curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh

Helm チャートリポジトリの追加

helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo add kube-state-metrics https://kubernetes.github.io/kube-state-metrics
helm repo update

IAM ロールと Kubernetes サービスアカウントのセットアップ

以下のコマンドを実行します。EKS-AMP-ServiceAccount-Role という名前の IAM ロールを作成し、 prometheus と grafana の名前空間の下にある amp-iamproxy-service-account という名前の Kubernetes サービスアカウントにアタッチします。

kubectl create ns prometheus
chmod +x ./resources/amp-setup-irsa-eks.sh
./resources/setup-irsa-eks-amp.sh

新しいサーバーのセットアップとメトリクスの取り込み開始

  • my_prometheus_iam_proxy_role_arn を前のステップで作成した iamproxy-ingest-role の ARN に置き換えます

次のコマンドを実行して、ロール ARN を取得します

aws iam get-role --role-name iamproxy-ingest-role | jq .Role.Arn
  • my_workspace_id を AMP ワークスペースのワークスペース ID に置き換えます。

このコマンドは、アカウント内のすべてのワークスペースを一覧表示します。使用するものを選んでください。

aws amp list-workspaces
  • my_workspace_region を AMP ワークスペースの AWS リージョンに置き換えます。 例: us-east-1
IAM_PROXY_PROMETHEUS_ROLE_ARN=<my_prometheus_iam_proxy_role_arn>
WORKSPACE_ID=<my_workspace_id>
AWS_REGION=us-east-1
helm install amp-prometheus-chart prometheus-community/prometheus -n prometheus -f ./resources/amp_ingest_override_values.yaml \
--set serviceAccounts.server.annotations."eks\.amazonaws\.com/role-arn"="${IAM_PROXY_PROMETHEUS_ROLE_ARN}" \
--set server.remoteWrite[0].url="https://aps-workspaces.${AWS_REGION}.amazonaws.com/workspaces/${WORKSPACE_ID}/api/v1/remote_write" \
--set server.remoteWrite[0].sigv4.region=${AWS_REGION}

このセットアップは、以下のアーキテクチャ図のようになります

AMP setup

ADOT コレクタのセットアップ

AWS Distro for the OpenTelemetry Collector は、AMP にメトリクスを取り込むために使用するもう 1 つのオプションです。ADOT-AMP パイプラインを使用すると、ADOT コレクタを使用して Prometheus インストルメントされたアプリケーションを収集し、収集されたメトリクスを Amazon Managed Service for Prometheus (AMP) に送信できます。

ADOT-AMP pipeline

./resources/amp-eks-adot-prometheus-daemonset ファイルを開き、 <AMP_REMOTE_WRITE_URL> を、作成したワークスペースの Ingest URL に置き換えてファイルを保存します。

次のコマンドを使用して ADOT コレクタをデプロイします。

kubectl apply -f ./resources/amp-eks-adot-prometheus-daemonset.yaml

セットアップの検証

以下のコマンドを実行して、クラスター内の Pod のリストを表示します。

kubectl get pods -n prometheus

結果は下のようになるはずです。ご覧のとおり、EKS クラスターに Pod としてデプロイされた Prometheus サーバーが確認できます。

NAME                                                    READY   STATUS    RESTARTS   AGE
adot-collector-hxglz                                     1/1     Running   0          12s
adot-collector-w4f4b                                     1/1     Running   0          12s
amp-prometheus-chart-kube-state-metrics-579888d7-nf546   1/1     Running   0          11m
amp-prometheus-chart-node-exporter-mww2k                 1/1     Running   0          11m
amp-prometheus-chart-node-exporter-zmpk7                 1/1     Running   0          11m
amp-prometheus-chart-server-0                            2/2     Running   0          11m

Prometheus インターフェイスを表示するには、次のコマンドを実行します。これにより、localhost から Prometheus サーバーコンテナに接続できます。

kubectl port-forward -n prometheus pods/prometheus-chart-server-0 8080:9090

http://127.0.0.1:8080 に移動して、prometheus インターフェイスを表示します。

クエリテキストボックスに次のPromQLを貼り付け、Execute をクリックします。以下のような結果を表示するには、Graph タブに切り替えます

rate(node_network_receive_bytes_total[5m])

Prom dashboard

設定ページ に移動し、remote キーワードを検索して、以下のように remote_write の宛先がAMPワークスペースに設定されていることを確認します。

Configuration Page

Prom dashboard