Partilhar via


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

Este artigo descreve como configurar a gravação remota para enviar dados de um servidor Prometheus autogerenciado em execução no cluster do Serviço Kubernetes do Azure (AKS) ou no cluster do Kubernetes habilitado para Azure Arc usando a autenticação do Microsoft Entra e um contêiner de carro lateral fornecido pelo Azure Monitor. Observe que você também pode configurar diretamente a gravação remota na configuração do Prometheus para o mesmo.

Nota

Recomendamos que você configure diretamente o Prometheus em execução em seu cluster Kubernetes para gravar remotamente no Espaço de Trabalho do Azure Monitor. Consulte Enviar dados do Prometheus para o Azure Monitor usando a autenticação Microsoft Entra Id para saber mais. As etapas abaixo usam o contêiner de carro lateral do Azure Monitor.

Configurações de clusters

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

  • Cluster do Azure Kubernetes Service
  • Cluster do Kubernetes habilitado para Azure Arc
  • Cluster Kubernetes em execução em uma nuvem diferente ou local

Nota

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

Pré-requisitos

Versões suportadas

  • São necessárias versões do Prometheus superiores à v2.48 para a autenticação da aplicação Microsoft Entra ID.

Espaço de trabalho do Azure Monitor

Este artigo aborda o envio de métricas do Prometheus para um espaço de trabalho do Azure Monitor. Para criar um espaço de trabalho de monitor do Azure, consulte Gerenciar um espaço de trabalho do Azure Monitor.

Permissões

As 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 para configurar a gravação remota do Prometheus para um aplicativo usando a autenticação do Microsoft Entra envolve a conclusão das seguintes tarefas:

  1. Registe uma aplicação com o Microsoft Entra ID.
  2. Obtenha a ID do cliente do aplicativo Microsoft Entra.
  3. Atribua a função Monitoring Metrics Publisher na regra de coleta de dados do espaço de trabalho ao aplicativo.
  4. Crie um cofre de chaves do Azure e gere um certificado.
  5. Adicione um certificado ao aplicativo Microsoft Entra.
  6. Adicione um driver CSI e armazenamento para o cluster.
  7. Implante um contêiner sidecar para configurar a gravação remota.

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

Registar uma aplicação 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, vá para o menu ID do Microsoft Entra e selecione Registros de aplicativos.
  2. Na lista de aplicativos, copie o valor para ID do aplicativo (cliente) para o aplicativo registrado.

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

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

O aplicativo deve receber a função Monitoring Metrics Publisher na regra de coleta de dados associada ao seu espaço de trabalho do Azure Monitor.

  1. No menu de recursos para seu espaço de trabalho do Azure Monitor, selecione Visão geral. Para Regra de coleta de dados, selecione o link.

    Captura de ecrã que mostra a regra de recolha de dados utilizada pela área 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, em seguida, selecione Adicionar atribuição de função.

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

  4. Selecione a função Publicador de Métricas de Monitoramento e selecione Avançar.

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

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

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

  6. Para concluir a atribuição de função, selecione Rever + atribuir.

Criar um cofre de chaves do Azure e gerar um certificado

  1. Se ainda não tiver um cofre de chaves do Azure, crie um cofre.
  2. Crie um certificado usando as orientações em Adicionar um certificado ao Cofre de Chaves.
  3. Baixe o certificado no formato CER usando as orientações em Exportar um certificado do Cofre da Chave.

Adicionar um certificado ao aplicativo Microsoft Entra

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

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

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

Aviso

Os certificados têm uma data de validade. É da responsabilidade do utilizador manter os certificados válidos.

Adicionar um driver CSI e armazenamento para o cluster

Nota

A configuração do driver CSI do Azure Key Vault é apenas uma das maneiras de obter um certificado montado em um pod. O contêiner de gravação remota precisa de um caminho local para um certificado no pod apenas para o <AZURE_CLIENT_CERTIFICATE_PATH> valor na etapa Implantar um contêiner sidecar para configurar a gravação remota.

Esta etapa é necessária somente se você não ativou o Provedor do Cofre de Chaves do Azure para o Driver CSI do Repositório de Segredos quando criou o cluster.

  1. Para ativar o Azure Key Vault Provider for Secrets Store CSI Driver para 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 dar à identidade acesso ao cofre de chaves, execute estes comandos:

    # 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 seguinte YAML em um arquivo chamado secretproviderclass.yml. Substitua os valores de userAssignedIdentityID, keyvaultName, tenantIde os objetos a serem recuperados do cofre de chaves. Para obter informações sobre quais valores usar, consulte Fornecer uma identidade para acessar o Provedor do Cofre de Chaves do Azure 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. Aplique SecretProviderClass executando o seguinte comando no cluster:

    kubectl apply -f secretproviderclass.yml
    

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

  1. Copie o seguinte YAML e salve-o em um arquivo. O YAML usa a porta 8081 como porta de escuta. Se você usar 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 seguintes valores no arquivo YAML:

    valor Description
    <CLUSTER-NAME> O nome do seu cluster AKS.
    <CONTAINER-IMAGE-VERSION> mcr.microsoft.com/azuremonitor/containerinsights/ciprod/prometheus-remote-write/images:prom-remotewrite-20240617.1
    A versão da imagem do contêiner de gravação remota.
    <INGESTION-URL> O valor do ponto de extremidade de ingestão de métricas na página Visão geral do espaço de trabalho 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 no qual o Prometheus está sendo executado.
  3. Abra o Azure Cloud Shell e carregue o arquivo YAML.

  4. Use o Helm para aplicar o arquivo YAML e atualizar sua 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 resolução de problemas

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

Próximos passos