Compartir a través de


Envío de datos de Prometheus a Azure Monitor mediante la autenticación de Microsoft Entra

En este artículo se describe cómo configurar la escritura remota para enviar datos desde un servidor Prometheus autoadministrado que se ejecuta en el clúster de Azure Kubernetes Service (AKS) o el clúster de Kubernetes habilitado para Azure Arc mediante la autenticación de Microsoft Entra y un contenedor de sidecar proporcionado por Azure Monitor. Tenga en cuenta que también puede configurar directamente la escritura remota en la configuración de Prometheus para lo mismo.

Nota:

Se recomienda configurar directamente Prometheus en ejecución en el clúster de Kubernetes para escribir de forma remota en el área de trabajo de Azure Monitor. Vea Envío de datos de Prometheus a Azure Monitor mediante la autenticación de Microsoft Entra ID para más información. En los pasos siguientes se usa el contenedor de sidecar de Azure Monitor.

Configuraciones de clústeres

Este artículo se aplica a las configuraciones de clúster siguientes:

  • Clúster de Azure Kubernetes Service
  • Clúster de Kubernetes habilitado para Azure Arc
  • Clúster de Kubernetes que se ejecuta en el entorno local o en otra nube

Nota:

Para un clúster de AKS o un clúster de Kubernetes habilitado para Azure Arc, se recomienda usar la autenticación de identidad administrada. Para más información, consulte Servicio administrado de Azure Monitor para escritura remota de Prometheus para la identidad administrada.

Requisitos previos

Versiones compatibles

  • Las versiones de Prometheus superiores a v2.48 son necesarias para la autenticación de la aplicación de id. de Microsoft Entra.

Área de trabajo de Azure Monitor

En este artículo se describe el envío de métricas de Prometheus a un área de trabajo de Azure Monitor. Para crear un área de trabajo de Azure Monitor, consulte Administrar un área de trabajo de Azure Monitor.

Permisos

Los permisos de administrador para el clúster o recurso son necesarios para completar los pasos descritos en este artículo.

Configuración de una aplicación para Microsoft Entra ID

El proceso para configurar la escritura remota de Prometheus para una aplicación mediante la autenticación de Microsoft Entra implica completar las tareas siguientes:

  1. Registrar una aplicación con Microsoft Entra ID.
  2. Obtenga el identificador de cliente de la aplicación de Microsoft Entra.
  3. Asignar a la aplicación el rol Editor de métricas de monitorización en la regla de recogida de datos del área de trabajo.
  4. Crear un almacén de claves de Azure y generación del certificado.
  5. Agregar un certificado a la aplicación de Microsoft Entra.
  6. Agregar un controlador CSI y un almacenamiento para el clúster.
  7. Implementar un contenedor sidecar para configurar la escritura remota.

Los formatos se describen en las secciones siguientes.

Registro de una aplicación con la Microsoft Entra ID

Completar los pasos para registrar una aplicación con Microsoft Entra ID y crear una entidad de servicio.

Obtenga el id. de cliente de la aplicación de Microsoft Entra

  1. En el menú Microsoft Entra ID en Azure Portal, seleccione Registros de aplicaciones.
  2. En la lista de aplicaciones, copie el valor de Id. de aplicación (cliente) para la aplicación registrada.

Captura de pantalla que muestra la aplicación o el id. de cliente de una aplicación Microsoft Entra.

Asignar a la aplicación el rol Editor de métricas de monitorización en la regla de recogida de datos del área de trabajo

La aplicación debe tener asignado el rol Editor de métricas de monitorización en la regla de recopilación de datos asociada a tu área de trabajo de Azure Monitor.

  1. En el menú de recursos del área de trabajo de Azure Monitor, seleccione Información general. Para Regla de recopilación de datos, seleccione el vínculo.

    Captura de pantalla que muestra la regla de recopilación de datos que usa el área de trabajo de Azure Monitor.

  2. En el menú de recursos de la regla de recopilación de datos, seleccione Control de acceso (IAM).

  3. Seleccione Agregar y, después, Agregar asignación de roles.

    Captura de pantalla que muestra cómo agregar una asignación de roles en las páginas de control de acceso.

  4. Seleccione el rol Publicador de métricas de supervisión y, a continuación, seleccione Siguiente.

    Captura de pantalla que muestra una lista de asignaciones de roles.

  5. Seleccione Usuario, grupo o entidad de servicio y, después, escoja Seleccionar miembros. Seleccione la aplicación que creó y, después, elija Seleccionar.

    Captura de pantalla que muestra la selección de la aplicación.

  6. Para completar la asignación de roles, seleccione Revisar y asignar.

Creación de un almacén de claves de Azure y generación del certificado

  1. Si aún no tiene un almacén de claves de Azure, cree un almacén.
  2. Cree un certificado con la guía en Agregar un certificado a Key Vault.
  3. Descargue el certificado en formato CER mediante las instrucciones de Exportación de un certificado desde Key Vault.

Agregar un certificado a la aplicación de Microsoft Entra

  1. En el menú de la aplicación de Microsoft Entra, seleccione Certificados y secretos.

  2. En la pestaña Certificados, seleccione Cargar certificado y seleccione el certificado que descargó.

    Captura de pantalla que muestra cómo cargar un certificado para una aplicación de Microsoft Entra.

Advertencia

Los certificados tienen una fecha de expiración. Es responsabilidad del usuario mantener los certificados válidos.

Adición de un controlador CSI y almacenamiento para el clúster

Nota:

La configuración del controlador CSI de Azure Key Vault es solo una de las maneras de montar el certificado en un pod. El contenedor de escritura remota necesita una ruta de acceso local a un certificado en el pod solo para el <AZURE_CLIENT_CERTIFICATE_PATH> valor del paso Implementación de un contenedor sidecar para configurar la escritura remota.

Este paso solo es necesario si no habilitó el proveedor de Azure Key Vault para el controlador de CSI del almacén de secretos al crear el clúster.

  1. Para activar el Proveedor de Azure Key Vault para el Controlador CSI del almacén de secretos para tu clúster, ejecuta el siguiente comando de la CLI de Azure:

    az aks enable-addons --addons azure-keyvault-secrets-provider --name <aks-cluster-name> --resource-group <resource-group-name>
    
  2. Para conceder a la identidad acceso al almacén de claves, ejecute estos 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. Cree SecretProviderClass guardando el siguiente código YAML en un archivo denominado secretproviderclass.yml. Reemplace los valores de userAssignedIdentityID, keyvaultName, tenantId y los objetos que se van a recuperar del almacén de claves. Para obtener información sobre qué valores utilizar, consulta Proporcionar una identidad para acceder al controlador CSI del proveedor de Azure Key Vault para el almacén de secretos.

    # 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 mediante la ejecución del siguiente comando en el clúster:

    kubectl apply -f secretproviderclass.yml
    

Implementación de un contenedor sidecar para configurar la escritura remota

  1. Copie el siguiente código YAML y guárdelo en un archivo. YAML usa el puerto 8081 como puerto de escucha. Si usa un puerto diferente, modifique ese valor en 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. Reemplace los valores siguientes en el archivo YAML:

    Value Descripción
    <CLUSTER-NAME> Nombre del clúster de AKS.
    <CONTAINER-IMAGE-VERSION> mcr.microsoft.com/azuremonitor/containerinsights/ciprod/prometheus-remote-write/images:prom-remotewrite-20240617.1
    La versión de la imagen de contenedor de escritura remota.
    <INGESTION-URL> El valor para el punto de conexión de ingesta de datos de la página de información general del área de trabajo de Azure Monitor.
    <APP-REGISTRATION -CLIENT-ID> El Id. de cliente de la aplicación.
    <TENANT-ID> Id. de inquilino de la aplicación de Microsoft Entra.
    <CERT-NAME> Nombre del certificado.
    <CLUSTER-NAME> Nombre del clúster en el que se ejecuta Prometheus.
  3. Abra Azure Cloud Shell y cargue el archivo YAML.

  4. Use Helm para aplicar el archivo YAML y actualizar la configuración de 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> 
    

Comprobación y solución de problemas

Para obtener información de comprobación y solución de problemas, vea Solución de problemas de escritura remota y Servicio administrado de Azure Monitor para la escritura remota de Prometheus.

Pasos siguientes