Skicka Prometheus-data till Azure Monitor med hjälp av Microsoft Entra-autentisering

Den här artikeln beskriver hur du konfigurerar fjärrskrivning för att skicka data från en självhanterad Prometheus-server som körs i ditt AKS-kluster (Azure Kubernetes Service) eller Azure Arc-aktiverade Kubernetes-kluster med hjälp av Microsoft Entra-autentisering.

Klusterkonfigurationer

Den här artikeln gäller för följande klusterkonfigurationer:

  • Azure Kubernetes Service-kluster
  • Azure Arc-aktiverat Kubernetes-kluster
  • Kubernetes-kluster som körs i ett annat moln eller lokalt

Kommentar

För ett AKS-kluster eller ett Azure Arc-aktiverat Kubernetes-kluster rekommenderar vi att du använder hanterad identitetsautentisering. Mer information finns i Azure Monitor-hanterad tjänst för Prometheus fjärrskrivning för hanterad identitet.

Förutsättningar

Versioner som stöds

  • Prometheus-versioner som är större än v2.48 krävs för Microsoft Entra ID-programautentisering.

Azure Monitor-arbetsyta

Den här artikeln beskriver hur du skickar Prometheus-mått till en Azure Monitor-arbetsyta. Information om hur du skapar en Azure Monitor-arbetsyta finns i Hantera en Azure Monitor-arbetsyta.

Behörigheter

Administratörsbehörigheter för klustret eller resursen krävs för att slutföra stegen i den här artikeln.

Konfigurera ett program för Microsoft Entra-ID

Processen för att konfigurera Prometheus fjärrskrivning för ett program med hjälp av Microsoft Entra-autentisering innebär att du utför följande uppgifter:

  1. Registrera ett program med Microsoft Entra ID.
  2. Hämta klient-ID för Microsoft Entra-programmet.
  3. Tilldela utgivarrollen Övervakningsmått för arbetsytans datainsamlingsregel till programmet.
  4. Skapa ett Azure-nyckelvalv och generera ett certifikat.
  5. Lägg till ett certifikat i Microsoft Entra-programmet.
  6. Lägg till en CSI-drivrutin och lagring för klustret.
  7. Distribuera en sidovagnscontainer för att konfigurera fjärrskrivning.

Uppgifterna beskrivs i följande avsnitt.

Registrera ett program med Microsoft Entra-ID

Slutför stegen för att registrera ett program med Microsoft Entra-ID och skapa ett huvudnamn för tjänsten.

Hämta klient-ID:t för Microsoft Entra-programmet

  1. Gå till Menyn Microsoft Entra-ID i Azure-portalen och välj Appregistreringar.
  2. I listan över program kopierar du värdet för program-ID (klient)-ID för det registrerade programmet.

Skärmbild som visar programmet eller klient-ID:t för ett Microsoft Entra-program.

Tilldela utgivarrollen Övervakningsmått för arbetsytans datainsamlingsregel till programmet

Programmet måste tilldelas rollen Monitoring Metrics Publisher för datainsamlingsregeln som är associerad med din Azure Monitor-arbetsyta.

  1. På resursmenyn för din Azure Monitor-arbetsyta väljer du Översikt. För Datainsamlingsregel väljer du länken.

    Skärmbild som visar datainsamlingsregeln som används av Azure Monitor-arbetsytan.

  2. På resursmenyn för datainsamlingsregeln väljer du Åtkomstkontroll (IAM).

  3. Välj Lägg till och sedan Lägg till rolltilldelning.

    Skärmbild som visar hur du lägger till en rolltilldelning på åtkomstkontrollsidor.

  4. Välj utgivarrollenÖvervakningsmått och välj sedan Nästa.

    Skärmbild som visar en lista över rolltilldelningar.

  5. Välj Användare, grupp eller tjänstens huvudnamn och välj sedan Välj medlemmar. Välj det program som du skapade och välj sedan Välj.

    Skärmbild som visar hur du väljer programmet.

  6. Slutför rolltilldelningen genom att välja Granska + tilldela.

Skapa ett Azure-nyckelvalv och generera ett certifikat

  1. Om du inte redan har ett Azure-nyckelvalv skapar du ett valv.
  2. Skapa ett certifikat med hjälp av vägledningen i Lägg till ett certifikat i Key Vault.
  3. Ladda ned certifikatet i CER-format med hjälp av vägledningen i Exportera ett certifikat från Key Vault.

Lägga till ett certifikat i Microsoft Entra-programmet

  1. På resursmenyn för ditt Microsoft Entra-program väljer du Certifikat och hemligheter.

  2. På fliken Certifikat väljer du Ladda upp certifikat och väljer det certifikat som du laddade ned.

    Skärmbild som visar hur du laddar upp ett certifikat för ett Microsoft Entra-program.

Varning

Certifikat har ett förfallodatum. Det är användarens ansvar att hålla certifikaten giltiga.

Lägga till en CSI-drivrutin och lagring för klustret

Kommentar

Azure Key Vault CSI-drivrutinskonfiguration är bara ett av sätten att få ett certifikat monterat på en podd. Fjärrskrivningscontainern behöver en lokal sökväg till ett certifikat i podden endast för <AZURE_CLIENT_CERTIFICATE_PATH> värdet i steget Distribuera en sidovagnscontainer för att konfigurera fjärrskrivning.

Det här steget krävs bara om du inte aktiverade Azure Key Vault Provider for Secrets Store CSI-drivrutinen när du skapade klustret.

  1. Om du vill aktivera Azure Key Vault-providern för Secrets Store CSI-drivrutinen för klustret kör du följande Azure CLI-kommando:

    az aks enable-addons --addons azure-keyvault-secrets-provider --name <aks-cluster-name> --resource-group <resource-group-name>
    
  2. Kör följande kommandon för att ge identiteten åtkomst till nyckelvalvet:

    # 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. Skapa SecretProviderClass genom att spara följande YAML i en fil med namnet secretproviderclass.yml. Ersätt värdena för userAssignedIdentityID, keyvaultName, tenantIdoch de objekt som ska hämtas från nyckelvalvet. Information om vilka värden som ska användas finns i Ange en identitet för åtkomst till Azure Key Vault-providern för Secrets Store CSI-drivrutinen.

    # 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. Använd SecretProviderClass genom att köra följande kommando i klustret:

    kubectl apply -f secretproviderclass.yml
    

Distribuera en sidovagnscontainer för att konfigurera fjärrskrivning

  1. Kopiera följande YAML och spara den i en fil. YAML använder port 8081 som lyssnarport. Om du använder en annan port ändrar du det värdet i 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. Ersätt följande värden i YAML-filen:

    Värde beskrivning
    <CLUSTER-NAME> Namnet på ditt AKS-kluster.
    <CONTAINER-IMAGE-VERSION> mcr.microsoft.com/azuremonitor/prometheus/promdev/prom-remotewrite:prom-remotewrite-20230906.1
    Containeravbildningsversionen för fjärrskrivning.
    <INGESTION-URL> Värdet för slutpunkten för måttinmatning från sidan Översikt för Azure Monitor-arbetsytan.
    <APP-REGISTRATION -CLIENT-ID> Programmets klient-ID.
    <TENANT-ID> Klientorganisations-ID för Microsoft Entra-programmet.
    <CERT-NAME> Namnet på certifikatet.
    <CLUSTER-NAME> Namnet på klustret som Prometheus körs på.
  3. Öppna Azure Cloud Shell och ladda upp YAML-filen.

  4. Använd Helm för att tillämpa YAML-filen och uppdatera Prometheus-konfigurationen:

    # 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> 
    

Verifiering och felsökning

Information om verifiering och felsökning finns i Felsöka fjärrskrivning och Azure Monitor-hanterad tjänst för Prometheus fjärrskrivning.

Nästa steg