Condividi tramite


Inviare i dati di Prometheus a Monitoraggio di Azure usando l'autenticazione di Microsoft Entra

Questo articolo descrive come configurare la scrittura remota per inviare dati da un server Prometheus autogestito in esecuzione nel cluster del servizio Azure Kubernetes o nel cluster Kubernetes abilitato per Azure Arc usando l'autenticazione di Microsoft Entra e un contenitore di auto side fornito da Monitoraggio di Azure. Si noti che è anche possibile configurare direttamente la scrittura remota nella configurazione di Prometheus per lo stesso.

Nota

È consigliabile configurare direttamente Prometheus in esecuzione nel cluster Kubernetes per la scrittura remota nell'area di lavoro di Monitoraggio di Azure. Vedere Inviare i dati di Prometheus a Monitoraggio di Azure usando l'autenticazione di Microsoft Entra La procedura seguente usa il contenitore di auto sul lato Monitoraggio di Azure.

Configurazioni dei cluster

Questo articolo si applica alle seguenti configurazioni cluster:

  • Cluster del servizio Azure Kubernetes
  • Cluster Kubernetes con abilitazione di Azure Arc
  • Cluster Kubernetes in esecuzione in un cloud o in locale diverso

Nota

Per un cluster del servizio Azure Kubernetes o per un cluster Kubernetes abilitato per Azure Arc, è consigliabile usare l'autenticazione dell'identità gestita. Per altre informazioni, vedere Servizio gestito di Monitoraggio di Azure per la scrittura remota Prometheus per l'identità gestita.

Prerequisiti

Versioni supportate

  • È necessario disporre di Prometheus versione 2.48 o successive per poter eseguire l'autenticazione a Microsoft Entra ID.

Area di lavoro di Monitoraggio di Azure

Questo articolo illustra l'invio di metriche Prometheus a un'area di lavoro di Monitoraggio di Azure. Per creare un'area di lavoro di Monitoraggio di Azure, vedere Gestire un'area di lavoro di Monitoraggio di Azure.

Autorizzazioni

Per completare i passaggi descritti in questo articolo, sono necessarie autorizzazioni di amministratore per il cluster o la risorsa.

Configurare un’applicazione per Microsoft Entra ID.

Il processo di configurazione della scrittura remota Prometheus per un'applicazione tramite l'autenticazione di Microsoft Entra comporta il completamento delle attività seguenti:

  1. Registrare un'applicazione con Microsoft Entra ID.
  2. Ottenere l'ID client dell'applicazione Microsoft Entra.
  3. Assegnare il ruolo Autore metriche di monitoraggio nella regola di raccolta dati dell'area di lavoro all'applicazione.
  4. Creare un Azure Key Vault e generare un certificato.
  5. Aggiungere un certificato all'applicazione Microsoft Entra.
  6. Aggiungere un driver CSI e una risorsa di archiviazione per il cluster.
  7. Distribuire un contenitore sidecar per configurare la scrittura remota.

Le attività sono descritte nelle sezioni seguenti.

Registrare un'applicazione con Microsoft Entra ID

Completare i passaggi per Registrare un'applicazione con Microsoft Entra ID e creare un'entità servizio

Ottenere l'ID client dell'applicazione Microsoft Entra

  1. Nel portale di Azure, passare al menu Microsoft Entra ID e selezionare Registrazioni app.
  2. Nell'elenco delle applicazioni, copiare il valore di ID applicazione (client) per l'applicazione registrata.

Screenshot che mostra l'applicazione o l'ID client di un'applicazione Microsoft Entra.

Assegnare il ruolo Autore metriche di monitoraggio nella regola di raccolta dati dell'area di lavoro all'applicazione

All'applicazione deve essere assegnato il ruolo Autore metriche di monitoraggio nella regola di raccolta dati associata all'area di lavoro di Monitoraggio di Azure.

  1. Nel menu delle risorse per l'area di lavoro di Monitoraggio di Azure, selezionare Panoramica. Per regola di raccolta dati, selezionare il collegamento.

    Screenshot che mostra la regola di raccolta dati usata dall'area di lavoro di Monitoraggio di Azure.

  2. Nella menu delle risorse per la regola di raccolta dati, selezionare Controllo di accesso (IAM).

  3. Selezionare Aggiungi e quindi selezionare Aggiungi assegnazione di ruolo.

    Screenshot che mostra l'aggiunta di un'assegnazione di ruolo sulle pagine di Controllo di accesso.

  4. Selezionare il ruolo Editore metriche di monitoraggio, quindi selezionare Avanti.

    Screenshot che mostra un elenco di assegnazioni di ruolo

  5. Selezionare Utente, gruppo o entità servizio, quindi scegliere Seleziona membri. Selezionare l'applicazione creata e quindi scegliere Seleziona.

    Screenshot che mostra la selezione dell'applicazione.

  6. Per completare l'assegnazione di ruolo, selezionare Rivedi e assegna.

Creare un Azure Key Vault e generare un certificato

  1. Se non si ha già un Azure Key Vault, creare un vault.
  2. Creare un certificato usando le linee guida in Aggiungere un certificato a Key Vault.
  3. Scaricare il certificato in formato CER usando le indicazioni riportate in Esportare un certificato da Key Vault.

Aggiungere un certificato all'applicazione Microsoft Entra

  1. Nel menu delle risorse per l'applicazione Microsoft Entra, selezionare Certificati e segreti.

  2. Nella scheda Certificati selezionare Carica certificato e selezionare il certificato scaricato.

    Screenshot che mostra il caricamento di un certificato per un'applicazione Microsoft Entra.

Avviso

I certificati hanno una data di scadenza. È responsabilità dell'utente mantenere validi i certificati.

Aggiungere un driver CSI e una risorsa di archiviazione per il cluster

Nota

La configurazione del driver CSI di Azure Key Vault è solo uno dei modi per ottenere un certificato montato in un pod. Il contenitore di scrittura remota richiede un percorso locale di un certificato nel pod solo per il valore <AZURE_CLIENT_CERTIFICATE_PATH> nel passaggio Distribuire un contenitore sidecar per configurare la scrittura remota.

Questo passaggio è obbligatorio solo se non è stato attivato il provider di Azure Key Vault per il driver CSI dell'archivio segreti al momento della creazione del cluster.

  1. Per attivare il provider di Azure Key Vault per il driver CSI dell'archivio segreti per il cluster, eseguire il comando seguente dell'interfaccia della riga di comando di Azure:

    az aks enable-addons --addons azure-keyvault-secrets-provider --name <aks-cluster-name> --resource-group <resource-group-name>
    
  2. Per concedere all'identità l'accesso all'insieme di credenziali delle chiavi, eseguire questi comandi:

    # 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. Creare SecretProviderClass salvando il codice YAML seguente in un file denominato secretproviderclass.yml. Sostituire i valori per userAssignedIdentityID, keyvaultName, tenantId e gli oggetti da recuperare dall'insieme di credenziali delle chiavi. Per informazioni sui valori da usare, vedere Fornire un'identità per accedere al provider di Azure Key Vault per il driver CSI dell'archivio segreti.

    # 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. Applicare SecretProviderClass eseguendo il seguente comando nel cluster:

    kubectl apply -f secretproviderclass.yml
    

Distribuire un contenitore sidecar per configurare la scrittura remota

  1. Copiare il seguente YAML e salvarlo in un file. YAML usa la porta 8081 come porta di ascolto. Se si usa una porta diversa, modificare tale valore in 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. Sostituire i valori seguenti nel file YAML:

    valore Descrizione
    <CLUSTER-NAME> Il nome del cluster del servizio Azure Kubernetes.
    <CONTAINER-IMAGE-VERSION> mcr.microsoft.com/azuremonitor/containerinsights/ciprod/prometheus-remote-write/images:prom-remotewrite-20240617.1
    La versione dell’immagine della scrittura remota.
    <INGESTION-URL> Valore per endpoint di inserimento delle metriche dalla pagina Panoramica per l'area di lavoro Monitoraggio di Azure.
    <APP-REGISTRATION -CLIENT-ID> ID client dell'applicazione.
    <TENANT-ID> L'ID tenant dell'applicazione Microsoft Entra.
    <CERT-NAME> Nome del certificato.
    <CLUSTER-NAME> Nome del cluster in cui è in esecuzione Prometheus.
  3. Aprire Azure Cloud Shell e caricare il file YAML.

  4. Usare Helm per applicare il file YAML e aggiornare la configurazione di 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 e risoluzione dei problemi

Per informazioni sulla verifica e sulla risoluzione dei problemi, vedere Risoluzione dei problemi relativi alla scrittura remota e Servizio gestito di Monitoraggio di Azure per scrittura remota del servizio gestito per Prometheus.

Passaggi successivi