Övervaka Status och aktivitet för GitOps (Flux v2)

Om du vill övervaka status och aktivitet relaterad till GitOps med Flux v2 i dina Azure Arc-aktiverade Kubernetes-kluster eller Azure Kubernetes Service-kluster (AKS) har du flera alternativ:

Det här avsnittet beskriver några av de sätt som du kan övervaka din Flux-aktivitet och status på.

Övervaka Flux-konfigurationer i Azure-portalen

När du har skapat Flux-konfigurationer i klustret kan du visa statusinformation i Azure-portalen genom att navigera till ett kluster och välja GitOps.

Visa information om klusterefterlevnad och objekt

Kompatibilitetstillståndet visar om klustrets aktuella tillstånd matchar önskat tillstånd. Möjliga värden:

  • Kompatibel: Klustrets tillstånd matchar önskat tillstånd.
  • Väntar: Ett uppdaterat önskat tillstånd har identifierats, men det tillståndet har ännu inte avstämts i klustret.
  • Inte kompatibel: Det aktuella tillståndet matchar inte önskat tillstånd.

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

Om du vill felsöka avstämningsproblem för ett kluster väljer du Konfigurationsobjekt. Här kan du visa loggar för vart och ett av de konfigurationsobjekt som Flux skapar för varje Flux-konfiguration. Välj ett objektnamn för att visa loggarna.

Screenshot showing detailed conditions for a configuration object.

Om du vill visa Kubernetes-objekt som har skapats till följd av att Flux-konfigurationer tillämpas väljer du Arbetsbelastningar i avsnittet Kubernetes-resurser i klustrets vänstra navigeringsfönster. Här kan du visa all information om alla resurser som har skapats i klustret.

Som standard kan du filtrera efter namnområde och tjänstnamn. Du kan också lägga till valfritt etikettfilter som du kan använda i dina program för att begränsa sökningen.

Visa fluxkonfigurationstillstånd och information

För varje Flux-konfiguration anger kolumnen Tillstånd om Flux-konfigurationsobjektet har skapats i klustret.

Välj en Flux-konfiguration för att se dess översiktssida , inklusive följande information:

  • Källinchecknings-ID för den senaste synkroniseringen
  • Tidsstämpel för den senaste källuppdateringen
  • Tidsstämpel för statusuppdatering (som anger när den senaste statistiken erhölls)
  • Url och gren för lagringsplats
  • Länkar för att visa olika kustomizations

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

Använda instrumentpaneler för att övervaka GitOps-status och aktivitet

Vi tillhandahåller instrumentpaneler som hjälper dig att övervaka status, efterlevnad, resursförbrukning och avstämningsaktivitet för GitOps med Flux v2. Dessa JSON-instrumentpaneler kan importeras till Grafana för att hjälpa dig att visa och analysera dina data i realtid. Du kan också konfigurera aviseringar för den här informationen.

Om du vill importera och använda dessa instrumentpaneler behöver du:

  • Ett eller flera befintliga Arc-aktiverade Kubernetes-kluster eller AKS-kluster.
  • Microsoft.flux-tillägget som är installerat på klustren.
  • Minst en Flux-konfiguration som skapats i klustren.

Övervaka distributions- och efterlevnadsstatus

Följ de här stegen för att importera instrumentpaneler som gör att du kan övervaka distribution och status för Flux-tillägg mellan kluster och kompatibilitetsstatusen för Flux-konfigurationen i dessa kluster.

Kommentar

De här stegen beskriver processen för att importera instrumentpanelen till Azure Managed Grafana. Du kan också importera den här instrumentpanelen till valfri Grafana-instans. Med det här alternativet måste tjänstens huvudnamn användas. hanterad identitet stöds inte för dataanslutning utanför Azure Managed Grafana.

  1. Skapa en Azure Managed Grafana-instans med hjälp av Azure-portalen eller Azure CLI. Se till att du kan komma åt Grafana genom att välja dess slutpunkt på sidan Översikt. Du behöver minst behörigheter på Grafana-redigerarnivå för att visa och redigera instrumentpaneler. Du kan kontrollera din åtkomst genom att gå till Åtkomstkontroll (IAM) på Grafana-instansen.

  2. Om du använder en hanterad identitet för Azure Managed Grafana-instansen följer du de här stegen för att tilldela den rollen Övervakningsläsare för prenumerationerna:

    1. Gå till den prenumeration som du vill lägga till i Azure-portalen.
    2. Välj Åtkomstkontroll (IAM) .
    3. Välj Lägg till rolltilldelning.
    4. Välj rollen Övervakningsläsare och välj sedan Nästa.
    5. På fliken Medlemmar väljer du Hanterad identitet och sedan Välj medlemmar.
    6. I listan Hanterad identitet väljer du den prenumeration där du skapade din Azure Managed Grafana-instans. Välj sedan Azure Managed Grafana och namnet på din Azure Managed Grafana-instans.
    7. Välj Granska + tilldela.

    Om du använder ett huvudnamn för tjänsten beviljar du rollen Övervakningsläsare till tjänstens huvudnamn som du ska använda för datakällans anslutning. Följ samma steg, men välj Användare, grupp eller tjänstens huvudnamnfliken Medlemmar och välj sedan tjänstens huvudnamn. (Om du inte använder Azure Managed Grafana måste du använda tjänstens huvudnamn för åtkomst till dataanslutning.)

  3. Skapa Azure Monitor Data Source-anslutningen i din Azure Managed Grafana-instans. Med den här anslutningen kan instrumentpanelen komma åt Azure Resource Graph-data.

  4. Ladda ned instrumentpanelen För GitOps Flux – programdistributioner.

  5. Följ stegen för att importera JSON-instrumentpanelen till Grafana.

När du har importerat instrumentpanelen visas information från de kluster som du övervakar, med flera paneler som innehåller information. Om du vill ha mer information om ett objekt väljer du länken för att besöka Azure-portalen, där du hittar mer information om konfigurationer, fel och loggar.

Screenshot of the Flux Application Deployments Dashboard.

I tabellen Distributionsstatus för Flux-tillägg visas alla kluster där Flux-tillägget distribueras, tillsammans med aktuell distributionsstatus.

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

Tabellen Flux Configuration Compliance Status visar alla Flux-konfigurationer som skapats i klustren, tillsammans med deras efterlevnadsstatus. Om du vill se status- och felloggar för konfigurationsobjekt som Helm-versioner och kustomiseringar väljer du länken Icke-kompatibel från kolumnen ComplianceState .

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

Diagrammet Antal fluxtilläggsdistributioner efter status visar antalet kluster baserat på deras etableringstillstånd.

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

Diagrammet Antal fluxkonfigurationer efter efterlevnadsstatus visar antalet Flux-konfigurationer baserat på deras efterlevnadsstatus för källlagringsplatsen.

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

Filtrera instrumentpanelsdata för att spåra programdistributioner

Du kan filtrera data i Instrumentpanelen för GitOps Flux – Programdistributioner för att ändra den information som visas. Du kan till exempel bara visa data för vissa prenumerationer eller resursgrupper eller begränsa data till ett visst kluster. Om du vill göra det väljer du filteralternativet antingen från listrutorna på den översta nivån eller från valfri kolumnrubrik i tabellerna.

I tabellen Flux-konfigurationsefterlevnadsstatus kan du till exempel välja en specifik incheckning från kolumnen SourceLastSyncCommit. På så sätt kan du spåra statusen för en konfigurationsdistribution till alla kluster som påverkas av incheckningen.

Skapa aviseringar för tilläggs- och konfigurationsfel

När du har importerat instrumentpanelen enligt beskrivningen i föregående avsnitt kan du konfigurera aviseringar. Dessa aviseringar meddelar dig när Flux-tillägg eller Flux-konfigurationer upplever fel.

Följ stegen nedan för att skapa en avisering. Exempelfrågor tillhandahålls för att identifiera tilläggsetablerings- eller tilläggsuppgraderingsfel eller för att identifiera fel med efterlevnadstillstånd.

  1. I den vänstra navigeringsmenyn på instrumentpanelen väljer du Aviseringar.

  2. Välj Aviseringsregler.

  3. Välj + Skapa aviseringsregel. Sidan ny aviseringsregel öppnas med alternativet Grafana-hanterade aviseringar valt som standard.

  4. I Regelnamn lägger du till ett beskrivande namn. Det här namnet visas i listan över aviseringsregler och används som etikett för varje aviseringsinstans som alertname skapas från den här regeln.

  5. Under Ange en fråga och ett aviseringsvillkor:

    • Välj en datakälla. Samma datakälla som används för instrumentpanelen kan användas här.

    • För Tjänst väljer du Azure Resource Graph.

    • Välj prenumerationerna i listrutan.

    • Ange den fråga som du vill använda. För tilläggsetablering eller uppgraderingsfel kan du till exempel ange den här frågan:

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

      Du kan också ange följande fråga för fel i efterlevnadstillståndet:

      kubernetesconfigurationresources
      | where type == "microsoft.kubernetesconfiguration/fluxconfigurations"
      | extend complianceState=tostring(properties.complianceState)
      | where complianceState == "Non-Compliant"
      | summarize count() by complianceState
      
    • I rutan Tröskelvärde väljer du A för indatatyp och anger tröskelvärdet till 0 för att ta emot aviseringar även om bara ett tillägg misslyckas i klustret. Markera detta som aviseringsvillkoret.

    Screenshot showing the alert creation process.

  6. Ange aviseringsutvärderingsintervallet:

    • För Villkor väljer du frågan eller uttrycket för att utlösa aviseringsregeln.
    • För Utvärdera var anger du utvärderingsfrekvensen som flera av 10 sekunder.
    • För Utvärdera för anger du hur länge villkoret måste vara sant innan aviseringen skapas.
    • I Konfigurera inga data och felhantering anger du vad som ska hända när aviseringsregeln inte returnerar några data eller returnerar ett fel.
    • Om du vill kontrollera resultatet från att köra frågan väljer du Förhandsversion.
  7. Lägg till lagringsplats, regelgrupp och eventuella ytterligare metadata som du vill associera med regeln.

    • För Mapp väljer du den mapp där regeln ska lagras.
    • För Grupp anger du en fördefinierad grupp.
    • Om du vill kan du lägga till en beskrivning och sammanfattning för att anpassa aviseringsmeddelanden.
    • Lägg till Runbook-URL, panel, instrumentpanel och aviserings-ID efter behov.
  8. Om du vill kan du lägga till anpassade etiketter. Välj sedan Spara.

Du kan också konfigurera kontaktpunkter och konfigurera meddelandeprinciper för dina aviseringar.

Övervaka resursförbrukning och avstämningar

Följ de här stegen för att importera instrumentpaneler som gör att du kan övervaka fluxresursförbrukning, avstämningar, API-begäranden och avstämningsstatus.

  1. Följ stegen för att skapa en Azure Monitor-arbetsyta.

  2. Skapa en Azure Managed Grafana-instans med hjälp av Azure-portalen eller Azure CLI.

  3. Aktivera Prometheus-måttsamling på AKS-kluster och/eller Arc-aktiverade Kubernetes-kluster som du vill övervaka.

  4. Konfigurera Azure Monitor Agent för att skrapa Azure Managed Flux-måtten genom att skapa en konfigurationskarta:

    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. Ladda ned instrumentpanelerna Flux Control Plane och Flux Cluster Stats .

  6. Länka arbetsytan Managed Prometheus till den hanterade Grafana-instansen. Det tar några minuter att slutföra.

  7. Följ stegen för att importera dessa JSON-instrumentpaneler till Grafana.

När du har importerat instrumentpanelerna visar de information från de kluster som du övervakar. Om du bara vill visa information för ett visst kluster eller namnområde använder du filtren längst upp på varje instrumentpanel.

Instrumentpanelen fluxkontrollplan visar information om resursförbrukning för status, avstämningar på klusternivå och Kubernetes API-begäranden.

Screenshot of the Flux Control Plane dashboard.

Instrumentpanelen fluxklusterstatistik visar information om antalet avstämare, tillsammans med status och körningstid för varje avstämning.

Screenshot of the Flux Cluster Stats dashboard.

Skapa aviseringar för problem med resursförbrukning och avstämning

När du har importerat instrumentpanelen enligt beskrivningen i föregående avsnitt kan du konfigurera aviseringar. Dessa aviseringar meddelar dig om problem med resursförbrukning och avstämning som kan kräva uppmärksamhet.

Om du vill aktivera dessa aviseringar distribuerar du en Bicep-mall som liknar den som visas här. Aviseringsreglerna i den här mallen är exempel som kan ändras efter behov.

När du har laddat ned Bicep-mallen och gjort dina ändringar följer du de här stegen för att distribuera mallen.

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

Nästa steg