Enviar dados do Prometheus para o Azure Monitor usando a autenticação de Microsoft Entra

Este artigo explica como configurar a gravação remota para enviar dados de um servidor do Prometheus autogerenciado em execução no seu cluster do AKS ou em um cluster do Kubernetes habilitado para Azure Arc, utilizando autenticação do Microsoft Entra.

Configurações de cluster

Este artigo se aplica às seguintes configurações de cluster:

  • Cluster do Serviço de Kubernetes do Azure
  • Cluster do Kubernetes habilitado para Azure Arc
  • O cluster Kubernetes em execução em uma nuvem ou local diferente

Observação

Para um cluster do AKS ou um cluster Kubernetes habilitado para Azure Arc, recomendamos que você use a autenticação de identidade gerenciada. Para mais informações, veja Serviço gerenciado do Azure Monitor para gravação remota do Prometheus.

Pré-requisitos

Versões suportadas

  • Versões do Prometheus acima da v2.48 são necessárias para a autenticação de aplicativo do Microsoft Entra ID.

Workspace do Azure Monitor

Este artigo aborda o envio de métricas do Prometheus para um workspace do Azure Monitor. Para criar um workspace do Azure Monitor, confira Gerenciar um workspace do Azure Monitor.

Permissões

Permissões de administrador para o cluster ou recurso são necessárias para concluir as etapas neste artigo.

Configurar um aplicativo para o Microsoft Entra ID

O processo de configuração da gravação remota do Prometheus para um aplicado usando a autenticação do Microsoft Entra inclui as seguintes etapas:

  1. Registre um aplicativo com o Microsoft Entra ID.
  2. Obtenha a ID do cliente do aplicativo do Microsoft Entra.
  3. Atribuir ao aplicativo a função de Publicador de Métricas de Monitoramento na regra de coleta de dados do workspace.
  4. Criar um cofre de chaves do Azure e gerar um certificado.
  5. Adicionar um certificado ao aplicativo Microsoft Entra.
  6. Adicionar um driver CSI e um armazenamento ao cluster.
  7. Implantar um contêiner sidecar para configurar a gravação remota.

As tarefas são descritas nas seções a seguir.

Registrar um aplicativo com o Microsoft Entra ID

Conclua as etapas para registrar um aplicativo com o Microsoft Entra ID e criar uma entidade de serviço.

Obter a ID do cliente do aplicativo Microsoft Entra

  1. No portal do Azure, acesse o menu Microsoft Entra ID e selecione Registros de aplicativo.
  2. Na lista de aplicativos, copie o valor ID do aplicativo (cliente) do aplicativo registrado.

Captura de tela que mostra o aplicativo ou ID do cliente de um aplicativo Microsoft Entra.

Atribuir ao aplicativo a função de Publicador de Métricas de Monitoramento na regra de coleta de dados do workspace

O aplicativo precisar ter a função Publicador de Métricas de Monitoramento na regra de coleta de dados que está associada ao workspace do Azure Monitor.

  1. No menu de recursos do seu workspace do Azure Monitor, selecione Visão geral. Para a Regra de coleta de dados, selecione o link.

    Captura de tela que mostra a regra de coleta de dados usada pelo espaço de trabalho do Azure Monitor.

  2. No menu de recursos da regra de coleta de dados, selecione Controle de acesso (IAM).

  3. Selecione Adicionar e selecione Adicionar atribuição de função.

    Captura de tela que mostra a adição de uma atribuição de função nas páginas de controle de acesso.

  4. Escolha a função Publicador de Métricas de Monitoramento e, em seguida, selecione Próximo.

    Captura de tela que mostra uma lista de atribuições de função.

  5. Escolha Usuário, grupo ou entidade de serviço e escolha Selecionar membros. Selecione o aplicativo que você criou e escolha Selecionar.

    Captura de tela que mostra a seleção do aplicativo.

  6. Para finalizar a atribuição de função, clique em Revisar + atribuir.

Criar um cofre de chaves do Azure e gerar um certificado

  1. Caso você ainda não tenha um cofre de chaves do Azure, crie um cofre.
  2. Crie um certificado usando as diretrizes descritas em Adicionar um certificado ao Key Vault.
  3. Baixe o certificado em formato CER seguindo as orientações em Exportar um certificado do Key Vault.

Adicionar um certificado ao aplicativo Microsoft Entra

  1. No menu de recursos do seu aplicativo Microsoft Entra, selecione Certificados e segredos.

  2. Na guia Certificados, selecione Carregar certificado e escolha o certificado que você baixou.

    Captura de tela que mostra o carregamento de um certificado para um aplicativo do Microsoft Entra.

Aviso

Os certificados têm uma data de validade. É responsabilidade do usuário manter os certificados dentro da validade.

Adicionar um driver CSI e um armazenamento ao cluster

Observação

A configuração do driver CSI do Azure Key Vault é apenas uma das formas de montar o certificado em um pod. O contêiner responsável pela gravação remota só precisa de um caminho local para um certificado dentro do pod para o valor <AZURE_CLIENT_CERTIFICATE_PATH> na etapa Implantar um contêiner sidecar para configurar a gravação remota.

Essa etapa só será necessária se você não ativou o Provedor do Azure Key Vault para o Driver CSI do Repositório de Segredos quando você criou o cluster.

  1. Para ativar o Provedor do Azure Key Vault para o Driver CSI do Repositório de Segredos no seu cluster, execute o seguinte comando da CLI do Azure:

    az aks enable-addons --addons azure-keyvault-secrets-provider --name <aks-cluster-name> --resource-group <resource-group-name>
    
  2. Para permitir que a identidade tenha acesso ao cofre de chaves, execute os comandos a seguir:

    # 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. Crie SecretProviderClass salvando o YAML abaixo em um arquivo chamado secretproviderclass.yml. Substitua os valores de userAssignedIdentityID, keyvaultName, tenantId e os objetos a serem recuperados do cofre de chaves. Para saber quais valores utilizar, confira Fornecer uma identidade para acessar o Provedor do Azure Key Vault para o Driver CSI do Repositório de Segredos.

    # 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. Para aplicar SecretProviderClass, execute o comando a seguir no seu cluster:

    kubectl apply -f secretproviderclass.yml
    

Implantar um contêiner sidecar para configurar a gravação remota

  1. Copie o YAML a seguir e salve-o em um arquivo. O YAML utiliza a porta 8081 como porta de escuta. Se você estiver usando uma porta diferente, modifique esse valor no 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. Substitua os valores a seguir no arquivo YAML:

    Valor Descrição
    <CLUSTER-NAME> O nome do cluster do AKS.
    <CONTAINER-IMAGE-VERSION> mcr.microsoft.com/azuremonitor/prometheus/promdev/prom-remotewrite:prom-remotewrite-20230906.1
    Essa é a versão da imagem de contêiner de gravação remota.
    <INGESTION-URL> O valor do Ponto de extremidade da ingestão de métricas na página de Visão geral do workspace do Azure Monitor.
    <APP-REGISTRATION -CLIENT-ID> A ID do cliente do seu aplicativo.
    <TENANT-ID> A ID do locatário do aplicativo Microsoft Entra.
    <CERT-NAME> O nome do certificado.
    <CLUSTER-NAME> O nome do cluster onde o Prometheus está em execução.
  3. Abra o Azure Cloud Shell e carregue um arquivo YAML.

  4. Use o Helm para aplicar o arquivo YAML e atualizar a configuração do 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> 
    

Verificação e solução de problemas

Para obter informações de verificação e solução de problemas, veja Solução de problemas de gravação remota e Serviço gerenciado do Azure Monitor para gravação remota do Prometheus.

Próximas etapas