Monitorování stavu a aktivity GitOps (Flux v2)

Pokud chcete monitorovat stav a aktivitu související s GitOps pomocí Flux v2 v clusterech Kubernetes s podporou Azure Arc nebo clusterů Azure Kubernetes Service (AKS), máte několik možností:

Toto téma popisuje některé ze způsobů, jak monitorovat aktivitu a stav rozšíření Flux.

Monitorování konfigurací fluxu na webu Azure Portal

Po vytvoření konfigurací fluxu v clusteru můžete na webu Azure Portal zobrazit informace o stavu tak, že přejdete do clusteru a vyberete GitOps.

Zobrazení podrobností o dodržování předpisů clusteru a objektech

Stav dodržování předpisů ukazuje, jestli aktuální stav clusteru odpovídá požadovanému stavu. Možné hodnoty:

  • Kompatibilní: Stav clusteru odpovídá požadovanému stavu.
  • Čeká na vyřízení: Byl zjištěn aktualizovaný požadovaný stav, ale tento stav ještě není v clusteru odsouhlasený.
  • Nedodržuje předpisy: Aktuální stav neodpovídá požadovanému stavu.

Snímek obrazovky s dodržováním předpisů clusteru a dalšími hodnotami na webu Azure Portal

Pokud chcete ladit problémy s vyrovnáním clusteru, vyberte Objekty konfigurace. Tady můžete zobrazit protokoly jednotlivých objektů konfigurace, které Flux vytvoří pro každou konfiguraci fluxu. Výběrem názvu objektu zobrazíte jeho protokoly.

Snímek obrazovky zobrazující podrobné podmínky pro objekt konfigurace

Pokud chcete zobrazit objekty Kubernetes vytvořené v důsledku použití konfigurací Flux, vyberte úlohy v části Prostředky Kubernetes v nabídce služby clusteru. Tady můžete zobrazit všechny podrobnosti o všech prostředcích vytvořených v clusteru.

Ve výchozím nastavení můžete filtrovat podle oboru názvů a názvu služby. Můžete také přidat libovolný filtr popisků, který můžete ve svých aplikacích použít, aby se hledání zúžilo.

Zobrazení stavu konfigurace flux a podrobností

Pro každou konfiguraci Flux sloupec State označuje, zda byl objekt konfigurace Flux úspěšně vytvořen v clusteru.

Výběrem libovolné konfigurace Flux zobrazíte stránku Přehled , včetně následujících informací:

  • ID potvrzení zdroje pro poslední synchronizaci
  • Časové razítko nejnovější aktualizace zdroje
  • Časové razítko aktualizace stavu (označující, kdy byly získány nejnovější statistiky)
  • Adresa URL úložiště a větev
  • Odkazy pro zobrazení různých kustomizací

Snímek obrazovky se stránkou Přehled konfigurace fluxu na webu Azure Portal

Monitorování stavu a aktivity GitOps pomocí řídicích panelů

Poskytujeme řídicí panely, které vám pomůžou monitorovat stav, dodržování předpisů, spotřebu prostředků a aktivitu odsouhlasení pro GitOps pomocí fluxu v2. Tyto řídicí panely JSON je možné importovat do Grafany, které vám pomůžou zobrazit a analyzovat data v reálném čase. Můžete také nastavit výstrahy pro tyto informace.

K importu a používání těchto řídicích panelů potřebujete:

  • Jeden nebo více existujících clusterů Kubernetes s podporou Arc nebo clusterů AKS
  • Rozšíření microsoft.flux nainstalované v clusterech.
  • Nejméně jedna konfigurace fluxu vytvořená v clusterech.

Monitorování stavu nasazení a dodržování předpisů

Pomocí těchto kroků naimportujte řídicí panely, které umožňují monitorovat nasazení a stav rozšíření Flux napříč clustery a stav dodržování předpisů konfigurace fluxu v těchto clusterech.

Poznámka:

Tento postup popisuje proces importu řídicího panelu do Spravované grafany Azure. Tento řídicí panel můžete také importovat do libovolné instance Grafany. S touto možností se musí použít instanční objekt; Spravovaná identita se nepodporuje pro datové připojení mimo Azure Managed Grafana.

  1. Vytvořte instanci Azure Managed Grafana pomocí webu Azure Portal nebo Azure CLI. Výběrem jeho koncového bodu na stránce Přehled se ujistěte, že máte přístup k Grafana. K zobrazení a úpravám řídicích panelů potřebujete alespoň oprávnění na úrovni Editoru Grafana. Přístup můžete zkontrolovat tak, že v instanci Grafany přejdete na Řízení přístupu (IAM ).

  2. Pokud používáte spravovanou identitu pro instanci Azure Managed Grafana, přiřaďte ji roli Čtenář monitorování v předplatném, ve kterém jste vytvořili instanci Azure Managed Grafana:

    1. Na webu Azure Portal přejděte k předplatnému, které chcete přidat.
    2. Vyberte Řízení přístupu (IAM) .
    3. Vyberte Přidat přiřazení role.
    4. Vyberte roli Čtenář monitorování a pak vyberte Další.
    5. Na kartě Členové vyberte Spravovaná identita a pak zvolte Vybrat členy.
    6. V seznamu spravovaných identit vyberte předplatné a pak vyberte Azure Managed Grafana a název vaší instance Azure Managed Grafana.
    7. Vyberte Zkontrolovat + přiřadit.

    Pokud používáte instanční objekt, udělte instančnímu objektu roli Čtenář monitorování, kterou použijete pro připojení ke zdroji dat. Postupujte stejně, ale na kartě Členové vyberte uživatele, skupinu nebo instanční objekt a pak vyberte instanční objekt. (Pokud nepoužíváte Azure Managed Grafana, musíte pro přístup k datovým připojením použít instanční objekt.)

  3. Vytvořte připojení ke zdroji dat služby Azure Monitor ve vaší instanci Azure Managed Grafana. Toto připojení umožňuje řídicímu panelu přistupovat k datům Azure Resource Graphu.

  4. Stáhněte si řídicí panel nasazení aplikací GitOps Flux.

  5. Podle pokynů naimportujte řídicí panel JSON do Grafany.

Po importu řídicího panelu se zobrazí informace z clusterů, které monitorujete, s několika panely, které poskytují podrobnosti. Další podrobnosti o položce najdete na webu Azure Portal, kde najdete informace o konfiguracích, chybách a protokolech.

Snímek obrazovky s řídicím panelem Nasazení aplikace Flux

Tabulka Stav nasazení rozšíření Flux obsahuje seznam všech clusterů, ve kterých je nasazené rozšíření Flux, spolu s aktuálním stavem nasazení.

Snímek obrazovky zobrazující tabulku Stav nasazení rozšíření Flux na řídicím panelu Nasazení aplikací

Tabulka Stav dodržování předpisů konfigurace flux obsahuje seznam všech konfigurací Flux vytvořených v clusterech a jejich stav dodržování předpisů. Pokud chcete zobrazit protokoly stavu a chyb pro objekty konfigurace, jako jsou verze Helmu a kustomizace, vyberte ve sloupci ComplianceState odkaz Nevyhovující předpisům.

Snímek obrazovky zobrazující tabulku Stav dodržování předpisů konfigurace flux na řídicím panelu Nasazení aplikací

Graf Počet nasazení rozšíření flux podle stavu zobrazuje počet clusterů na základě jejich stavu zřizování.

Snímek obrazovky s výsečem Nasazení rozšíření Flux podle stavu na řídicím panelu Nasazení aplikací

Graf Count of Flux Configurations by Compliance Status chart (Počet konfigurací flux podle stavu dodržování předpisů) zobrazuje počet konfigurací Flux na základě jejich stavu dodržování předpisů v souvislosti se zdrojovým úložištěm.

Snímek obrazovky s grafem Flux Configuration by Compliance Status (Konfigurace flux by Compliance Status) na řídicím panelu Nasazení aplikací

Filtrování dat řídicího panelu pro sledování nasazení aplikací

Data můžete filtrovat na řídicím panelu GitOps Flux – Nasazení aplikací a změnit zobrazené informace. Můžete například zobrazit data jenom pro určitá předplatná nebo skupiny prostředků nebo omezit data na konkrétní cluster. Uděláte to tak, že vyberete možnost filtru z rozevíracích polí nejvyšší úrovně nebo z libovolného záhlaví sloupce v tabulkách.

Například v tabulce Stav dodržování předpisů konfigurace Flux můžete vybrat konkrétní potvrzení ze sloupce SourceLastSyncCommit . Tímto způsobem můžete sledovat stav nasazení konfigurace do všech clusterů ovlivněných tímto potvrzením.

Vytváření upozornění pro selhání rozšíření a konfigurace

Po importu řídicího panelu, jak je popsáno v předchozí části, můžete nastavit upozornění. Tato upozornění vás upozorní, když dojde k selhání rozšíření Flux nebo konfigurací flux.

Pokud chcete vytvořit upozornění, postupujte podle těchto kroků. Ukázkové dotazy se poskytují k detekci selhání zřizování rozšíření nebo upgradu rozšíření nebo zjišťování chyb stavu dodržování předpisů.

  1. V levé navigační nabídce řídicího panelu vyberte Výstrahy.

  2. Vyberte pravidla upozornění.

  3. Vyberte + Vytvořit pravidlo upozornění. Otevře se nová stránka pravidla upozornění s vybranou možností Upozornění spravovaná grafana ve výchozím nastavení.

  4. Do názvu pravidla přidejte popisný název. Tento název se zobrazí v seznamu pravidel upozornění a použije se jako alertname popisek pro každou instanci výstrahy vytvořenou z tohoto pravidla.

  5. V části Nastavit dotaz a podmínku upozornění:

    • Vyberte zdroj dat. Tady můžete použít stejný zdroj dat, který se používá pro řídicí panel.

    • Jako službu vyberte Azure Resource Graph.

    • V rozevíracím seznamu vyberte předplatná.

    • Zadejte dotaz, který chcete použít. Například pro selhání zřizování nebo upgradu rozšíření můžete zadat tento dotaz:

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

      Nebo v případě selhání stavu dodržování předpisů můžete zadat tento dotaz:

      kubernetesconfigurationresources
      | where type == "microsoft.kubernetesconfiguration/fluxconfigurations"
      | extend complianceState=tostring(properties.complianceState)
      | where complianceState == "Non-Compliant"
      | summarize count() by complianceState
      
    • V poli Prahová hodnota vyberte jako typ vstupu A a nastavte prahovou hodnotu na 0 pro příjem výstrah, i když v clusteru selže jenom jedno rozšíření. Označte ji jako podmínku upozornění.

    Snímek obrazovky znázorňující proces vytvoření upozornění

  6. Zadejte interval vyhodnocení výstrahy:

    • V části Podmínka vyberte dotaz nebo výraz, který aktivuje pravidlo upozornění.
    • Pro vyhodnocení každého zadejte frekvenci vyhodnocení jako násobek 10 sekund.
    • Pro vyhodnocení zadejte, jak dlouho musí být podmínka pravdivá, než se výstraha vytvoří.
    • V části Konfigurovat žádná data a zpracování chyb uveďte, co by se mělo stát, když pravidlo upozornění nevrátí žádná data nebo vrátí chybu.
    • Pokud chcete zkontrolovat výsledky spuštění dotazu, vyberte Náhled.
  7. Přidejte umístění úložiště, skupinu pravidel a všechna další metadata, která chcete k pravidlu přidružit.

    • V části Složka vyberte složku, do které má být pravidlo uloženo.
    • Pro skupinu zadejte předdefinovanou skupinu.
    • V případě potřeby přidejte popis a souhrn a přizpůsobte si zprávy upozornění.
    • Podle potřeby přidejte adresu URL, panel, řídicí panel a ID upozornění runbooku.
  8. V případě potřeby přidejte jakékoli vlastní popisky. Pak vyberte Uložit.

Můžete také nakonfigurovat kontaktní body a zásady oznámení pro upozornění.

Monitorování spotřeby prostředků a odsouhlasení

Pomocí těchto kroků naimportujte řídicí panely, které umožňují monitorovat spotřebu prostředků Flux, odsouhlasení, požadavky rozhraní API a stav odsouhlasení.

  1. Podle pokynů vytvořte pracovní prostor služby Azure Monitor.

  2. Vytvořte instanci Azure Managed Grafana pomocí webu Azure Portal nebo Azure CLI.

  3. Povolte shromažďování metrik Prometheus v clusterech AKS nebo clusterech Kubernetes s podporou Arc, které chcete monitorovat.

  4. Nakonfigurujte agenta Služby Azure Monitor tak, aby se zřetěžily metriky spravované fluxem Azure vytvořením mapy konfigurace:

    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. Stáhněte řídicí panely Flux Control Plane a Flux Cluster Stats.

  6. Propojte pracovní prostor Managed Prometheus se spravovanou instancí Grafany. Dokončení tohoto procesu trvá několik minut.

  7. Podle pokynů naimportujte tyto řídicí panely JSON do Grafany.

Po importu řídicích panelů zobrazí informace z clusterů, které monitorujete. Pokud chcete zobrazit informace jenom pro konkrétní cluster nebo obor názvů, použijte filtry v horní části každého řídicího panelu.

Řídicí panel Řídicí rovina flux zobrazuje podrobnosti o spotřebě prostředků stavu, odsouhlasení na úrovni clusteru a požadavcích rozhraní API Kubernetes.

Snímek obrazovky řídicího panelu řídicí roviny flux

Řídicí panel Statistiky clusteru Flux zobrazuje podrobnosti o počtu odsouhlasovačů spolu se stavem a dobou trvání provádění každého odsouhlasení.

Snímek obrazovky řídicího panelu Statistiky clusteru Flux

Vytváření upozornění na problémy se spotřebou prostředků a vyrovnáním

Po importu řídicího panelu, jak je popsáno v předchozí části, můžete nastavit upozornění. Tyto výstrahy vás informují o spotřebě prostředků a problémech s vyrovnáním, které mohou vyžadovat pozornost.

Pokud chcete tato upozornění povolit, nasadíte šablonu Bicep podobnou té, která je zde zobrazená. Pravidla upozornění v této šabloně jsou ukázky, které je možné podle potřeby upravit.

Po stažení šablony Bicep a provedení změn šablonu nasaďte pomocí těchto kroků.

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
          }
        ]
      }
    ]
  }
}

Další kroky