Microsoft Entra 認証を使用して Prometheus データを Azure Monitor に送信する
この記事では、Microsoft Entra 認証と、Azure Monitor で提供されるサイド カー コンテナーを使用して、Azure Kubernetes Service (AKS) クラスターまたは Azure Arc 対応 Kubernetes クラスターで実行されているセルフマネージド Prometheus サーバーからデータを送信するために、リモート書き込みを設定する方法について説明します。 同じ目的で、Prometheus 構成の中でリモート書き込みを直接構成できることも、忘れないでください。
Note
Azure Monitor ワークスペースにリモート書き込みするためには、Kubernetes クラスターで実行されている Prometheus を直接構成することをお勧めします。 詳細については、「Microsoft Entra ID 認証を使用して Prometheus データを Azure Monitor に送信する」を参照してください。 次の手順では、Azure Monitor のサイド カー コンテナーを使用します。
クラスター構成
この記事は、次のクラスター構成に適用されます。
- Azure Kubernetes Service クラスター
- Azure Arc 対応 Kubernetes クラスター
- 別のクラウドまたはオンプレミスで実行されている Kubernetes クラスター
Note
AKS クラスターまたは Azure Arc 対応 Kubernetes クラスターの場合は、マネージド ID 認証を使用することをお勧めします。 詳細については、マネージド ID の Azure Monitor の Prometheus 用マネージド サービスのリモート書き込みに関するページを参照してください。
前提条件
サポートされているバージョン
- Microsoft Entra ID アプリケーション認証には、v2.48 より大きい Prometheus バージョンが必要です。
Azure Monitor ワークスペース
この記事では、Prometheus メトリックを Azure Monitor ワークスペースに送信する方法について説明します。 Azure Monitor ワークスペースを作成するには、Azure Monitor ワークスペースの管理に関するページを参照してください。
アクセス許可
この記事の手順を完了するには、クラスターまたはリソースの管理者アクセス許可が必要です。
Microsoft Entra ID 用にアプリケーションを設定する
Microsoft Entra 認証を使用してアプリケーションの Prometheus リモート書き込みを設定するプロセスには、次のタスクを完了することが含まれます。
- Microsoft Entra ID でアプリケーションを登録します。
- Microsoft Entra アプリケーションのクライアント ID を取得します。
- ワークスペース データ収集ルールに対する監視メトリック発行者ロールをアプリケーションに割り当てる。
- Azure キー コンテナーを作成して証明書を生成する。
- Microsoft Entra アプリケーションに証明書を追加する。
- クラスター用の CSI ドライバーとストレージを追加する。
- サイドカー コンテナーをデプロイしてリモート書き込みを設定する。
これらのタスクについては、以降のセクションで説明します。
演Microsoft Entra ID でアプリケーションを登録する
Microsoft Entra ID にアプリケーションを登録し、サービス プリンシパルを作成する手順を完了します。
Microsoft Entra アプリケーションのクライアント ID を取得する
- Azure portal で、[Microsoft Entra ID] メニューに移動し、[アプリの登録] を選びます。
- アプリケーションのリストで、登録済みアプリケーションのアプリケーション (クライアント) ID の値をコピーします。
ワークスペース データ収集ルールに対する監視メトリック発行者ロールをアプリケーションに割り当てる
アプリケーションには、Azure Monitor ワークスペースに関連付けられているデータ収集ルールに対する監視メトリック発行者ロールが割り当てられている必要があります。
Azure Monitor ワークスペースのリソース メニューで、[概要] を選びます。 [データ収集ルール] で、リンクを選びます。
データ収集ルールのリソース メニューで、[アクセス制御 (IAM)] を選びます。
追加を選択し、ロール割り当ての追加を選択します。
[監視メトリック発行者] ロールを選択して、[次へ] を選択します。
[ユーザー、グループ、またはサービス プリンシパル] を選んでから、[メンバーの選択] を選びます。 作成したアプリケーションを選び、[選択] を選びます。
ロールの割り当てを完了するには、[レビューと割り当て] を選びます。
Azure キー コンテナーを作成して証明書を生成する
- Azure キー コンテナーがまだない場合は、コンテナーを作成します。
- 「証明書を Key Vault に追加する」のガイダンスを使用して証明書を作成します。
- 「Key Vault から証明書をエクスポートする」のガイダンスを使用して、証明書を CER 形式でダウンロードします。
Microsoft Entra アプリケーションに証明書を追加する
Microsoft Entra アプリケーションのリソース メニューで、[証明書とシークレット] を選びます。
[証明書] タブで、[証明書のアップロード] を選び、ダウンロードした証明書を選びます。
警告
証明書には有効期限があります。 証明書を有効に保つのはユーザーの責任です。
クラスター用の CSI ドライバーとストレージを追加する
Note
Azure Key Vault の CSI ドライバーの構成は、ポッドにマウントされた証明書を取得する方法の 1 つにすぎません。 リモート書き込みコンテナーには、「サイドカー コンテナーをデプロイしてリモート書き込みを設定する」の手順の <AZURE_CLIENT_CERTIFICATE_PATH>
値に対してのみ、ポッド内の証明書へのローカル パスが必要です。
この手順は、クラスターの作成時にシークレット ストア CSI ドライバーの Azure Key Vault プロバイダーを有効にしなかった場合にのみ必要です。
クラスターのシークレット ストア CSI ドライバーの Azure Key Vault プロバイダーを有効にするには、次の Azure CLI コマンドを実行します。
az aks enable-addons --addons azure-keyvault-secrets-provider --name <aks-cluster-name> --resource-group <resource-group-name>
ID にキー コンテナーへのアクセス権を付与するには、次のコマンドを実行します。
# show client id of the managed identity of the cluster az aks show -g <resource-group> -n <cluster-name> --query addonProfiles.azureKeyvaultSecretsProvider.identity.clientId -o tsv # set policy to access keys in your key vault az keyvault set-policy -n <keyvault-name> --key-permissions get --spn <identity-client-id> # set policy to access secrets in your key vault az keyvault set-policy -n <keyvault-name> --secret-permissions get --spn <identity-client-id> # set policy to access certs in your key vault az keyvault set-policy -n <keyvault-name> --certificate-permissions get --spn <identity-client-id>
次の YAML を secretproviderclass.yml という名前のファイルに保存して、
SecretProviderClass
を作成します。 キー コンテナーから取得するuserAssignedIdentityID
、keyvaultName
、tenantId
、オブジェクトの値を置き換えます。 使用する値の詳細については、Azure Key Vault プロバイダーにアクセスするための ID をシークレット ストア CSI ドライバーに提供するに関するページを参照してください。# This is a SecretProviderClass example using user-assigned identity to access your key vault apiVersion: secrets-store.csi.x-k8s.io/v1 kind: SecretProviderClass metadata: name: azure-kvname-user-msi spec: provider: azure parameters: usePodIdentity: "false" useVMManagedIdentity: "true" # Set to true for using managed identity userAssignedIdentityID: <client-id> # Set the client ID of the user-assigned managed identity to use keyvaultName: <key-vault-name> # Set to the name of your key vault cloudName: "" # [OPTIONAL for Azure] if not provided, the Azure environment defaults to AzurePublicCloud objects: | array: - | objectName: <name-of-cert> objectType: secret # object types: secret, key, or cert objectFormat: pfx objectEncoding: base64 objectVersion: "" tenantId: <tenant-id> # The tenant ID of the key vault
お使いのクラスターで次のコマンドを実行して、
SecretProviderClass
を適用します。kubectl apply -f secretproviderclass.yml
サイドカー コンテナーをデプロイしてリモート書き込みを設定する
次の YAML をコピーし、ファイルに保存します。 この YAML では、リッスン ポートとしてポート 8081 が使用されます。 別のポートを使用する場合は、YAML でその値を変更してください。
prometheus: prometheusSpec: externalLabels: cluster: <CLUSTER-NAME> ## Azure Managed Prometheus currently exports some default mixins in Grafana. ## These mixins are compatible with data scraped by Azure Monitor agent on your ## Azure Kubernetes Service cluster. These mixins aren't compatible with Prometheus ## metrics scraped by the Kube Prometheus stack. ## To make these mixins compatible, uncomment the 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 ## https://prometheus.io/docs/prometheus/latest/configuration/configuration/#remote_write remoteWrite: - url: 'http://localhost:8081/api/v1/write' # Additional volumes on the output StatefulSet definition. # Required only for Microsoft Entra ID based auth volumes: - name: secrets-store-inline csi: driver: secrets-store.csi.k8s.io readOnly: true volumeAttributes: secretProviderClass: azure-kvname-user-msi containers: - name: prom-remotewrite image: <CONTAINER-IMAGE-VERSION> imagePullPolicy: Always # Required only for Microsoft Entra ID based auth volumeMounts: - name: secrets-store-inline mountPath: /mnt/secrets-store readOnly: true 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: aadApplication - name: AZURE_CLIENT_ID value: '<APP-REGISTRATION-CLIENT-ID>' - name: AZURE_TENANT_ID value: '<TENANT-ID>' - name: AZURE_CLIENT_CERTIFICATE_PATH value: /mnt/secrets-store/<CERT-NAME> - name: CLUSTER value: '<CLUSTER-NAME>'
YAML ファイル内の次の値を置き換えます。
Value 説明 <CLUSTER-NAME>
AKS クラスターの名前。 <CONTAINER-IMAGE-VERSION>
mcr.microsoft.com/azuremonitor/containerinsights/ciprod/prometheus-remote-write/images:prom-remotewrite-20240617.1
リモート書き込みコンテナー イメージのバージョン。<INGESTION-URL>
Azure Monitor ワークスペースの [概要] ページの [メトリック インジェスト エンドポイント] の値。 <APP-REGISTRATION -CLIENT-ID>
お使いのアプリケーションのクライアント ID。 <TENANT-ID>
Microsoft Entra アプリケーションのテナント ID。 <CERT-NAME>
証明書の名前です。 <CLUSTER-NAME>
Prometheus が実行されているクラスターの名前。 Azure Cloud Shell を開き、YAML ファイルをアップロードします。
Helm を使って YAML ファイルを適用し、Prometheus 構成を更新します。
# set the 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 用マネージド サービスでのリモート書き込み
- マネージド ID 認証を使用して Prometheus データを Azure Monitor に送信する
- Microsoft Entra ワークロード ID (プレビュー) 認証を使用して Prometheus データを Azure Monitor に送信する
- Microsoft Entra ポッドマネージド ID (プレビュー) 認証を使用して Prometheus データを Azure Monitor に送信する