Condividi tramite


Inviare dati Prometheus a Monitoraggio di Azure usando l'autenticazione ID dei carichi di lavoro di Microsoft Entra (anteprima)

Questo articolo descrive come configurare la scrittura remota per inviare dati dal cluster Prometheus gestito di Monitoraggio di Azure usando l'autenticazione ID dei carichi di lavoro di Microsoft Entra.

Prerequisiti

Configurare un carico di lavoro per ID dei carichi di lavoro di Microsoft Entra

Il processo per configurare la scrittura remota di Prometheus per un carico di lavoro usando ID dei carichi di lavoro di Microsoft Entra'autenticazione comporta il completamento delle attività seguenti:

  1. Configurare l'identità del carico di lavoro.
  2. Creare un'applicazione Microsoft Entra o un'identità gestita assegnata dall'utente e concedere le autorizzazioni.
  3. Assegnare il ruolo Di pubblicazione metriche di monitoraggio nella regola di raccolta dati dell'area di lavoro all'applicazione.
  4. Creare o aggiornare l'account del servizio Kubernetes Prometheus.
  5. Stabilire le credenziali di identità federate tra l'identità e l'emittente dell'account del servizio e l'oggetto.
  6. Distribuire un contenitore sidecar per configurare la scrittura remota.

Le attività sono descritte nelle sezioni seguenti.

Configurare l'identità del carico di lavoro

Per configurare l'identità del carico di lavoro, esportare le variabili di ambiente seguenti:

# [OPTIONAL] Set this if you're using a Microsoft Entra application
export APPLICATION_NAME="<your application name>"
    
# [OPTIONAL] Set this only if you're using a user-assigned managed identity
export USER_ASSIGNED_IDENTITY_NAME="<your user-assigned managed identity name>"
    
# Environment variables for the Kubernetes service account and federated identity credential
export SERVICE_ACCOUNT_NAMESPACE="<namespace of Prometheus pod>"
export SERVICE_ACCOUNT_NAME="<name of service account associated with Prometheus pod>"
export SERVICE_ACCOUNT_ISSUER="<your service account issuer URL>"

Per SERVICE_ACCOUNT_NAME, verificare se un account del servizio (separato dall'account del servizio predefinito ) è già associato al pod Prometheus. Cercare il valore di serviceaccountName o serviceAccount (deprecato) nel spec pod di Prometheus. Usare questo valore se esistente. Se serviceaccountName e serviceAccount non esistono, immettere il nome dell'account del servizio da associare al pod Prometheus.

Creare un'applicazione Microsoft Entra o un'identità gestita assegnata dall'utente e concedere le autorizzazioni

Creare un'applicazione Microsoft Entra o un'identità gestita assegnata dall'utente e concedere l'autorizzazione per pubblicare le metriche nell'area di lavoro di Monitoraggio di Azure:

# create a Microsoft Entra application
az ad sp create-for-rbac --name "${APPLICATION_NAME}"

# create a user-assigned managed identity if you use a user-assigned managed identity for this article
az identity create --name "${USER_ASSIGNED_IDENTITY_NAME}" --resource-group "${RESOURCE_GROUP}"

Assegnare il ruolo di server di pubblicazione delle metriche di monitoraggio nella regola di raccolta dati dell'area di lavoro all'applicazione o all'identità gestita

Per informazioni sull'assegnazione del ruolo, vedere Assegnare il ruolo di server di pubblicazione delle metriche di monitoraggio nella regola di raccolta dati dell'area di lavoro all'identità gestita.

Creare o aggiornare l'account del servizio Kubernetes Prometheus

Spesso viene creato un account del servizio Kubernetes e associato al pod che esegue il contenitore Prometheus. Se si usa lo stack kube-prometheus, il codice crea automaticamente l'account del servizio prometheus-kubeus-prometheus-prometheus.

Se a Prometheus non è associato alcun account del servizio Kubernetes, ad eccezione dell'account del servizio predefinito, creare un nuovo account del servizio specifico per il pod che esegue Prometheus.

Per creare l'account del servizio, eseguire il comando kubectl seguente:

cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: service account
metadata:
  annotations:
    azure.workload.identity/client-id: ${APPLICATION_CLIENT_ID:-$USER_ASSIGNED_IDENTITY_CLIENT_ID}
  name: ${SERVICE_ACCOUNT_NAME}
  namespace: ${SERVICE_ACCOUNT_NAMESPACE}
EOF

Se un account del servizio Kubernetes diverso dall'account del servizio predefinito è associato al pod, aggiungere l'annotazione seguente all'account del servizio:

kubectl annotate sa ${SERVICE_ACCOUNT_NAME} -n ${SERVICE_ACCOUNT_NAMESPACE} azure.workload.identity/client-id="${APPLICATION_OR_USER_ASSIGNED_IDENTITY_CLIENT_ID}" –overwrite

Se l'applicazione Microsoft Entra o l'identità gestita assegnata dall'utente non si trova nello stesso tenant del cluster, aggiungere l'annotazione seguente all'account del servizio:

kubectl annotate sa ${SERVICE_ACCOUNT_NAME} -n ${SERVICE_ACCOUNT_NAMESPACE} azure.workload.identity/tenant-id="${APPLICATION_OR_USER_ASSIGNED_IDENTITY_TENANT_ID}" –overwrite

Stabilire le credenziali di identità federate tra l'identità e l'autorità emittente dell'account del servizio e l'oggetto

Creare credenziali federate usando l'interfaccia della riga di comando di Azure.

Identità gestita assegnata dall'utente

az identity federated-credential create \
   --name "kubernetes-federated-credential" \
   --identity-name "${USER_ASSIGNED_IDENTITY_NAME}" \
   --resource-group "${RESOURCE_GROUP}" \
   --issuer "${SERVICE_ACCOUNT_ISSUER}" \
   --subject "system:serviceaccount:${SERVICE_ACCOUNT_NAMESPACE}:${SERVICE_ACCOUNT_NAME}"

Applicazione Microsoft Entra

# Get the ObjectID of the Microsoft Entra app.

export APPLICATION_OBJECT_ID="$(az ad app show --id ${APPLICATION_CLIENT_ID} --query id -otsv)"

# Add a federated identity credential.

cat <<EOF > params.json
{
  "name": "kubernetes-federated-credential",
  "issuer": "${SERVICE_ACCOUNT_ISSUER}",
  "subject": "system:serviceaccount:${SERVICE_ACCOUNT_NAMESPACE}:${SERVICE_ACCOUNT_NAME}",
  "description": "Kubernetes service account federated credential",
  "audiences": [
    "api://AzureADTokenExchange"
  ]
}
EOF

az ad app federated-credential create --id ${APPLICATION_OBJECT_ID} --parameters @params.json

Distribuire un contenitore sidecar per configurare la scrittura remota

Importante

Il pod Prometheus deve avere l'etichetta seguente: azure.workload.identity/use: "true"

Il contenitore sidecar di scrittura remota richiede i valori di ambiente seguenti:

  • INGESTION_URL: endpoint di inserimento delle metriche visualizzato nella pagina Panoramica per l'area di lavoro Monitoraggio di Azure
  • LISTENING_PORT: 8081 (qualsiasi porta è supportata)
  • IDENTITY_TYPE: workloadIdentity
  1. Copiare il codice YAML seguente 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: <AKS-CLUSTER-NAME>
        podMetadata:
            labels:
                azure.workload.identity/use: "true"
        ## https://prometheus.io/docs/prometheus/latest/configuration/configuration/#remote_write    
        remoteWrite:
        - url: 'http://localhost:8081/api/v1/write'
    
        containers:
        - name: prom-remotewrite
          image: <CONTAINER-IMAGE-VERSION>
          imagePullPolicy: Always
          ports:
            - name: rw-port
              containerPort: 8081
          env:
          - name: INGESTION_URL
            value: <INGESTION_URL>
          - name: LISTENING_PORT
            value: '8081'
          - name: IDENTITY_TYPE
            value: workloadIdentity
    
  2. Sostituire i valori seguenti in YAML:

    Valore Descrizione
    <CLUSTER-NAME> Nome del cluster del servizio Azure Kubernetes.
    <CONTAINER-IMAGE-VERSION> mcr.microsoft.com/azuremonitor/containerinsights/ciprod/prometheus-remote-write/images:prom-remotewrite-20240617.1
    Versione dell'immagine del contenitore di scrittura remota.
    <INGESTION-URL> Valore per Endpoint di inserimento metriche dalla pagina Panoramica per l'area di lavoro monitoraggio di Azure.
  3. Usare Helm per applicare il file YAML e aggiornare la configurazione di Prometheus:

    # set a 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 al servizio gestito di Monitoraggio di Azure per la scrittura remota di Prometheus.

Passaggi successivi