マネージド ID 認証を使用して Prometheus データを Azure Monitor に送信する

この記事では、マネージド ID 認証を使用して Azure Kubernetes Service (AKS) クラスターまたは Azure Arc 対応 Kubernetes クラスターで実行されているセルフマネージド Prometheus サーバーからデータを送信するためにリモート書き込みを設定する方法について説明します。 AKS によって作成された既存の ID を使用することも、独自の ID を作成することもできます。 ここでは、両方のオプションについて説明します。

クラスター構成

この記事は、次のクラスター構成に適用されます。

  • 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 リモート書き込みを設定するプロセスでは、次のタスクを完了する必要があります。

  1. AKS ノード リソース グループの名前を取得する。
  2. ユーザー割り当てマネージド ID のクライアント ID を取得する。
  3. ワークスペース データ収集規則に対する監視メトリック発行者ロールをマネージド ID に割り当てる。
  4. AKS クラスターにマネージド ID へのアクセス権を付与する。
  5. サイドカー コンテナーをデプロイしてリモート書き込みを設定する。

次の各セクションで、これらのタスクについて説明します。

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 を示すスクリーンショット。

ワークスペース データ収集規則に対する監視メトリック発行者ロールをマネージド ID に割り当てる

マネージド ID には、Azure Monitor ワークスペースに関連付けられているデータ収集規則に対する監視メトリック発行者ロールが必要です。

  1. Azure Monitor ワークスペースのリソース メニューで、[概要] を選択します。 [データ収集ルール] で、リンクを選びます。

    Azure Monitor ワークスペースに関連付けられているデータ収集ルールを示すスクリーンショット。

  2. データ収集ルールのリソース メニューで、[アクセス制御 (IAM)] を選びます。

  3. 追加を選択し、ロール割り当ての追加を選択します。

    アクセス制御ページでのロールの割り当ての追加を示すスクリーンショット。

  4. [監視メトリック発行者] ロールを選択して、[次へ] を選択します。

    ロールの割り当ての一覧を示すスクリーンショット。

  5. [マネージド ID] を選択し、[メンバーの選択] を選びます。 ユーザー割り当て ID を含むサブスクリプションを選択し、[ユーザー割り当てマネージド ID] を選びます。 使用するユーザー割り当て ID を選択し、[選択] を選びます。

    ユーザー割り当てマネージド ID の選択を示すスクリーンショット。

  6. ロールの割り当てを完了するには、[レビューと割り当て] を選択します。

AKS クラスターにマネージド ID へのアクセス権を付与する

AKS ID を使用している場合、この手順は必要ありません。 AKS ID は既にクラスターにアクセスできます。

重要

このセクションの手順を完了するには、クラスターの所有者またはユーザー アクセス管理者のアクセス許可が必要です。

  1. AKS クラスターのノード リソース グループ内で、仮想マシン スケール セットを特定します。

    ノード リソース グループ内の仮想マシン スケール セットを示すスクリーンショット。

  2. 仮想マシン スケール セットごとに、Azure CLI で次のコマンドを実行します。

    az vmss identity assign -g <AKS-NODE-RESOURCE-GROUP> -n <AKS-VMSS-NAME> --identities <USER-ASSIGNED-IDENTITY-RESOURCE-ID>
    

サイドカー コンテナーをデプロイしてリモート書き込みを設定する

  1. 次の 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>
    
  2. YAML 内の次の値を置き換えます。

    Value 説明
    <AKS-CLUSTER-NAME> AKS クラスターの名前。
    <CONTAINER-IMAGE-VERSION> mcr.microsoft.com/azuremonitor/prometheus/promdev/prom-remotewrite:prom-remotewrite-20230906.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/

  3. Azure Cloud Shell を開き、YAML ファイルをアップロードします。

  4. 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 用マネージド サービスのリモート書き込み」を参照してください。

次のステップ