Grafana で Prometheus を使用してアプリケーション ルーティング アドオンの ingress-nginx コントローラー メトリックを監視する (プレビュー)
アプリケーション ルーティング アドオンの ingress-nginx コントローラーは、要求、nginx プロセス、およびアプリケーションのパフォーマンスと使用状況の分析に役立つコントローラーの多くのメトリックを公開します。
アプリケーション ルーティング アドオンは、ポート 10254 の /metrics
で Prometheus メトリック エンドポイントを公開します。
重要
AKS のプレビュー機能は、セルフサービスのオプトイン単位で利用できます。 プレビューは、"現状有姿" および "利用可能な限度" で提供され、サービス レベル アグリーメントおよび限定保証から除外されるものとします。 AKS プレビューは、ベストエフォート ベースでカスタマー サポートによって部分的にカバーされます。 そのため、これらの機能は、運用環境での使用を意図していません。 詳細については、次のサポート記事を参照してください。
前提条件
- アプリケーション ルーティング アドオンが有効な Azure Kubernetes Service (AKS) クラスター。
- Prometheus 用 Azure Monitor マネージド サービスなどの Prometheus インスタンス。
- Azure Managed Grafana などの Grafana インスタンス。
メトリック エンドポイントを検証する
メトリックが収集されていることを検証するために、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 コントローラー メトリックの読み込みが表示されます。
ここで、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 からダウンロードできます。
要求処理パフォーマンス ダッシュボード
このダッシュボードを使用すると、イングレス コントローラーによるトラフィックの転送先アプリケーションのエンドポイントである、さまざまなイングレス アップストリーム宛先の要求処理のパフォーマンスを表示できます。 要求の合計とアップストリーム応答時間の P50、P95、および P99 パーセンタイルを示します。 要求エラーと待機時間の集計も表示できます。 このダッシュボードを使用して、アプリケーションのパフォーマンスとスケーラビリティを確認して改善します。
このダッシュボードは、GitHub からダウンロードできます。
ダッシュボードをインポートする
Grafana ダッシュボードをインポートするには、左側のメニューを展開し、[ダッシュボード] の下の [インポート] をクリックします。
次に、目的のダッシュボード ファイルをアップロードし、[読み込み] をクリックします。
次のステップ
- Kubernetes Event Driven Autoscaler (KEDA) を使用して Prometheus でスクレイピングされたイングレス メトリックを使用して、ワークロードのスケーリングを構成できます。 KEDA と AKS の統合の詳細を参照してください。
- Azure Load Testing を使用してロード テストを作成して実行し、ワークロードのパフォーマンスをテストし、アプリケーションのスケーラビリティを最適化します。
Azure Kubernetes Service