Bagikan melalui


Mengirim data Prometheus ke Azure Monitor dengan menggunakan autentikasi Microsoft Entra

Artikel ini menjelaskan cara menyiapkan penulisan jarak jauh untuk mengirim data dari server Prometheus yang dikelola sendiri yang berjalan di kluster Azure Kubernetes Service (AKS) atau kluster Kubernetes dengan dukungan Azure Arc dengan menggunakan autentikasi Microsoft Entra dan kontainer mobil samping yang disediakan Azure Monitor. Perhatikan bahwa Anda juga dapat langsung mengonfigurasi penulisan jarak jauh dalam konfigurasi Prometheus untuk hal yang sama.

Catatan

Kami menyarankan agar Anda langsung mengonfigurasi Prometheus yang berjalan di kluster Kubernetes untuk menulis dari jarak jauh ke Ruang Kerja Azure Monitor. Lihat Mengirim data Prometheus ke Azure Monitor menggunakan autentikasi Microsoft Entra Id untuk mempelajari selengkapnya. Langkah-langkah di bawah ini menggunakan kontainer mobil samping Azure Monitor.

Konfigurasi klaster

Artikel ini berlaku untuk konfigurasi kluster berikut:

  • Kluster Azure Kubernetes Service
  • Kluster Kubernetes yang didukung Azure Arc
  • Kluster Kubernetes yang berjalan di cloud atau lokal yang berbeda

Catatan

Untuk kluster AKS atau kluster Kubernetes dengan dukungan Azure Arc, kami sarankan Anda menggunakan autentikasi identitas terkelola. Untuk informasi selengkapnya, lihat Layanan terkelola Azure Monitor untuk penulisan jarak jauh Prometheus untuk identitas terkelola.

Prasyarat

Versi yang didukung

  • Versi Prometheus yang lebih besar dari v2.48 diperlukan untuk autentikasi aplikasi ID Microsoft Entra.

Ruang kerja Azure Monitor

Artikel ini membahas pengiriman metrik Prometheus ke ruang kerja Azure Monitor. Untuk membuat ruang kerja azure monitor, lihat Mengelola ruang kerja Azure Monitor.

Izin

Izin administrator untuk kluster atau sumber daya diperlukan untuk menyelesaikan langkah-langkah dalam artikel ini.

Menyiapkan aplikasi untuk ID Microsoft Entra

Proses untuk menyiapkan penulisan jarak jauh Prometheus untuk aplikasi dengan menggunakan autentikasi Microsoft Entra melibatkan penyelesaian tugas berikut:

  1. Daftarkan aplikasi dengan ID Microsoft Entra.
  2. Dapatkan ID klien aplikasi Microsoft Entra.
  3. Tetapkan peran Penerbit Metrik Pemantauan pada aturan pengumpulan data ruang kerja ke aplikasi.
  4. Buat brankas kunci Azure dan buat sertifikat.
  5. Tambahkan sertifikat ke aplikasi Microsoft Entra.
  6. Tambahkan driver dan penyimpanan CSI untuk kluster.
  7. Sebarkan kontainer sidecar untuk menyiapkan penulisan jarak jauh.

Tugas dijelaskan di bagian berikut.

Mendaftarkan aplikasi dengan ID Microsoft Entra

Selesaikan langkah-langkah untuk mendaftarkan aplikasi dengan ID Microsoft Entra dan buat perwakilan layanan.

Mendapatkan ID klien aplikasi Microsoft Entra

  1. Di portal Azure, buka menu ID Microsoft Entra dan pilih Pendaftaran aplikasi.
  2. Dalam daftar aplikasi, salin nilai untuk ID Aplikasi (klien) untuk aplikasi terdaftar.

Cuplikan layar yang memperlihatkan APLIKASI atau ID klien aplikasi Microsoft Entra.

Tetapkan peran Penerbit Metrik Pemantauan pada aturan pengumpulan data ruang kerja ke aplikasi

Aplikasi harus diberi peran Penerbit Metrik Pemantauan pada aturan pengumpulan data yang terkait dengan ruang kerja Azure Monitor Anda.

  1. Pada menu sumber daya untuk ruang kerja Azure Monitor Anda, pilih Gambaran Umum. Untuk Aturan pengumpulan data, pilih tautan .

    Cuplikan layar yang memperlihatkan aturan pengumpulan data yang digunakan oleh ruang kerja Azure Monitor.

  2. Pada menu sumber daya untuk aturan pengumpulan data, pilih Kontrol akses (IAM).

  3. Pilih Tambahkan, lalu pilih Tambahkan penetapan peran.

    Cuplikan layar yang memperlihatkan penambahan penetapan peran pada halaman kontrol Akses.

  4. Pilih peran Penerbit Metrik Pemantauan, lalu pilih Berikutnya.

    Cuplikan layar yang memperlihatkan daftar penetapan peran.

  5. Pilih Pengguna, grup, atau perwakilan layanan, lalu pilih Pilih anggota. Pilih aplikasi yang Anda buat, lalu pilih Pilih.

    Cuplikan layar yang menunjukkan pemilihan aplikasi.

  6. Untuk menyelesaikan penetapan peran, pilih Tinjau + tetapkan.

Membuat brankas kunci Azure dan membuat sertifikat

  1. Jika Anda belum memiliki brankas kunci Azure, buat brankas.
  2. Buat sertifikat dengan menggunakan panduan di Menambahkan sertifikat ke Key Vault.
  3. Unduh sertifikat dalam format CER dengan menggunakan panduan dalam Mengekspor sertifikat dari Key Vault.

Menambahkan sertifikat ke aplikasi Microsoft Entra

  1. Pada menu sumber daya untuk aplikasi Microsoft Entra Anda, pilih Sertifikat & rahasia.

  2. Pada tab Sertifikat , pilih Unggah sertifikat dan pilih sertifikat yang Anda unduh.

    Cuplikan layar yang memperlihatkan pengunggahan sertifikat untuk aplikasi Microsoft Entra.

Peringatan

Sertifikat memiliki tanggal kedaluwarsa. Pengguna bertanggung jawab untuk menjaga sertifikat tetap valid.

Menambahkan driver dan penyimpanan CSI untuk kluster

Catatan

Konfigurasi driver CSI Azure Key Vault hanyalah salah satu cara untuk mendapatkan sertifikat yang dipasang pada pod. Kontainer tulis jarak jauh memerlukan jalur lokal ke sertifikat di pod hanya untuk <AZURE_CLIENT_CERTIFICATE_PATH> nilai dalam langkah Sebarkan kontainer sidecar untuk menyiapkan penulisan jarak jauh.

Langkah ini diperlukan hanya jika Anda tidak mengaktifkan Penyedia Azure Key Vault untuk Driver Secrets Store CSI saat Anda membuat kluster.

  1. Untuk mengaktifkan Penyedia Azure Key Vault untuk Driver Secrets Store CSI untuk kluster Anda, jalankan perintah Azure CLI berikut:

    az aks enable-addons --addons azure-keyvault-secrets-provider --name <aks-cluster-name> --resource-group <resource-group-name>
    
  2. Untuk memberikan akses identitas ke brankas kunci, jalankan perintah ini:

    # 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. Buat SecretProviderClass dengan menyimpan YAML berikut ke file bernama secretproviderclass.yml. Ganti nilai untuk userAssignedIdentityID, keyvaultName, tenantId, dan objek yang akan diambil dari brankas kunci Anda. Untuk informasi tentang nilai apa yang akan digunakan, lihat Menyediakan identitas untuk mengakses Penyedia Azure Key Vault untuk Driver CSI Secrets Store.

    # 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. Terapkan SecretProviderClass dengan menjalankan perintah berikut pada kluster Anda:

    kubectl apply -f secretproviderclass.yml
    

Menyebarkan kontainer sidecar untuk menyiapkan penulisan jarak jauh

  1. Salin YAML berikut dan simpan ke file. YAML menggunakan port 8081 sebagai port mendengarkan. Jika Anda menggunakan port yang berbeda, ubah nilai tersebut di 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. Ganti nilai berikut dalam file YAML:

    Nilai Deskripsi
    <CLUSTER-NAME> Nama kluster AKS Anda.
    <CONTAINER-IMAGE-VERSION> mcr.microsoft.com/azuremonitor/containerinsights/ciprod/prometheus-remote-write/images:prom-remotewrite-20240617.1
    Versi gambar kontainer tulis jarak jauh.
    <INGESTION-URL> Nilai untuk titik akhir penyerapan Metrik dari halaman Gambaran Umum untuk ruang kerja Azure Monitor.
    <APP-REGISTRATION -CLIENT-ID> ID klien aplikasi Anda.
    <TENANT-ID> ID penyewa aplikasi Microsoft Entra.
    <CERT-NAME> Nama sertifikat.
    <CLUSTER-NAME> Nama kluster tempat Prometheus berjalan.
  3. Buka Azure Cloud Shell dan unggah file YAML.

  4. Gunakan Helm untuk menerapkan file YAML dan memperbarui konfigurasi Prometheus Anda:

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

Verifikasi dan pemecahan masalah

Untuk informasi verifikasi dan pemecahan masalah, lihat Pemecahan masalah penulisan jarak jauh dan layanan terkelola Azure Monitor untuk penulisan jarak jauh Prometheus.

Langkah berikutnya