マネージド ID 認証を使用して Prometheus データを Azure Monitor に送信する
この記事では、マネージド ID 認証と、Azure Monitor で提供されるサイド カー コンテナーを使用して、Azure Kubernetes Service (AKS) クラスターまたは Azure Arc 対応 Kubernetes クラスターで実行されているセルフマネージド Prometheus サーバーからデータを送信するために、リモート書き込みを設定する方法について説明します。 AKS によって作成された既存の ID を使用することも、独自の ID を作成することもできます。 ここでは、両方のオプションについて説明します。
Note
ユーザー割り当てマネージド ID を使用している場合は、Azure Monitor ワークスペースにリモート書き込みするために、Kubernetes クラスターで実行されている Prometheus を直接構成することをお勧めします。 詳細については、「ユーザー割り当てマネージド ID を使用して Prometheus データを Azure Monitor に送信する」を参照してください。 次の手順では、Azure Monitor のサイド カー コンテナーを使用します。
クラスター構成
この記事は、次のクラスター構成に適用されます。
- Azure Kubernetes Service クラスター
- Azure Arc 対応 Kubernetes クラスター
Note
別のクラウドまたはオンプレミスで実行されている Kubernetes クラスターでのリモート書き込みの設定については、「Microsoft Entra 認証を使用して Prometheus データを Azure Monitor に送信する」を参照してください。
前提条件
サポートされているバージョン
マネージド ID 認証には、v2.45 より大きい Prometheus バージョンが必要です。
Azure Monitor ワークスペース
この記事では、Prometheus メトリックを Azure Monitor ワークスペースに送信する方法について説明します。 Azure Monitor ワークスペースを作成するには、Azure Monitor ワークスペースの管理に関するページを参照してください。
アクセス許可
この記事の手順を完了するには、クラスターまたはリソースの管理者アクセス許可が必要です。
マネージド ID 用にアプリケーションを設定する
マネージド ID 認証を使用してアプリケーションの Prometheus リモート書き込みを設定するプロセスでは、次のタスクを完了する必要があります。
- AKS ノード リソース グループの名前を取得する。
- ユーザー割り当てマネージド ID のクライアント ID を取得する。
- ワークスペース データ収集規則に対する監視メトリック発行者ロールをマネージド ID に割り当てる。
- AKS クラスターにマネージド ID へのアクセス権を付与する。
- サイドカー コンテナーをデプロイしてリモート書き込みを設定する。
次の各セクションで、これらのタスクについて説明します。
AKS ノード リソース グループの名前を取得する
AKS クラスターのノード リソース グループには、このプロセスの他の手順で使用するリソースが含まれています。 このリソース グループには、MC_<AKS-RESOURCE-GROUP>_<AKS-CLUSTER-NAME>_<REGION>
という形式の名前が付きます。 リソース グループ名は、Azure portal の [リソース グループ] メニューを使用して確認できます。
ユーザー割り当てマネージド ID のクライアント ID を取得する
使用する ID のクライアント ID を取得する必要があります。 クライアント ID をコピーして、プロセスの後半で使用します。
独自のクライアント ID を作成する代わりに、AKS によって作成された ID のいずれかを使用することもできます。 ID の詳細については、「Azure Kubernetes Service でマネージド ID を使用する」を参照してください。
この記事では、kubelet ID を使用します。 この ID の名前は <AKS-CLUSTER-NAME>-agentpool
であり、AKS クラスターのノード リソース グループ内にあります。
<AKS-CLUSTER-NAME>-agentpool
マネージド ID を選択します。 [概要] ページで、[クライアント ID] の値をコピーします。 詳細については、「ユーザー割り当てマネージド ID の管理」を参照してください。
ワークスペース データ収集規則に対する監視メトリック発行者ロールをマネージド ID に割り当てる
マネージド ID には、Azure Monitor ワークスペースに関連付けられているデータ収集規則に対する監視メトリック発行者ロールが必要です。
Azure Monitor ワークスペースのリソース メニューで、[概要] を選択します。 [データ収集ルール] で、リンクを選びます。
データ収集ルールのリソース メニューで、[アクセス制御 (IAM)] を選びます。
追加を選択し、ロール割り当ての追加を選択します。
[監視メトリック発行者] ロールを選択して、[次へ] を選択します。
[マネージド ID] を選択し、[メンバーの選択] を選びます。 ユーザー割り当て ID を含むサブスクリプションを選択し、[ユーザー割り当てマネージド ID] を選びます。 使用するユーザー割り当て ID を選択し、[選択] を選びます。
ロールの割り当てを完了するには、[レビューと割り当て] を選択します。
AKS クラスターにマネージド ID へのアクセス権を付与する
AKS ID を使用している場合、この手順は必要ありません。 AKS ID は既にクラスターにアクセスできます。
重要
このセクションの手順を完了するには、クラスターの所有者またはユーザー アクセス管理者のアクセス許可が必要です。
AKS クラスターのノード リソース グループ内で、仮想マシン スケール セットを特定します。
仮想マシン スケール セットごとに、Azure CLI で次のコマンドを実行します。
az vmss identity assign -g <AKS-NODE-RESOURCE-GROUP> -n <AKS-VMSS-NAME> --identities <USER-ASSIGNED-IDENTITY-RESOURCE-ID>
サイドカー コンテナーをデプロイしてリモート書き込みを設定する
次の YAML をコピーし、ファイルに保存します。 YAML では、リッスン ポートとしてポート 8081 が使用されます。 別のポートを使用する場合は、YAML でポートを変更してください。
prometheus: prometheusSpec: externalLabels: cluster: <AKS-CLUSTER-NAME> ## https://prometheus.io/docs/prometheus/latest/configuration/configuration/#remote_write remoteWrite: - url: 'http://localhost:8081/api/v1/write' ## Azure Managed Prometheus currently exports some default mixins in Grafana. ## These mixins are compatible with Azure Monitor agent on your Azure Kubernetes Service cluster. ## However, these mixins aren't compatible with Prometheus metrics scraped by the Kube Prometheus stack. ## In order to make these mixins compatible, uncomment remote write relabel configuration below: ## writeRelabelConfigs: ## - sourceLabels: [metrics_path] ## regex: /metrics/cadvisor ## targetLabel: job ## replacement: cadvisor ## action: replace ## - sourceLabels: [job] ## regex: 'node-exporter' ## targetLabel: job ## replacement: node ## action: replace containers: - name: prom-remotewrite image: <CONTAINER-IMAGE-VERSION> imagePullPolicy: Always ports: - name: rw-port containerPort: 8081 livenessProbe: httpGet: path: /health port: rw-port initialDelaySeconds: 10 timeoutSeconds: 10 readinessProbe: httpGet: path: /ready port: rw-port initialDelaySeconds: 10 timeoutSeconds: 10 env: - name: INGESTION_URL value: <INGESTION_URL> - name: LISTENING_PORT value: '8081' - name: IDENTITY_TYPE value: userAssigned - name: AZURE_CLIENT_ID value: <MANAGED-IDENTITY-CLIENT-ID> # Optional parameter - name: CLUSTER value: <CLUSTER-NAME>
YAML 内の次の値を置き換えます。
Value 説明 <AKS-CLUSTER-NAME>
AKS クラスターの名前。 <CONTAINER-IMAGE-VERSION>
mcr.microsoft.com/azuremonitor/containerinsights/ciprod/prometheus-remote-write/images:prom-remotewrite-20240617.1
リモート書き込みコンテナー イメージのバージョン。<INGESTION-URL>
Azure Monitor ワークスペースの [概要] ページの [メトリック インジェスト エンドポイント] の値。 <MANAGED-IDENTITY-CLIENT-ID>
マネージド ID の [概要] ページの [クライアント ID] の値。 <CLUSTER-NAME>
Prometheus が実行されているクラスターの名前。 重要
Azure Government クラウドの場合、YAML ファイルの
env
セクションに次の環境変数を追加します。- name: INGESTION_AAD_AUDIENCE value: https://monitor.azure.us/
Azure Cloud Shell を開き、YAML ファイルをアップロードします。
Helm を使って YAML ファイルを適用し、Prometheus 構成を更新します。
# set context to your cluster az aks get-credentials -g <aks-rg-name> -n <aks-cluster-name> # use Helm to update your remote write config helm upgrade -f <YAML-FILENAME>.yml prometheus prometheus-community/kube-prometheus-stack --namespace <namespace where Prometheus pod resides>
確認とトラブルシューティング
検証とトラブルシューティングの情報については、「リモート書き込みのトラブルシューティング」と「Azure Monitor の Prometheus 用マネージド サービスのリモート書き込み」を参照してください。
次のステップ
- AKS クラスターから Prometheus メトリックを収集する
- Prometheus 用の Azure Monitor マネージド サービスの詳細
- Azure Monitor の Prometheus 用マネージド サービスでのリモート書き込み
- Microsoft Entra 認証を使用して Prometheus データを Azure Monitor に送信する
- Microsoft Entra ワークロード ID (プレビュー) 認証を使用して Prometheus データを Azure Monitor に送信する
- Microsoft Entra ポッドマネージド ID (プレビュー) 認証を使用して Prometheus データを Azure Monitor に送信する