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 autogerenciado do Prometheus em execução no seu cluster do Serviço de Kubernetes do Azure (AKS) ou no cluster do Kubernetes habilitado para o Azure Arc usando a autenticação do Microsoft Entra e um contêiner sidecar fornecido pelo Azure Monitor. Observe que você também pode configurar a gravação remota diretamente na configuração do Prometheus para fazer o mesmo.
Observação
Recomendamos que você configure diretamente o Prometheus em execução no seu cluster do Kubernetes para gravação remota no Workspace do Azure Monitor. Confira Enviar dados do Prometheus para o Azure Monitor usando a autenticação do Microsoft Entra ID para saber mais. As etapas abaixo usam o contêiner sidecar do Azure Monitor.
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
Esse 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:
- Registre um aplicativo com o Microsoft Entra ID.
- Obtenha a ID do cliente do aplicativo do Microsoft Entra.
- Atribuir ao aplicativo a função de Publicador de Métricas de Monitoramento na regra de coleta de dados do workspace.
- Criar um cofre de chaves do Azure e gerar um certificado.
- Adicionar um certificado ao aplicativo Microsoft Entra.
- Adicionar um driver CSI e um armazenamento ao cluster.
- 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
- No portal do Azure, acesse o menu Microsoft Entra ID e selecione Registros de aplicativo.
- Na lista de aplicativos, copie o valor ID do aplicativo (cliente) do aplicativo registrado.
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.
No menu de recursos do seu workspace do Azure Monitor, selecione Visão geral. Para a Regra de coleta de dados, selecione o link.
No menu de recursos da regra de coleta de dados, selecione Controle de acesso (IAM).
Selecione Adicionar e selecione Adicionar atribuição de função.
Escolha a função Publicador de Métricas de Monitoramento e, em seguida, selecione Próximo.
Escolha Usuário, grupo ou entidade de serviço e escolha Selecionar membros. Selecione o aplicativo que você criou e escolha Selecionar.
Para finalizar a atribuição de função, clique em Revisar + atribuir.
Criar um cofre de chaves do Azure e gerar um certificado
- Caso você ainda não tenha um cofre de chaves do Azure, crie um cofre.
- Crie um certificado usando as diretrizes descritas em Adicionar um certificado ao Key Vault.
- Baixe o certificado em formato CER seguindo as orientações em Exportar um certificado do Key Vault.
Adicionar um certificado ao aplicativo Microsoft Entra
No menu de recursos do seu aplicativo Microsoft Entra, selecione Certificados e segredos.
Na guia Certificados, selecione Carregar certificado e escolha o certificado que você baixou.
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.
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>
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>
Crie
SecretProviderClass
salvando o YAML abaixo em um arquivo chamado secretproviderclass.yml. Substitua os valores deuserAssignedIdentityID
,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
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
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>'
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/containerinsights/ciprod/prometheus-remote-write/images:prom-remotewrite-20240617.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. Abra o Azure Cloud Shell e carregue um arquivo YAML.
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 sobre 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
- Colete métricas do Prometheus a partir do cluster do AKS
- Saiba mais sobre o serviço gerenciado do Azure Monitor para Prometheus
- Gravação remota no serviço gerenciado do Azure Monitor para Prometheus
- Enviar dados do Prometheus para o Azure Monitor usando a autenticação de identidade gerenciada
- Enviar dados do Prometheus para o Azure Monitor usando a autenticação da ID de carga de trabalho do Microsoft Entra (em versão prévia)
- Enviar dados do Prometheus para o Azure Monitor usando a autenticação a identidade gerenciada pelo pod do Microsoft Entra (em versão prévia)