Amazon EKS および Kubernetes クラスターでの Prometheus メトリクスのトラブルシューティング - Amazon CloudWatch

Amazon EKS および Kubernetes クラスターでの Prometheus メトリクスのトラブルシューティング

このセクションでは、Amazon EKS および Kubernetes クラスターでの Prometheus メトリクス設定のトラブルシューティングに役立つ情報を提供します。

Amazon EKS の一般的なトラブルシューティングステップ

CloudWatch エージェントが実行中であることを確認するには、次のコマンドを使用します。

kubectl get pod -n amazon-cloudwatch

出力には、cwagent-prometheus-id 列の NAME と、RunningSTATUS column. の行を含める必要があります。

実行中のポッドの詳細を表示するには、次のコマンドを入力します。pod-name は、cw-agent-prometheus で始まる名前を持つポッドの完全名に置き換えます。

kubectl describe pod pod-name -n amazon-cloudwatch

CloudWatch Container Insights がインストールされている場合は、CloudWatch Logs Insights を使用して、Prometheus メトリクスを収集する CloudWatch エージェントからログをクエリできます。

アプリケーションログをクエリするには
  1. CloudWatch コンソール (https://console.aws.amazon.com/cloudwatch/) を開きます。

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

  3. アプリケーションログのロググループ /aws/containerinsights/cluster-name/application を選択します。

  4. 検索クエリ式を次のクエリに置き換え、[クエリの実行] を選択します。

    fields ispresent(kubernetes.pod_name) as haskubernetes_pod_name, stream, kubernetes.pod_name, log | filter haskubernetes_pod_name and kubernetes.pod_name like /cwagent-prometheus

また、Prometheus メトリクスとメタデータが CloudWatch Logs イベントとして取り込まれていることを確認できます。

Prometheus のデータが取り込まれていることを確認するには
  1. CloudWatch コンソール (https://console.aws.amazon.com/cloudwatch/) を開きます。

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

  3. [/aws/containerinsights/cluster-name/prometheus] を選択します。

  4. 検索クエリ式を次のクエリに置き換え、[クエリの実行] を選択します。

    fields @timestamp, @message | sort @timestamp desc | limit 20

削除された Prometheus メトリクスのログ記録

このリリースでは、ヒストグラムタイプの Prometheus メトリクスは収集されません。CloudWatch エージェントを使用して、Prometheus メトリクスがヒストグラムメトリクスであるために削除されているかどうかを確認できます。また、ヒストグラムメトリクスであるために、削除されて CloudWatch に送信されない最初の 500 個の Prometheus メトリクスのリストを記録することもできます。

メトリクスが削除されているかどうかを確認するには、次のコマンドを入力します。

kubectl logs -l "app=cwagent-prometheus" -n amazon-cloudwatch --tail=-1

メトリクスが削除されている場合は、/opt/aws/amazon-cloudwatch-agent/logs/amazon-cloudwatch-agent.log ファイルに次の行が表示されます。

I! Drop Prometheus metrics with unsupported types. Only Gauge, Counter and Summary are supported. I! Please enable CWAgent debug mode to view the first 500 dropped metrics

これらの行が表示されている場合に、どのメトリクスが削除されているかを確認するには、次のステップを実行します。

削除された Prometheus メトリクスのリストを記録するには
  1. prometheus-eks.yaml または prometheus-k8s.yaml ファイルに次の太字行を追加して、CloudWatch エージェントをデバッグモードに変更し、ファイルを保存します。

    { "agent": { "debug": true },

    ファイルのこのセクションは、次のようになります。

    cwagentconfig.json: | { "agent": { "debug": true }, "logs": { "metrics_collected": {
  2. 次のコマンドを入力して、CloudWatch エージェントを再インストールしてデバッグモードを有効にします。

    kubectl delete deployment cwagent-prometheus -n amazon-cloudwatch kubectl apply -f prometheus.yaml

    削除されたメトリクスは、CloudWatch エージェントポッドに記録されます。

  3. CloudWatch エージェントポッドからログを取得するには、次のコマンドを入力します。

    kubectl logs -l "app=cwagent-prometheus" -n amazon-cloudwatch --tail=-1

    または、Container Insights Fluentd ログ記録がインストールされている場合、ログは CloudWatch Logs ロググループ /aws/containerinsights/cluster_name/application にも保存されます。

    これらのログをクエリするには、「Amazon EKS の一般的なトラブルシューティングステップ」のアプリケーションログをクエリするステップに従います。

Prometheus メトリクスが CloudWatch Logs ログイベントとして取り込まれる場所

CloudWatch エージェントは、Prometheus スクレイプジョブ設定ごとにログストリームを作成します。例えば、prometheus-eks.yaml および prometheus-k8s.yaml ファイルでは、job_name: 'kubernetes-pod-appmesh-envoy' 行が App Mesh メトリクスをスクレイプします。Prometheus ターゲットは kubernetes-pod-appmesh-envoy と定義されます。したがって、すべての App Mesh Prometheus メトリクスは、/aws/containerinsights/cluster-name/Prometheus という名前のロググループの下のログストリーム kubernetes-pod-appmesh-envoy に CloudWatch Logs イベントとして取り込まれます。

CloudWatch メトリクスに Amazon EKS または Kubernetes Prometheus メトリクスが表示されない

まず、Prometheus メトリクスがロググループ /aws/containerinsights/cluster-name/Prometheus にログイベントとして取り込まれることを確認します。「Prometheus メトリクスが CloudWatch Logs ログイベントとして取り込まれる場所」の情報を使用して、ターゲットログストリームを確認します。ログストリームが作成されない場合、またはログストリームに新しいログイベントがない場合は、次の点を確認します。

  • Prometheus メトリクスエクスポーターのエンドポイントが正しく設定されていることを確認します。

  • CloudWatch エージェント YAML ファイルの config map: cwagent-prometheus セクションにある Prometheus スクレイピング設定が正しいことを確認します。この設定は、Prometheus 設定ファイルと同じになります。詳細については、Prometheus ドキュメントの「<scrape_config>」を参照してください。

Prometheus メトリクスがログイベントとして正しく取り込まれる場合は、埋め込みメトリクス形式設定がログイベントに追加され、CloudWatch メトリクスを生成することを確認します。

"CloudWatchMetrics":[ { "Metrics":[ { "Name":"envoy_http_downstream_cx_destroy_remote_active_rq" } ], "Dimensions":[ [ "ClusterName", "Namespace" ] ], "Namespace":"ContainerInsights/Prometheus" } ],

埋め込みメトリックフォーマットの詳細については、「仕様: 埋め込みメトリクスフォーマット」を参照してください。

ログイベントにメトリクス形式が埋め込まれていない場合は、CloudWatch エージェントインストール YAML ファイルの config map: prometheus-cwagentconfig セクションで、metric_declaration セクションが正しく設定されていることを確認してください。(詳細については、新しい Prometheus スクレイピングターゲットを追加するためのチュートリアル: Prometheus API サーバーメトリクス を参照してください)。