Memantau status dan aktivitas GitOps (Flux v2)

Untuk memantau status dan aktivitas yang terkait dengan GitOps dengan Flux v2 di kluster Kubernetes dengan dukungan Azure Arc atau kluster Azure Kubernetes Service (AKS), Anda memiliki beberapa opsi:

Topik ini menjelaskan beberapa cara Anda dapat memantau aktivitas dan status Flux Anda.

Memantau konfigurasi Fluks di portal Azure

Setelah membuat konfigurasi Fluks di kluster, Anda dapat melihat informasi status di portal Azure dengan menavigasi ke kluster dan memilih GitOps.

Melihat detail tentang kepatuhan kluster dan objek

Status Kepatuhan menunjukkan apakah status kluster saat ini cocok dengan status yang diinginkan. Nilai yang mungkin:

  • Sesuai: Status kluster cocok dengan status yang diinginkan.
  • Tertunda: Status yang diinginkan yang diperbarui telah terdeteksi, tetapi status tersebut belum direkonsiliasi pada kluster.
  • Tidak Sesuai: Status saat ini tidak cocok dengan status yang diinginkan.

Screenshot of cluster compliance and other values in the Azure portal.

Untuk membantu men-debug masalah rekonsiliasi untuk kluster, pilih Objek konfigurasi. Di sini, Anda dapat melihat log dari setiap objek konfigurasi yang dibuat Flux untuk setiap konfigurasi Flux. Pilih nama objek untuk melihat lognya.

Screenshot showing detailed conditions for a configuration object.

Untuk melihat objek Kubernetes yang telah dibuat sebagai akibat dari konfigurasi Fluks yang diterapkan, pilih Beban Kerja di bagian sumber daya Kubernetes dari panel navigasi kiri kluster. Di sini, Anda dapat melihat semua detail sumber daya apa pun yang telah dibuat pada kluster.

Secara default, Anda dapat memfilter menurut namespace layanan dan nama layanan. Anda juga dapat menambahkan filter label apa pun yang mungkin Anda gunakan di aplikasi Anda untuk membantu mempersempit pencarian.

Lihat status dan detail konfigurasi Fluks

Untuk setiap konfigurasi Fluks, kolom Status menunjukkan apakah objek konfigurasi Fluks telah berhasil dibuat pada kluster.

Pilih konfigurasi Fluks apa pun untuk melihat halaman Gambaran Umumnya, termasuk informasi berikut:

  • ID penerapan sumber untuk sinkronisasi terakhir
  • Tanda waktu pembaruan sumber terbaru
  • Tanda waktu pembaruan status (menunjukkan kapan statistik terbaru diperoleh)
  • URL dan cabang repositori
  • Tautan untuk melihat kustomisasi yang berbeda

Screenshot of the Overview page of a Flux configuration in the Azure portal.

Menggunakan dasbor untuk memantau status dan aktivitas GitOps

Kami menyediakan dasbor untuk membantu Anda memantau status, kepatuhan, konsumsi sumber daya, dan aktivitas rekonsiliasi untuk GitOps dengan Flux v2. Dasbor JSON ini dapat diimpor ke Grafana untuk membantu Anda melihat dan menganalisis data Anda secara real time. Anda juga dapat menyiapkan pemberitahuan untuk informasi ini.

Untuk mengimpor dan menggunakan dasbor ini, Anda memerlukan:

  • Satu atau beberapa kluster Kubernetes yang didukung Arc atau kluster AKS yang ada.
  • Ekstensi microsoft.flux diinstal pada kluster.
  • Setidaknya satu konfigurasi Fluks yang dibuat pada kluster.

Memantau status penyebaran dan kepatuhan

Ikuti langkah-langkah ini untuk mengimpor dasbor yang memungkinkan Anda memantau penyebaran dan status ekstensi Flux di seluruh kluster, dan status kepatuhan konfigurasi Flux pada kluster tersebut.

Catatan

Langkah-langkah ini menjelaskan proses untuk mengimpor dasbor ke Azure Managed Grafana. Anda juga dapat mengimpor dasbor ini ke instans Grafana apa pun. Dengan opsi ini, perwakilan layanan harus digunakan; identitas terkelola tidak didukung untuk koneksi data di luar Azure Managed Grafana.

  1. Buat instans Azure Managed Grafana dengan menggunakan portal Azure atau Azure CLI. Pastikan Anda dapat mengakses Grafana dengan memilih titik akhirnya di halaman Gambaran Umum. Anda memerlukan setidaknya izin tingkat Editor Grafana untuk melihat dan mengedit dasbor. Anda dapat memeriksa akses Anda dengan masuk ke Kontrol akses (IAM) pada instans Grafana.

  2. Jika Anda menggunakan identitas terkelola untuk instans Azure Managed Grafana, ikuti langkah-langkah ini untuk menetapkan peran Pembaca Pemantauan pada langganan:

    1. Di portal Azure, navigasikan ke langganan yang ingin Anda tambahkan.
    2. Pilih Kontrol Akses (IAM) .
    3. Pilih Tambahkan penetapan peran.
    4. Pilih peran Pembaca Pemantauan, lalu pilih Berikutnya.
    5. Pada tab Anggota , pilih Identitas terkelola, lalu pilih Pilih anggota.
    6. Dari daftar Identitas terkelola, pilih langganan tempat Anda membuat Instans Azure Managed Grafana. Lalu pilih Azure Managed Grafana dan nama instans Azure Managed Grafana Anda.
    7. Pilih Tinjau + Tetapkan.

    Jika Anda menggunakan perwakilan layanan, berikan peran Pembaca Pemantauan kepada perwakilan layanan yang akan Anda gunakan untuk koneksi sumber data Anda. Ikuti langkah-langkah yang sama ini, tetapi pilih Pengguna, grup, atau perwakilan layanan di tab Anggota , lalu pilih perwakilan layanan Anda. (Jika Anda tidak menggunakan Azure Managed Grafana, Anda harus menggunakan perwakilan layanan untuk akses koneksi data.)

  3. Buat koneksi Sumber Data Azure Monitor di instans Azure Managed Grafana Anda. Koneksi ini memungkinkan dasbor mengakses data Azure Resource Graph.

  4. Unduh Dasbor GitOps Flux - Penyebaran Aplikasi.

  5. Ikuti langkah-langkah untuk mengimpor dasbor JSON ke Grafana.

Setelah Anda mengimpor dasbor, dasbor akan menampilkan informasi dari kluster yang Anda pantau, dengan beberapa panel yang memberikan detail. Untuk detail selengkapnya tentang item, pilih tautan untuk mengunjungi portal Azure, tempat Anda dapat menemukan informasi selengkapnya tentang konfigurasi, kesalahan, dan log.

Screenshot of the Flux Application Deployments Dashboard.

Tabel Status Penyebaran Ekstensi Fluks mencantumkan semua kluster tempat ekstensi Flux disebarkan, bersama dengan status penyebaran saat ini.

Screenshot showing the Flux Extension Deployments Status table in the Application Deployments dashboard.

Tabel Status Kepatuhan Konfigurasi Fluks mencantumkan semua konfigurasi Fluks yang dibuat pada kluster, bersama dengan status kepatuhannya. Untuk melihat status dan log kesalahan untuk objek konfigurasi seperti rilis dan kustomisasi Helm, pilih tautan Tidak Patuh dari kolom ComplianceState .

Screenshot showing the Flux Configuration Compliance Status table in the Application Deployments dashboard.

Bagan Jumlah Penyebaran Ekstensi Fluks menurut Status menunjukkan jumlah kluster, berdasarkan status provisinya.

Screenshot of the Flux Extension Deployments by Status pie chart in the Application Deployments dashboard.

Bagan Jumlah Konfigurasi Fluks menurut Status Kepatuhan menunjukkan jumlah konfigurasi Fluks, berdasarkan status kepatuhannya sehubungan dengan repositori sumber.

Screenshot of the Flux Configuration by Compliance Status chart on the Application Deployments dashboard.

Memfilter data dasbor untuk melacak penyebaran aplikasi

Anda dapat memfilter data di Dasbor GitOps Flux - Penyebaran Aplikasi untuk mengubah informasi yang ditampilkan. Misalnya, Anda hanya dapat menampilkan data untuk langganan atau grup sumber daya tertentu, atau membatasi data ke kluster tertentu. Untuk melakukannya, pilih opsi filter baik dari dropdown tingkat atas atau dari header kolom apa pun dalam tabel.

Misalnya, dalam tabel Status Kepatuhan Konfigurasi Fluks, Anda dapat memilih penerapan tertentu dari kolom SourceLastSyncCommit . Dengan demikian, Anda dapat melacak status penyebaran konfigurasi ke semua kluster yang terpengaruh oleh penerapan tersebut.

Membuat pemberitahuan untuk kegagalan ekstensi dan konfigurasi

Setelah mengimpor dasbor seperti yang dijelaskan di bagian sebelumnya, Anda dapat menyiapkan pemberitahuan. Pemberitahuan ini memberi tahu Anda ketika ekstensi Flux atau konfigurasi Fluks mengalami kegagalan.

Ikuti langkah-langkah di bawah ini untuk membuat pemberitahuan. Contoh kueri disediakan untuk mendeteksi provisi ekstensi atau kegagalan peningkatan ekstensi, atau untuk mendeteksi kegagalan status kepatuhan.

  1. Di menu navigasi kiri dasbor, pilih Pemberitahuan.

  2. Pilih Aturan Pemberitahuan.

  3. Pilih + Buat aturan pemberitahuan. Halaman aturan pemberitahuan baru terbuka, dengan opsi Pemberitahuan terkelola Grafana dipilih secara default.

  4. Di Nama aturan, tambahkan nama deskriptif. Nama ini ditampilkan dalam daftar aturan pemberitahuan, dan akan digunakan sebagai alertname label untuk setiap instans pemberitahuan yang dibuat dari aturan ini.

  5. Di bawah Atur kueri dan kondisi pemberitahuan:

    • Pilih sumber data. Sumber data yang sama yang digunakan untuk dasbor dapat digunakan di sini.

    • Untuk Layanan, pilih Azure Resource Graph.

    • Pilih langganan dari daftar dropdown.

    • Masukkan kueri yang ingin Anda gunakan. Misalnya, untuk provisi ekstensi atau kegagalan peningkatan, Anda dapat memasukkan kueri ini:

      kubernetesconfigurationresources
      | where type == "microsoft.kubernetesconfiguration/extensions"
      | extend provisioningState = tostring(properties.ProvisioningState)
      | where provisioningState == "Failed"
      | summarize count() by provisioningState
      

      Atau untuk kegagalan status kepatuhan, Anda bisa memasukkan kueri ini:

      kubernetesconfigurationresources
      | where type == "microsoft.kubernetesconfiguration/fluxconfigurations"
      | extend complianceState=tostring(properties.complianceState)
      | where complianceState == "Non-Compliant"
      | summarize count() by complianceState
      
    • Untuk kotak Ambang, pilih A untuk jenis input dan atur ambang batas ke 0 untuk menerima pemberitahuan meskipun hanya satu ekstensi yang gagal pada kluster. Tandai ini sebagai kondisi Pemberitahuan.

    Screenshot showing the alert creation process.

  6. Tentukan interval evaluasi pemberitahuan:

    • Untuk Kondisi, pilih kueri atau ekspresi untuk memicu aturan pemberitahuan.
    • Untuk Evaluasi setiap, masukkan frekuensi evaluasi sebagai kelipatan 10 detik.
    • Untuk Evaluasi, tentukan berapa lama kondisi harus benar sebelum pemberitahuan dibuat.
    • Di Konfigurasikan tidak ada penanganan data dan kesalahan, tunjukkan apa yang harus terjadi ketika aturan pemberitahuan tidak mengembalikan data atau mengembalikan kesalahan.
    • Untuk memeriksa hasil menjalankan kueri, pilih Pratinjau.
  7. Tambahkan lokasi penyimpanan, grup aturan, dan metadata tambahan apa pun yang ingin Anda kaitkan dengan aturan.

    • Untuk Folder, pilih folder tempat aturan harus disimpan.
    • Untuk Grup, tentukan grup yang telah ditentukan sebelumnya.
    • Jika diinginkan, tambahkan deskripsi dan ringkasan untuk menyesuaikan pesan pemberitahuan.
    • Tambahkan URL Runbook, panel, dasbor, dan ID pemberitahuan sesuai kebutuhan.
  8. Jika diinginkan, tambahkan label kustom apa pun. Kemudian pilih Simpan.

Anda juga dapat mengonfigurasi titik kontak dan mengonfigurasi kebijakan pemberitahuan untuk pemberitahuan Anda.

Memantau konsumsi dan rekonsiliasi sumber daya

Ikuti langkah-langkah ini untuk mengimpor dasbor yang memungkinkan Anda memantau konsumsi sumber daya Flux, rekonsiliasi, permintaan API, dan status pendamaian.

  1. Ikuti langkah-langkah untuk membuat Ruang Kerja Azure Monitor.

  2. Buat instans Azure Managed Grafana dengan menggunakan portal Azure atau Azure CLI.

  3. Aktifkan koleksi metrik Prometheus pada kluster AKS dan/atau kluster Kubernetes berkemampuan Arc yang ingin Anda pantau.

  4. Konfigurasikan Agen Azure Monitor untuk mengikis metrik Azure Managed Flux dengan membuat peta konfigurasi:

    kind: ConfigMap
    apiVersion: v1
    data:
      schema-version:
          #string.used by agent to parse config. supported versions are {v1}. Configs with other schema versions will be rejected by the agent.
        v1
      config-version:
        #string.used by customer to keep track of this config file's version in their source control/repository (max allowed 10 chars, other chars will be truncated)
        ver1
      default-scrape-settings-enabled: |-
        kubelet = true
        coredns = false
        cadvisor = true
        kubeproxy = false
        apiserver = false
        kubestate = true
        nodeexporter = true
        windowsexporter = false
        windowskubeproxy = false
        kappiebasic = true
        prometheuscollectorhealth = false
      # Regex for which namespaces to scrape through pod annotation based scraping.
      # This is none by default. Use '.*' to scrape all namespaces of annotated pods.
      pod-annotation-based-scraping: |-
        podannotationnamespaceregex = "flux-system"
      default-targets-scrape-interval-settings: |-
        kubelet = "30s"
        coredns = "30s"
        cadvisor = "30s"
        kubeproxy = "30s"
        apiserver = "30s"
        kubestate = "30s"
        nodeexporter = "30s"
        windowsexporter = "30s"
        windowskubeproxy = "30s"
        kappiebasic = "30s"
        prometheuscollectorhealth = "30s"
        podannotations = "30s"
    metadata:
      name: ama-metrics-settings-configmap
      namespace: kube-system
    
  5. Unduh dasbor Flux Control Plane dan Flux Cluster Stats.

  6. Tautkan ruang kerja Prometheus Terkelola ke instans Grafana Terkelola. Ini memerlukan beberapa menit untuk diselesaikan.

  7. Ikuti langkah-langkah untuk mengimpor dasbor JSON ini ke Grafana.

Setelah Anda mengimpor dasbor, dasbor akan menampilkan informasi dari kluster yang Anda pantau. Untuk menampilkan informasi hanya untuk kluster atau namespace tertentu, gunakan filter di dekat bagian atas setiap dasbor.

Dasbor Flux Control Plane menampilkan detail tentang konsumsi sumber daya status, rekonsiliasi di tingkat kluster, dan permintaan API Kubernetes.

Screenshot of the Flux Control Plane dashboard.

Dasbor Statistik Kluster Fluks menunjukkan detail tentang jumlah rekonsilier, bersama dengan status dan durasi eksekusi setiap reconciler.

Screenshot of the Flux Cluster Stats dashboard.

Membuat pemberitahuan untuk konsumsi sumber daya dan masalah rekonsiliasi

Setelah mengimpor dasbor seperti yang dijelaskan di bagian sebelumnya, Anda dapat menyiapkan pemberitahuan. Pemberitahuan ini memberi tahu Anda tentang konsumsi sumber daya dan masalah rekonsiliasi yang mungkin memerlukan perhatian.

Untuk mengaktifkan pemberitahuan ini, Anda menyebarkan templat Bicep yang mirip dengan yang diperlihatkan di sini. Aturan pemberitahuan dalam templat ini adalah sampel yang dapat dimodifikasi sesuai kebutuhan.

Setelah Anda mengunduh templat Bicep dan membuat perubahan, ikuti langkah-langkah ini untuk menyebarkan templat.

param azureMonitorWorkspaceName string
param alertReceiverEmailAddress string

param kustomizationLookbackPeriodInMinutes int = 5
param helmReleaseLookbackPeriodInMinutes int = 5
param gitRepositoryLookbackPeriodInMinutes int = 5
param bucketLookbackPeriodInMinutes int = 5
param helmRepoLookbackPeriodInMinutes int = 5
param timeToResolveAlerts string = 'PT10M'
param location string = resourceGroup().location

resource azureMonitorWorkspace 'Microsoft.Monitor/accounts@2023-04-03' = {
  name: azureMonitorWorkspaceName
  location: location
}

resource fluxRuleActionGroup 'Microsoft.Insights/actionGroups@2023-01-01' = {
  name: 'fluxRuleActionGroup'
  location: 'global'
  properties: {
    enabled: true
    groupShortName: 'fluxGroup'
    emailReceivers: [
      {
        name: 'emailReceiver'
        emailAddress: alertReceiverEmailAddress
      }
    ]
  }
}

resource fluxRuleGroup 'Microsoft.AlertsManagement/prometheusRuleGroups@2023-03-01' = {
  name: 'fluxRuleGroup'
  location: location
  properties: {
    description: 'Flux Prometheus Rule Group'
    scopes: [
      azureMonitorWorkspace.id
    ]
    enabled: true
    interval: 'PT1M'
    rules: [
      {
        alert: 'KustomizationNotReady'
        expression: 'sum by (cluster, namespace, name) (gotk_reconcile_condition{type="Ready", status="False", kind="Kustomization"}) > 0'
        for: 'PT${kustomizationLookbackPeriodInMinutes}M'
        labels: {
          description: 'Kustomization reconciliation failing for last ${kustomizationLookbackPeriodInMinutes} minutes.'
        }
        annotations: {
          description: 'Kustomization reconciliation failing for last ${kustomizationLookbackPeriodInMinutes} minutes.'
        }
        enabled: true
        severity: 3
        resolveConfiguration: {
          autoResolved: true
          timeToResolve: timeToResolveAlerts
        }
        actions: [
          {
            actionGroupId: fluxRuleActionGroup.id
          }
        ]
      }
      {
        alert: 'HelmReleaseNotReady'
        expression: 'sum by (cluster, namespace, name) (gotk_reconcile_condition{type="Ready", status="False", kind="HelmRelease"}) > 0'
        for: 'PT${helmReleaseLookbackPeriodInMinutes}M'
        labels: {
          description: 'HelmRelease reconciliation failing for last ${helmReleaseLookbackPeriodInMinutes} minutes.'
        }
        annotations: {
          description: 'HelmRelease reconciliation failing for last ${helmReleaseLookbackPeriodInMinutes} minutes.'
        }
        enabled: true
        severity: 3
        resolveConfiguration: {
          autoResolved: true
          timeToResolve: timeToResolveAlerts
        }
        actions: [
          {
            actionGroupId: fluxRuleActionGroup.id
          }
        ]
      }
      {
        alert: 'GitRepositoryNotReady'
        expression: 'sum by (cluster, namespace, name) (gotk_reconcile_condition{type="Ready", status="False", kind="GitRepository"}) > 0'
        for: 'PT${gitRepositoryLookbackPeriodInMinutes}M'
        labels: {
          description: 'GitRepository reconciliation failing for last ${gitRepositoryLookbackPeriodInMinutes} minutes.'
        }
        annotations: {
          description: 'GitRepository reconciliation failing for last ${gitRepositoryLookbackPeriodInMinutes} minutes.'
        }
        enabled: true
        severity: 3
        resolveConfiguration: {
          autoResolved: true
          timeToResolve: timeToResolveAlerts
        }
        actions: [
          {
            actionGroupId: fluxRuleActionGroup.id
          }
        ]
      }
      {
        alert: 'BucketNotReady'
        expression: 'sum by (cluster, namespace, name) (gotk_reconcile_condition{type="Ready", status="False", kind="Bucket"}) > 0'
        for: 'PT${bucketLookbackPeriodInMinutes}M'
        labels: {
          description: 'Bucket reconciliation failing for last ${bucketLookbackPeriodInMinutes} minutes.'
        }
        annotations: {
          description: 'Bucket reconciliation failing for last ${bucketLookbackPeriodInMinutes} minutes.'
        }
        enabled: true
        severity: 3
        resolveConfiguration: {
          autoResolved: true
          timeToResolve: timeToResolveAlerts
        }
        actions: [
          {
            actionGroupId: fluxRuleActionGroup.id
          }
        ]
      }
      {
        alert: 'HelmRepositoryNotReady'
        expression: 'sum by (cluster, namespace, name) (gotk_reconcile_condition{type="Ready", status="False", kind="HelmRepository"}) > 0'
        for: 'PT${helmRepoLookbackPeriodInMinutes}M'
        labels: {
          description: 'HelmRepository reconciliation failing for last ${helmRepoLookbackPeriodInMinutes} minutes.'
        }
        annotations: {
          description: 'HelmRepository reconciliation failing for last ${helmRepoLookbackPeriodInMinutes} minutes.'
        }
        enabled: true
        severity: 3
        resolveConfiguration: {
          autoResolved: true
          timeToResolve: timeToResolveAlerts
        }
        actions: [
          {
            actionGroupId: fluxRuleActionGroup.id
          }
        ]
      }
    ]
  }
}

Langkah berikutnya