Wysyłanie danych rozwiązania Prometheus do usługi Azure Monitor przy użyciu uwierzytelniania firmy Microsoft Entra

W tym artykule opisano sposób konfigurowania zdalnego zapisu w celu wysyłania danych z własnego serwera Prometheus działającego w klastrze usługi Azure Kubernetes Service (AKS) lub klastrze Kubernetes z włączoną usługą Azure Arc przy użyciu uwierzytelniania firmy Microsoft Entra.

Konfiguracje klastrów

Ten artykuł dotyczy następujących konfiguracji klastra:

  • Klaster usługi Azure Kubernetes Service;
  • Klaster Kubernetes z obsługą usługi Azure Arc
  • Klaster Kubernetes działający w innej chmurze lub lokalnie

Uwaga

W przypadku klastra usługi AKS lub klastra Kubernetes z włączoną usługą Azure Arc zalecamy użycie uwierzytelniania tożsamości zarządzanej. Aby uzyskać więcej informacji, zobacz Usługa zarządzana usługi Azure Monitor dla zdalnego zapisu w usłudze Prometheus dla tożsamości zarządzanej.

Wymagania wstępne

Obsługiwane wersje

  • Wersje Prometheus większe niż wersja 2.48 są wymagane do uwierzytelniania aplikacji Entra ID firmy Microsoft.

Obszar roboczy usługi Azure Monitor

W tym artykule opisano wysyłanie metryk rozwiązania Prometheus do obszaru roboczego usługi Azure Monitor. Aby utworzyć obszar roboczy usługi Azure Monitor, zobacz Zarządzanie obszarem roboczym usługi Azure Monitor.

Uprawnienia

do wykonania kroków opisanych w tym artykule są wymagane uprawnienia Administracja istratora dla klastra lub zasobu.

Konfigurowanie aplikacji dla identyfikatora Entra firmy Microsoft

Proces konfigurowania zdalnego zapisu rozwiązania Prometheus dla aplikacji przy użyciu uwierzytelniania Microsoft Entra obejmuje wykonanie następujących zadań:

  1. Rejestrowanie aplikacji usługi Tożsamości Microsoft Entra.
  2. Pobierz identyfikator klienta aplikacji Microsoft Entra.
  3. Przypisz rolę Wydawca metryk monitorowania w regule zbierania danych obszaru roboczego do aplikacji.
  4. Utwórz magazyn kluczy platformy Azure i wygeneruj certyfikat.
  5. Dodaj certyfikat do aplikacji Microsoft Entra.
  6. Dodaj sterownik CSI i magazyn dla klastra.
  7. Wdróż kontener przyczepki, aby skonfigurować zdalny zapis.

Zadania są opisane w poniższych sekcjach.

Rejestrowanie aplikacji przy użyciu identyfikatora Entra firmy Microsoft

Wykonaj kroki, aby zarejestrować aplikację przy użyciu identyfikatora Entra firmy Microsoft i utworzyć jednostkę usługi.

Pobieranie identyfikatora klienta aplikacji Microsoft Entra

  1. W witrynie Azure Portal przejdź do menu Microsoft Entra ID i wybierz pozycję Rejestracje aplikacji.
  2. Na liście aplikacji skopiuj wartość identyfikatora aplikacji (klienta) dla zarejestrowanej aplikacji.

Zrzut ekranu przedstawiający identyfikator aplikacji lub klienta aplikacji Firmy Microsoft Entra.

Przypisywanie roli Wydawca metryk monitorowania w regule zbierania danych obszaru roboczego do aplikacji

Aplikacja musi mieć przypisaną rolę Wydawca metryk monitorowania w regule zbierania danych skojarzonej z obszarem roboczym usługi Azure Monitor.

  1. W menu zasobów dla obszaru roboczego usługi Azure Monitor wybierz pozycję Przegląd. W obszarze Reguła zbierania danych wybierz link.

    Zrzut ekranu przedstawiający regułę zbierania danych używaną przez obszar roboczy usługi Azure Monitor.

  2. W menu zasobów dla reguły zbierania danych wybierz pozycję Kontrola dostępu (Zarządzanie dostępem i tożsamościami).

  3. Wybierz pozycję Dodaj, a następnie wybierz pozycję Dodaj przypisanie roli.

    Zrzut ekranu przedstawiający dodawanie przypisania roli na stronach kontroli dostępu.

  4. Wybierz rolę Wydawca metryk monitorowania, a następnie wybierz przycisk Dalej.

    Zrzut ekranu przedstawiający listę przypisań ról.

  5. Wybierz pozycję Użytkownik, grupa lub jednostka usługi, a następnie wybierz pozycję Wybierz członków. Wybierz utworzoną aplikację, a następnie wybierz pozycję Wybierz.

    Zrzut ekranu przedstawiający wybieranie aplikacji.

  6. Aby ukończyć przypisanie roli, wybierz pozycję Przejrzyj i przypisz.

Tworzenie magazynu kluczy platformy Azure i generowanie certyfikatu

  1. Jeśli nie masz jeszcze magazynu kluczy platformy Azure, utwórz magazyn.
  2. Utwórz certyfikat, korzystając ze wskazówek w temacie Dodawanie certyfikatu do usługi Key Vault.
  3. Pobierz certyfikat w formacie CER, korzystając ze wskazówek w temacie Eksportowanie certyfikatu z usługi Key Vault.

Dodawanie certyfikatu do aplikacji Microsoft Entra

  1. W menu zasobów aplikacji Microsoft Entra wybierz pozycję Certyfikaty i wpisy tajne.

  2. Na karcie Certyfikaty wybierz pozycję Przekaż certyfikat i wybierz pobrany certyfikat.

    Zrzut ekranu przedstawiający przekazywanie certyfikatu dla aplikacji Firmy Microsoft Entra.

Ostrzeżenie

Certyfikaty mają datę wygaśnięcia. Jest to odpowiedzialność użytkownika za utrzymywanie ważności certyfikatów.

Dodawanie sterownika CSI i magazynu dla klastra

Uwaga

Konfiguracja sterownika CSI usługi Azure Key Vault jest tylko jednym ze sposobów uzyskania certyfikatu zainstalowanego na zasobniku. Kontener zapisu zdalnego wymaga lokalnej ścieżki do certyfikatu w zasobniku tylko dla <AZURE_CLIENT_CERTIFICATE_PATH> wartości w kroku Wdrażanie kontenera przyczepki w celu skonfigurowania zdalnego zapisu.

Ten krok jest wymagany tylko wtedy, gdy podczas tworzenia klastra nie został włączony dostawca usługi Azure Key Vault dla sterownika CSI magazynu wpisów tajnych.

  1. Aby włączyć dostawcę usługi Azure Key Vault dla sterownika CSI magazynu wpisów tajnych dla klastra, uruchom następujące polecenie interfejsu wiersza polecenia platformy Azure:

    az aks enable-addons --addons azure-keyvault-secrets-provider --name <aks-cluster-name> --resource-group <resource-group-name>
    
  2. Aby udzielić tożsamości dostępu do magazynu kluczy, uruchom następujące polecenia:

    # 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. Utwórz SecretProviderClass , zapisując następujący kod YAML w pliku o nazwie secretproviderclass.yml. Zastąp wartości dla userAssignedIdentityID, keyvaultName, tenantIdi obiektów, które mają być pobierane z magazynu kluczy. Aby uzyskać informacje o tym, jakich wartości użyć, zobacz Zapewnianie tożsamości w celu uzyskania dostępu do dostawcy usługi Azure Key Vault dla sterownika CSI magazynu wpisów tajnych.

    # 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. Zastosuj SecretProviderClass , uruchamiając następujące polecenie w klastrze:

    kubectl apply -f secretproviderclass.yml
    

Wdrażanie kontenera przyczepki w celu skonfigurowania zdalnego zapisu

  1. Skopiuj następujący kod YAML i zapisz go w pliku. Kod YAML używa portu 8081 jako portu nasłuchiwania. Jeśli używasz innego portu, zmodyfikuj ją w pliku 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. Zastąp następujące wartości w pliku YAML:

    Wartość Opis
    <CLUSTER-NAME> Nazwa klastra usługi AKS.
    <CONTAINER-IMAGE-VERSION> mcr.microsoft.com/azuremonitor/containerinsights/ciprod/prometheus-remote-write/images:prom-remotewrite-20240507.1
    Zdalna wersja obrazu kontenera zapisu.
    <INGESTION-URL> Wartość punktu końcowegopozyskiwania metryk na stronie Przegląd obszaru roboczego usługi Azure Monitor.
    <APP-REGISTRATION -CLIENT-ID> Identyfikator klienta aplikacji.
    <TENANT-ID> Identyfikator dzierżawy aplikacji Microsoft Entra.
    <CERT-NAME> Nazwa certyfikatu.
    <CLUSTER-NAME> Nazwa klastra, na którym działa rozwiązanie Prometheus.
  3. Otwórz usługę Azure Cloud Shell i przekaż plik YAML.

  4. Użyj narzędzia Helm, aby zastosować plik YAML i zaktualizować konfigurację rozwiązania 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> 
    

Weryfikacja i rozwiązywanie problemów

Aby uzyskać informacje dotyczące weryfikacji i rozwiązywania problemów, zobacz Rozwiązywanie problemów z zdalnym zapisem i usługą zarządzaną Azure Monitor dla zdalnego zapisu w usłudze Prometheus.

Następne kroki