Поделиться через


Отправка данных Prometheus в Azure Monitor с помощью проверки подлинности Microsoft Entra

В этой статье описывается, как настроить удаленную запись для отправки данных с самостоятельно управляемого сервера Prometheus, работающего в кластере службы Azure Kubernetes (AKS) или кластере Kubernetes с поддержкой Azure Arc, используя аутентификацию Microsoft Entra и боковой контейнер, который предоставляет Azure Monitor. Обратите внимание, что вы также можете напрямую настроить удаленную запись в конфигурации Prometheus для этой цели.

Примечание.

Мы рекомендуем напрямую настроить Prometheus, работающий в вашем кластере Kubernetes, для записи данных через удаленное подключение в рабочую область Azure Monitor. Дополнительные сведения см. в статье Отправка данных Prometheus в Azure Monitor с авторизацией Microsoft Entra Id. В приведенных ниже действиях используется побочный контейнер Azure Monitor.

Конфигурации кластера

Эта статья относится к следующим конфигурациям кластера:

  • Кластер Службы Azure Kubernetes
  • Кластер Kubernetes с поддержкой Azure Arc
  • Кластер Kubernetes, работающий в другом облаке или локальной среде

Примечание.

Для кластера AKS или кластера Kubernetes с включенной поддержкой Azure Arc мы рекомендуем использовать аутентификацию с помощью управляемой идентичности. Дополнительные сведения см. в разделе об управляемой службе Azure Monitor для удаленной записи Prometheus с использованием управляемого удостоверения.

Предварительные условия

Поддерживаемые версии

  • Версии Prometheus, превышающие версию 2.48, необходимы для проверки подлинности приложения Идентификатора Microsoft Entra.

Рабочая область Azure Monitor

В этой статье описывается отправка метрик Prometheus в рабочую область Azure Monitor. Сведения о создании рабочей области Azure Monitor см. в статье "Управление рабочей областью Azure Monitor".

Разрешения

Разрешения администратора для кластера или ресурса необходимы для выполнения действий, описанных в этой статье.

Настройка приложения для идентификатора Microsoft Entra

Процесс настройки удаленной записи Prometheus для приложения с помощью проверки подлинности Microsoft Entra включает выполнение следующих задач:

  1. Регистрация приложения с Microsoft Entra ID.
  2. Получите идентификатор клиента приложения Microsoft Entra.
  3. Назначьте приложению роль публикации метрик мониторинга в правиле сбора данных рабочей области.
  4. Создайте хранилище ключей Azure и создайте сертификат.
  5. Добавьте сертификат в приложение Microsoft Entra.
  6. Добавьте драйвер И хранилище CSI для кластера.
  7. Разверните побочный контейнер для настройки удаленной записи.

Задачи описаны в следующих разделах.

Регистрация приложения с помощью идентификатора Microsoft Entra

Выполните шаги для регистрации приложения в Microsoft Entra ID и создания учетной записи для службы.

Получение идентификатора клиента приложения Microsoft Entra

  1. В портал Azure перейдите в меню идентификатора Microsoft Entra ID и выберите Регистрация приложений.
  2. В списке приложений скопируйте значение для идентификатора приложения (клиента) для зарегистрированного приложения.

Снимок экрана: идентификатор приложения или клиента приложения Microsoft Entra.

Назначьте приложению роль издателя метрик мониторинга в правиле сбора данных рабочей области

Приложение должно быть назначено роли издателя метрик мониторинга в правиле сбора данных, связанном с рабочей областью Azure Monitor.

  1. В меню ресурсов для рабочей области Azure Monitor выберите "Обзор". Для правила сбора данных выберите ссылку.

    Снимок экрана: правило сбора данных, используемое рабочей областью Azure Monitor.

  2. В меню ресурсов для правила сбора данных выберите элемент управления доступом (IAM).

  3. Выберите Добавить, затем выберите Добавить назначение ролей.

    Снимок экрана: добавление назначения ролей на страницах управления доступом.

  4. Выберите роль издателя метрик мониторинга и нажмите кнопку "Далее".

    Снимок экрана: список назначений ролей.

  5. Выберите "Пользователь", "Группа" или "Субъект-служба", а затем выберите "Выбрать участников". Выберите созданное приложение и нажмите кнопку "Выбрать".

    Снимок экрана: выбор приложения.

  6. Чтобы завершить назначение роли, нажмите кнопку "Проверить и назначить".

Создание хранилища ключей Azure и создание сертификата

  1. Если у вас еще нет хранилища ключей Azure, создайте хранилище.
  2. Создайте сертификат с помощью руководства по добавлению сертификата в Key Vault.
  3. Скачайте сертификат в формате CER с помощью руководства по экспорту сертификата из Key Vault.

Добавление сертификата в приложение Microsoft Entra

  1. В меню ресурсов для приложения Microsoft Entra выберите сертификаты и секреты.

  2. На вкладке "Сертификаты" выберите "Отправить сертификат " и выберите скачанный сертификат.

    Снимок экрана: отправка сертификата для приложения Microsoft Entra.

Предупреждение

Сертификаты имеют дату окончания срока действия. Это ответственность пользователя за хранение сертификатов.

Добавление драйвера и хранилища CSI для кластера

Примечание.

Конфигурация драйвера CSI для Azure Key Vault — это только один из способов монтирования сертификата в поде. Контейнеру удаленной записи требуется локальный путь к сертификату в pod только для значения в шаге «Развернуть контейнер сайдкар для настройки удаленной записи».

Этот шаг необходим, только если при создании кластера вы не включили поставщика Azure Key Vault для CSI-драйвера хранилища секретов.

  1. Чтобы включить поставщик Azure Key Vault для драйвера хранилища секретов CSI для кластера, выполните следующую команду Azure CLI:

    az aks enable-addons --addons azure-keyvault-secrets-provider --name <aks-cluster-name> --resource-group <resource-group-name>
    
  2. Чтобы предоставить удостоверению доступ к хранилищу ключей, выполните следующие команды:

    # 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>
    
  3. Создайте SecretProviderClass , сохранив следующий YAML в файл с именем secretproviderclass.yml. Замените значения для userAssignedIdentityID, keyvaultName, tenantId, а также объекты, которые нужно извлечь из хранилища ключей. Для получения информации о значениях, которые нужно использовать, см. раздел "Предоставление удостоверения для доступа к Azure Key Vault для 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
    
  4. Для применения SecretProviderClass выполните следующую команду в вашем кластере:

    kubectl apply -f secretproviderclass.yml
    

Развернуть контейнер-побочник для настройки удаленной записи

  1. Скопируйте следующий 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>'
    
  2. Замените следующие значения в ФАЙЛЕ YAML:

    значение Описание
    <CLUSTER-NAME> Имя кластера AKS.
    <CONTAINER-IMAGE-VERSION> mcr.microsoft.com/azuremonitor/containerinsights/ciprod/prometheus-remote-write/images:prom-remotewrite-20250326.1
    Версия образа контейнера для удаленной записи.
    <INGESTION-URL> Значение конечной точки приема метрик на странице обзора рабочей области Azure Monitor.
    <APP-REGISTRATION -CLIENT-ID> Идентификатор клиента приложения.
    <TENANT-ID> Идентификатор клиента приложения Microsoft Entra.
    <CERT-NAME> Имя сертификата.
    <CLUSTER-NAME> Имя кластера, на котором работает Prometheus.
  3. Откройте Azure Cloud Shell и отправьте ФАЙЛ YAML.

  4. Используйте 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.

Следующие шаги