ama-metrics エージェント) がすでに有効になっている AKS クラスターで、Vantage アプリケーションのメトリクスを収集する方法を説明します。設定が完了すると、Vantage アプリケーションのメトリクスは、Istio mTLS 経由で Vantage のエンドポイントに到達するメッシュ内 Prometheus によってスクレイプされ、同じ Azure Managed Grafana でインフラストラクチャのメトリクスとあわせて表示されます。
このパターンが存在する理由 (これを必要としている Istio mTLS の制約を含む) の背景については、Monitoring Overview を参照してください。
このパターンが必要な理由
ama-metrics エージェント は、Kubernetes のインフラストラクチャ メトリクス (kubelet、cadvisor、kube-state-metrics) を自動的に処理します。また、Istio プロキシ メトリクス (istio_requests_total など) は Envoy サイドカーによって平文ポートで公開されるため、pod annotation を介して自動的にスクレイプすることもできます。
一方、Vantage のアプリケーション メトリクスは異なります。これらはコンテナー ポート 8080 で公開されますが、このポートは Envoy サイドカーによってインターセプトされ、STRICT mTLS の適用対象になります。ama-metrics エージェント は kube-system 内で Istio サイドカーなしで実行されるため、有効な mTLS 証明書を提示できず、メッシュ化された名前空間内のアプリケーション メトリクス endpoint をスクレイプできません。Microsoft はこれを既知の制限事項として次のように文書化しています: “現在、相互 TLS 認証を使用する Istio 構成からメトリクスを収集することはサポートされていません。”
Vantage のアプリケーション メトリクスを収集するには、Istio mesh 内 に Prometheus インスタンスをデプロイします。この Prometheus は Istio サイドカーとともに動作し、mesh 証明書をエクスポートして、それを使って mTLS 経由でアプリケーション endpoint をスクレイプし、ama-metrics と同じ Azure Monitor Workspace に remote-write します.
仕組み
/metrics-text で Prometheus 形式のメトリクスを公開しています。メトリクスを公開するサービスには、ラベル abbyy.platform.metrics.text.endpoint: "1" が付与されています。
in-mesh Prometheus は、次のようにしてそれらのメトリクスをスクレイプします。
- Istio サイドカー (
sidecar.istio.io/inject: "true") を有効にして実行します。 OUTPUT_CERTSプロキシ設定アノテーションを使用して、Istio の mTLS 証明書をエクスポートします。- それらの証明書を
/etc/prom-certs/の Prometheus コンテナーにマウントします。 - Istio の CA 証明書、クライアント証明書、およびキーを使用し、
scheme: https経由でスクレイプするようにServiceMonitor(Step 6 でvantage-selfhostedチャートによって作成) を設定します。
アーキテクチャ
前提条件
- Istio service mesh アドオンが有効になっている AKS クラスター (STRICT mTLS) 。
- Azure Monitor Workspace がプロビジョニング済みで、AKS クラスターにリンクされていること。
- Azure Managed Grafana がプロビジョニング済みで、Azure Monitor Workspace にリンクされていること。
ama-metricsエージェント がクラスター上で実行されていること (AKS Monitor Settings で有効化) 。- AKS クラスターで OIDC issuer が有効になっていること (workload identity に必要) 。
- Prometheus Operator の CRD がインストールされていること (これらは
ama-metricsに含まれます) 。
Step 1: Azure リソースをプロビジョニングする
- Azure Monitor Workspace: Azure ポータル → “Azure Monitor workspaces” → 作成。AKS クラスターと同じリソース グループおよびリージョンを使用します。命名規則:
amw-<cluster-name>. - Azure Managed Grafana: Azure ポータル → “Azure Managed Grafana” → 作成。同じリソース グループおよびリージョンを使用します。作成時に Azure Monitor Workspace にリンクします。命名規則:
amg-<cluster-name>. - AKS で Prometheus を有効にする: Azure ポータル → AKS クラスター → Monitoring → Monitor Settings → “Metrics via managed Prometheus” を有効にし、Azure Monitor Workspace と Grafana インスタンスを選択します。
ama-metrics pod が実行中であることを確認します:
Step 2: Istio インジェクションを有効にして observability 名前空間を作成する
注: 名前空間名は任意に設定できますが、一部のオプション機能 (KEDA サポートなど) は Prometheus サービスがobservability名前空間にあることを前提としているため、observabilityを使用することを推奨します。
observability 名前空間にも同じラベルを付けます:
Step 3: Azure Monitor Workspace の取り込みの詳細情報を収集する
マネージド リソース グループは、
MA_<monitor-workspace-name>_<region>_managed のパターンに従います。手順 4: Prometheus 用のマネージド ID を作成する
clientId と principalId を控えておきます。
データ収集ルールに Monitoring Metrics Publisher ロールを割り当てます。
Step 5: Prometheus Operator をインストールする
ama-metrics エージェントは Prometheus CRD をインストールしますが、カスタムの Prometheus リソースをリコンサイルする Operator は実行しません。Operator のみをインストールし、それ以外はすべて無効にします:
Step 6: Prometheus マニフェストを適用する
ServiceMonitor は、vantage-selfhosted チャートによって別途作成されます (以下を参照) 。
service-account.yaml: workload identity アノテーションを持つ Prometheus サービス アカウント:
rbac.yaml: ターゲット検出用のClusterRoleとバインディング:
prometheus.yaml: Istio サイドカー インジェクション、証明書のエクスポート、Azure Monitor への remote-write を備えた Prometheus インスタンス:
azureAd.sdk 認証メソッドは DefaultAzureCredential を使用し、azure.workload.identity/use: "true" ラベルによって注入された workload identity トークンを取得します。Prometheus v3.60 以降が必要です。Vantage ServiceMonitor を設定する
ServiceMonitor は手動で適用するのではなく、vantage-selfhosted Helm チャートによって作成されます。in-mesh Prometheus がエクスポートする証明書を使用し、Istio mTLS 経由で Vantage をスクレイプするよう ServiceMonitor を設定した values ファイルを使って、チャートをインストールまたはアップグレードします。
手順 7: 確認
prometheus、config-reloader、istio-proxy) で実行されていることを確認します。
http://localhost:9090/targets を開きます。ターゲットが UP と表示され、https 経由で /metrics-text:8080 をスクレイプしていることを確認します。
エラーがないか remote-write のログを確認します:
up{cluster="<cluster-name>"} をクエリし、メトリクスが取り込まれていることを確認します。
運用上の注意
ama-metricsエージェント は引き続き Kubernetes のインフラストラクチャ メトリック (kubelet、cadvisor、kube-state-metrics、node-exporter) を処理します。無効化しないでください。- in-mesh Prometheus が処理するのは Vantage application のメトリックのみです。どちらも同じ Azure Monitor Workspace に書き込みます。
azureAd.sdkremote-write 認証ではDefaultAzureCredentialを使用します。これにより、AKS workload identity webhook によって pod に投影された workload identity トークンが取得されます。これには、サービス アカウント annotationazure.workload.identity/client-idと、pod labelazure.workload.identity/use: "true"が必要です。azureAd.managedIdentityの設定は、この use case では機能しません。これはノード上の IMDS endpoint を呼び出しますが、ユーザー割り当て identity は VMSS の Node Pool に割り当てられていないためです。- Prometheus の targets view に表示される
UNKNOWNターゲットは、通常、スクレイピングの問題ではなく、Degraded または CrashLooping 状態にある pod です。 - Prometheus CRD の
logLevel: debugは、設定を確認した後でinfoに変更できます。
