Grafana で Prometheus を使用してアプリケーション ルーティング アドオンの ingress-nginx コントローラー メトリックを監視する (プレビュー)

アプリケーション ルーティング アドオンの ingress-nginx コントローラーは、要求、nginx プロセス、およびアプリケーションのパフォーマンスと使用状況の分析に役立つコントローラーの多くのメトリックを公開します。

アプリケーション ルーティング アドオンは、ポート 10254 の /metrics で Prometheus メトリック エンドポイントを公開します。

重要

AKS のプレビュー機能は、セルフサービスのオプトイン単位で利用できます。 プレビューは、"現状有姿" および "利用可能な限度" で提供され、サービス レベル アグリーメントおよび限定保証から除外されるものとします。 AKS プレビューは、ベストエフォート ベースでカスタマー サポートによって部分的にカバーされます。 そのため、これらの機能は、運用環境での使用を意図していません。 詳細については、次のサポート記事を参照してください。

前提条件

メトリック エンドポイントを検証する

メトリックが収集されていることを検証するために、ingress-nginx コントローラー ポッドのいずれかにポートを転送するように設定できます。

kubectl get pods -n app-routing-system
NAME                            READY   STATUS    RESTARTS   AGE
external-dns-667d54c44b-jmsxm   1/1     Running   0          4d6h
nginx-657bb8cdcf-qllmx          1/1     Running   0          4d6h
nginx-657bb8cdcf-wgcr7          1/1     Running   0          4d6h

ここで、nginx ポッドのいずれかでローカル ポートをポート 10254 に転送します。

kubectl port-forward nginx-657bb8cdcf-qllmx -n app-routing-system :10254
Forwarding from 127.0.0.1:43307 -> 10254
Forwarding from [::1]:43307 -> 10254

ローカル ポート (この場合 43307) をメモし、ブラウザーで http://localhost:43307/metrics を開きます。 ingress-nginx コントローラー メトリックの読み込みが表示されます。

ブラウザーでの Prometheus メトリックのスクリーンショット。

ここで、port-forward プロセスを終了して転送を終了できます。

Container Insights を使用して Prometheus および Azure Managed Grafana 用の Azure Monitor マネージド サービスを構成する

Prometheus 用 Azure Monitor マネージド サービスは、PromQL、Grafana ダッシュボード、Prometheus アラートなどの業界標準機能をサポートするフル マネージドの Prometheus 互換サービスです。 このサービスを使用するには、Prometheus にデータを送信する Azure Monitor エージェント用の "メトリック アドオン" を構成する必要があります。 このアドオンを使ってクラスターを構成していない場合は、この記事に従って、Azure Kubernetes Service (AKS) クラスターを構成して、Prometheus 用 Azure Monitor マネージド サービスにデータを送信し、収集したメトリックを Azure Managed Grafana インスタンスに送信できます。

ポッド注釈に基づくスクレイピングを有効にする

クラスターが Azure Monitor エージェントで更新されたら、ingress-nginx ポッドに追加されるポッド注釈に基づいてスクレイピングを有効にするようにエージェントを構成する必要があります。 この設定を行う方法の 1 つは、kube-system 名前空間の ama-metrics-settings-configmap ConfigMap にあります。

注意事項

これにより、kube-system 内の既存の ama-metrics-settings-configmap ConfigMap が置き換えられます。 構成が既にある場合は、バックアップを作成するか、この構成とマージできます。

既存の ama-metrics-settings-config ConfigMap が存在する場合は、kubectl get configmap ama-metrics-settings-configmap -n kube-system -o yaml > ama-metrics-settings-configmap-backup.yaml を実行してバックアップできます

次の構成では、podannotationnamespaceregex パラメーターを .* に設定して、すべての名前空間をスクレイピングします。

kubectl apply -f - <<EOF
kind: ConfigMap
apiVersion: v1
metadata:
  name: ama-metrics-settings-configmap
  namespace: kube-system
data:
  schema-version:
    #string.used by agent to parse config. supported versions are {v1}. Configs with other schema versions will be rejected by the agent.
    v1
  config-version:
    #string.used by customer to keep track of this config file's version in their source control/repository (max allowed 10 chars, other chars will be truncated)
    ver1
  prometheus-collector-settings: |-
    cluster_alias = ""
  default-scrape-settings-enabled: |-
    kubelet = true
    coredns = false
    cadvisor = true
    kubeproxy = false
    apiserver = false
    kubestate = true
    nodeexporter = true
    windowsexporter = false
    windowskubeproxy = false
    kappiebasic = true
    prometheuscollectorhealth = false
  # Regex for which namespaces to scrape through pod annotation based scraping.
  # This is none by default. Use '.*' to scrape all namespaces of annotated pods.
  pod-annotation-based-scraping: |-
    podannotationnamespaceregex = ".*"
  default-targets-metrics-keep-list: |-
    kubelet = ""
    coredns = ""
    cadvisor = ""
    kubeproxy = ""
    apiserver = ""
    kubestate = ""
    nodeexporter = ""
    windowsexporter = ""
    windowskubeproxy = ""
    podannotations = ""
    kappiebasic = ""
    minimalingestionprofile = true
  default-targets-scrape-interval-settings: |-
    kubelet = "30s"
    coredns = "30s"
    cadvisor = "30s"
    kubeproxy = "30s"
    apiserver = "30s"
    kubestate = "30s"
    nodeexporter = "30s"
    windowsexporter = "30s"
    windowskubeproxy = "30s"
    kappiebasic = "30s"
    prometheuscollectorhealth = "30s"
    podannotations = "30s"
  debug-mode: |-
    enabled = false
EOF

数分後に、kube-system 名前空間内の ama-metrics ポッドが再起動し、新しい構成を取得します。

Azure Managed Grafana でのメトリックの視覚化を確認する

Prometheus 用 Azure Monitor マネージド サービスと Azure Managed Grafana が構成されたので、Managed Grafana インスタンスにアクセスする必要があります。

ダウンロードして Grafana インスタンスにインポートできる、2 つの公式の ingress-nginx ダッシュボードがあります。

  • ingress-nginx コントローラー ダッシュボード
  • 要求処理パフォーマンス ダッシュボード

ingress-nginx コントローラー ダッシュボード

このダッシュボードを使用すると、要求ボリューム、接続、成功率、構成の再読み込み、および同期が失われた構成を表示できます。これを使用して、イングレス コントローラーのネットワーク IO 負荷、メモリ、CPU 使用率を表示することもできます。 最後に、イングレスの P50、P95、P99 パーセンタイル応答時間とそのスループットも示します。

このダッシュボードは、GitHub からダウンロードできます。

Grafana の ingress-nginx ダッシュボードを示すブラウザーのスクリーンショット。

要求処理パフォーマンス ダッシュボード

このダッシュボードを使用すると、イングレス コントローラーによるトラフィックの転送先アプリケーションのエンドポイントである、さまざまなイングレス アップストリーム宛先の要求処理のパフォーマンスを表示できます。 要求の合計とアップストリーム応答時間の P50、P95、および P99 パーセンタイルを示します。 要求エラーと待機時間の集計も表示できます。 このダッシュボードを使用して、アプリケーションのパフォーマンスとスケーラビリティを確認して改善します。

このダッシュボードは、GitHub からダウンロードできます。

Grafana の ingress-nginx 要求処理パフォーマンス ダッシュボードを示すブラウザーのスクリーンショット。

ダッシュボードをインポートする

Grafana ダッシュボードをインポートするには、左側のメニューを展開し、[ダッシュボード] の下の [インポート] をクリックします。

[インポート] ダッシュボードが強調表示された Grafana インスタンスを示すブラウザーのスクリーンショット。

次に、目的のダッシュボード ファイルをアップロードし、[読み込み] をクリックします。

Grafana インスタンスの [インポート] ダッシュボード ダイアログを示すブラウザーのスクリーンショット。

次のステップ

  • Kubernetes Event Driven Autoscaler (KEDA) を使用して Prometheus でスクレイピングされたイングレス メトリックを使用して、ワークロードのスケーリングを構成できます。 KEDA と AKS の統合の詳細を参照してください。
  • Azure Load Testing を使用してロード テストを作成して実行し、ワークロードのパフォーマンスをテストし、アプリケーションのスケーラビリティを最適化します。