Odeslání dat Prometheus do služby Azure Monitor pomocí ověřování Microsoft Entra

Tento článek popisuje, jak nastavit vzdálené zápisy pro odesílání dat ze serveru Prometheus spravovaného v clusteru Azure Kubernetes Service (AKS) nebo clusteru Kubernetes s podporou Azure Arc pomocí ověřování Microsoft Entra.

Konfigurace clusterů

Tento článek se týká následujících konfigurací clusteru:

  • Cluster Azure Kubernetes Service
  • Cluster Kubernetes s podporou Azure Arc
  • Cluster Kubernetes spuštěný v jiném cloudu nebo v místním prostředí

Poznámka:

Pro cluster AKS nebo cluster Kubernetes s podporou Azure Arc doporučujeme použít ověřování spravované identity. Další informace najdete ve spravované službě Azure Monitoru pro vzdálený zápis pro spravovanou identitu.

Požadavky

Podporované verze

  • Pro ověřování aplikace Microsoft Entra ID se vyžadují verze Prometheus větší než verze 2.48.

Pracovní prostor služby Azure Monitor

Tento článek se zabývá odesíláním metrik Prometheus do pracovního prostoru služby Azure Monitor. Pokud chcete vytvořit pracovní prostor Služby Azure Monitor, přečtěte si téma Správa pracovního prostoru služby Azure Monitor.

Oprávnění

Správa istrator oprávnění ke clusteru nebo prostředku jsou nutná k dokončení kroků v tomto článku.

Nastavení aplikace pro Microsoft Entra ID

Proces nastavení vzdáleného zápisu Prometheus pro aplikaci pomocí ověřování Microsoft Entra zahrnuje dokončení následujících úloh:

  1. Registrace aplikace pomocí Microsoft Entra ID.
  2. Získejte ID klienta aplikace Microsoft Entra.
  3. Přiřaďte aplikaci roli Vydavatele metrik monitorování v pravidle shromažďování dat pracovního prostoru.
  4. Vytvořte trezor klíčů Azure a vygenerujte certifikát.
  5. Přidejte certifikát do aplikace Microsoft Entra.
  6. Přidejte ovladač CSI a úložiště pro cluster.
  7. Nasaďte kontejner sajdkáru pro nastavení vzdáleného zápisu.

Úkoly jsou popsány v následujících částech.

Registrace aplikace pomocí Microsoft Entra ID

Dokončete kroky registrace aplikace s ID Microsoft Entra a vytvořte instanční objekt.

Získání ID klienta aplikace Microsoft Entra

  1. Na webu Azure Portal přejděte do nabídky Microsoft Entra ID a vyberte Registrace aplikací.
  2. V seznamu aplikací zkopírujte hodnotu ID aplikace (klienta) registrované aplikace.

Snímek obrazovky znázorňující ID aplikace Nebo klienta aplikace Microsoft Entra

Přiřazení role Vydavatele metrik monitorování v pravidle shromažďování dat pracovního prostoru k aplikaci

Aplikace musí mít přiřazenou roli Vydavatele metrik monitorování v pravidle shromažďování dat, které je přidružené k vašemu pracovnímu prostoru služby Azure Monitor.

  1. V nabídce prostředků pro váš pracovní prostor Azure Monitoru vyberte Přehled. V případě pravidla shromažďování dat vyberte odkaz.

    Snímek obrazovky znázorňující pravidlo shromažďování dat, které používá pracovní prostor služby Azure Monitor

  2. V nabídce prostředků pravidla shromažďování dat vyberte Řízení přístupu (IAM).

  3. Vyberte Přidat a pak vyberte Přidat přiřazení role.

    Snímek obrazovky znázorňující přidání přiřazení role na stránkách řízení přístupu

  4. Vyberte roli Vydavatel metrik monitorování a pak vyberte Další.

    Snímek obrazovky se seznamem přiřazení rolí

  5. Vyberte Uživatele, skupinu nebo instanční objekt a pak zvolte Vybrat členy. Vyberte aplikaci, kterou jste vytvořili, a pak zvolte Vybrat.

    Snímek obrazovky znázorňující výběr aplikace

  6. Pokud chcete přiřazení role dokončit, vyberte Zkontrolovat a přiřadit.

Vytvoření trezoru klíčů Azure a vygenerování certifikátu

  1. Pokud ještě nemáte trezor klíčů Azure, vytvořte trezor.
  2. Vytvořte certifikát pomocí pokynů v části Přidání certifikátu do služby Key Vault.
  3. Stáhněte si certifikát ve formátu CER pomocí pokynů v exportu certifikátu ze služby Key Vault.

Přidání certifikátu do aplikace Microsoft Entra

  1. V nabídce prostředků pro vaši aplikaci Microsoft Entra vyberte Certifikáty a tajné kódy.

  2. Na kartě Certifikáty vyberte Nahrát certifikát a vyberte certifikát, který jste stáhli.

    Snímek obrazovky znázorňující nahrání certifikátu pro aplikaci Microsoft Entra

Upozorňující

Certifikáty mají datum vypršení platnosti. Je zodpovědností uživatele, aby certifikáty zůstaly platné.

Přidání ovladače CSI a úložiště pro cluster

Poznámka:

Konfigurace ovladače CSI služby Azure Key Vault je jen jedním ze způsobů, jak získat certifikát připojený k podu. Vzdálený kontejner zápisu potřebuje místní cestu k certifikátu v podu pouze pro <AZURE_CLIENT_CERTIFICATE_PATH> hodnotu v kroku Nasazení kontejneru sajdkáru pro nastavení vzdáleného zápisu.

Tento krok se vyžaduje jenom v případě, že jste při vytváření clusteru nezapnuli zprostředkovatele služby Azure Key Vault pro ovladač CSI úložiště tajných kódů.

  1. Pokud chcete pro váš cluster zapnout zprostředkovatele služby Azure Key Vault pro ovladač CSI úložiště tajných kódů, spusťte následující příkaz Azure CLI:

    az aks enable-addons --addons azure-keyvault-secrets-provider --name <aks-cluster-name> --resource-group <resource-group-name>
    
  2. Pokud chcete identitě udělit přístup k trezoru klíčů, spusťte tyto příkazy:

    # 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. Vytvořte SecretProviderClass uložením následujícího YAML do souboru s názvem secretproviderclass.yml. Nahraďte hodnoty pro userAssignedIdentityID, keyvaultNametenantIda objekty, které se mají načíst z trezoru klíčů. Informace o tom, jaké hodnoty použít, najdete v tématu Poskytnutí identity pro přístup k poskytovateli služby Azure Key Vault pro ovladač CSI úložiště tajných kódů.

    # 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. Použijte SecretProviderClass spuštěním následujícího příkazu v clusteru:

    kubectl apply -f secretproviderclass.yml
    

Nasazení kontejneru sajdkáru pro nastavení vzdáleného zápisu

  1. Zkopírujte následující YAML a uložte ho do souboru. YAML používá jako naslouchající port port 8081. Pokud používáte jiný port, upravte tuto hodnotu v 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. V souboru YAML nahraďte následující hodnoty:

    Hodnota Popis
    <CLUSTER-NAME> Název clusteru AKS
    <CONTAINER-IMAGE-VERSION> mcr.microsoft.com/azuremonitor/prometheus/promdev/prom-remotewrite:prom-remotewrite-20230906.1
    Verze image vzdáleného zápisu kontejneru pro zápis
    <INGESTION-URL> Hodnota koncového bodu příjmu metrik ze stránky Přehled pracovního prostoru služby Azure Monitor.
    <APP-REGISTRATION -CLIENT-ID> ID klienta vaší aplikace.
    <TENANT-ID> ID tenanta aplikace Microsoft Entra.
    <CERT-NAME> Název certifikátu.
    <CLUSTER-NAME> Název clusteru, na kterém běží Systém Prometheus.
  3. Otevřete Azure Cloud Shell a nahrajte soubor YAML.

  4. Použijte Helm k instalaci souboru YAML a aktualizaci konfigurace 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> 
    

Ověření a řešení potíží

Informace o ověřování a řešení potíží najdete v tématu Řešení potíží se vzdáleným zápisem a spravovanou službou Azure Monitor pro vzdálený zápis pro Prometheus.

Další kroky