Überwachen von GitOps-Status und -Aktivitäten (Flux v2)

Zum Überwachen von Status und Aktivitäten im Zusammenhang mit GitOps mit Flux v2 in Ihren Azure Arc-fähigen Kubernetes-Clustern oder Azure Kubernetes Service (AKS)-Clustern haben Sie mehrere Optionen:

In diesem Thema werden einige der Möglichkeiten beschrieben, wie Sie Ihre Flux-Aktivität und Ihren Status überwachen können.

Überwachen von Flusskonfigurationen im Azure-Portal

Nachdem Sie Flux-Konfigurationen auf Ihrem Cluster erstellt haben, können Sie Statusinformationen im Azure-Portal anzeigen, indem Sie zu einem Cluster navigieren und GitOps auswählen.

Anzeigen von Details zu Clustercompliance und -objekten

Der Compliancestatus zeigt an, ob der aktuelle Status des Clusters mit dem gewünschten Zustand übereinstimmt. Mögliche Werte:

  • Konform: Der Clusterstatus entspricht dem gewünschten Zustand.
  • Ausstehend: Es wurde ein aktualisierter gewünschter Zustand erkannt, aber dieser Zustand wurde noch nicht im Cluster eingestellt.
  • Nicht konform: Der aktuelle Zustand stimmt nicht mit dem gewünschten Zustand überein.

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

Zum Debuggen von Abstimmungsproblemen für einen Cluster wählen Sie Konfigurationsobjekte aus. Hier können Sie Protokolle der einzelnen Konfigurationsobjekte anzeigen, die Flux für jede Flux-Konfiguration erstellt. Wählen Sie einen Objektnamen aus, um dessen Protokolle anzuzeigen.

Screenshot showing detailed conditions for a configuration object.

Wenn Sie die Kubernetes-Objekte anzeigen möchten, die aufgrund der Angewendeten Flux-Konfigurationen erstellt wurden, wählen Sie Workloads im Abschnitt Kubernetes-Ressourcen des linken Navigationsbereichs des Clusters aus. Hier können Sie alle Details aller Ressourcen anzeigen, die im Cluster erstellt wurden.

Standardmäßig können Sie nach Namespace- und Dienstnamen filtern. Sie können auch einen beliebigen Bezeichnungsfilter hinzufügen, den Sie möglicherweise in Ihren Anwendungen verwenden, um die Suche einzugrenzen.

Anzeigen des Flux-Konfigurationszustands und der Details

Für jede Flux-Konfiguration gibt die Spalte Status an, ob das Flux-Konfigurationsobjekt erfolgreich auf dem Cluster erstellt wurde.

Wählen Sie eine beliebige Flux-Konfiguration aus, um ihre Übersichtsseite anzuzeigen, einschließlich der folgenden Informationen:

  • Quell-Commit-ID für die letzte Synchronisierung
  • Zeitstempel des neuesten Quellupdates
  • Zeitstempel der Statusaktualisierung (der angibt, wann die neuesten Statistiken abgerufen wurden)
  • Repository-URL und Branch
  • Links zum Anzeigen verschiedener individueller Anpassungen

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

Verwenden von Dashboards zum Überwachen des GitOps-Status und der Aktivität

Wir stellen Dashboards bereit, mit denen Sie Status, Compliance, Ressourcenverbrauch und Abstimmungsaktivitäten für GitOps mit Flux v2 überwachen können. Diese JSON-Dashboards können in Grafana importiert werden, um Ihre Daten in Echtzeit anzuzeigen und zu analysieren. Sie können auch Warnungen für diese Informationen einrichten.

Um diese Dashboards zu importieren und zu verwenden, benötigen Sie Folgendes:

Überwachen des Bereitstellungs- und Compliancestatus

Führen Sie diese Schritte aus, um Dashboards zu importieren, mit denen Sie die Bereitstellung und den Status der Flux-Erweiterung über Cluster hinweg und den Compliancestatus der Flux-Konfiguration auf diesen Clustern überwachen können.

Hinweis

In diesen Schritten wird der Prozess zum Importieren des Dashboards in Azure Managed Grafanabeschrieben. Sie können dieses Dashboard auch in jede Grafana-Instanz importieren. Mit dieser Option muss ein Dienstprinzipal verwendet werden. Die verwaltete Identität wird für die Datenverbindung außerhalb von Azure Managed Grafana nicht unterstützt.

  1. Erstellen Sie eine Azure Managed Grafana-Instanz mithilfe des Azure-Portals oder der Azure CLI. Stellen Sie sicher, dass Sie auf Grafana zugreifen können, indem Sie den Endpunkt auf der Seite „Übersicht“ auswählen. Sie benötigen mindestens Berechtigungen auf Grafana Editor-Ebene, um Dashboards anzuzeigen und zu bearbeiten. Sie können Ihren Zugriff überprüfen, indem Sie in der Grafana-Instanz zur Zugriffssteuerung (IAM) wechseln.

  2. Wenn Sie eine verwaltete Identität für die Instanz von Azure Managed Grafana verwenden, führen Sie die folgenden Schritte aus, um ihr die Rolle Monitoring Reader für die Abonnements zuzuweisen:

    1. Navigieren Sie im Azure-Portal zu dem Abonnement, das Sie hinzufügen möchten.
    2. Wählen Sie die Option Zugriffssteuerung (IAM) aus.
    3. Wählen Sie Rollenzuweisung hinzufügen aus.
    4. Wählen Sie die Rolle Monitoring Reader und dann Weiter aus.
    5. Wählen Sie auf der Registerkarte Mitglieder die Option Verwaltete Identität und dann Mitglieder auswählen aus.
    6. Wählen Sie in der Liste Verwaltete Identität das Abonnement aus, in dem Sie Ihre Azure Managed Grafana-Instanz erstellt haben. Wählen Sie dann Azure Managed Grafana und den Namen Ihrer Azure Managed Grafana-Instanz aus.
    7. Wählen Sie Überprüfen und zuweisen aus.

    Wenn Sie einen Dienstprinzipal verwenden, gewähren Sie die Rolle Monitoring Reader dem Dienstprinzipal, den Sie für Ihre Datenquellenverbindung verwenden. Führen Sie dieselben Schritte aus, wählen Sie aber Benutzer, Gruppe oder Dienstprinzipal auf der Registerkarte Mitglieder aus und wählen Sie dann Ihren Dienstprinzipal aus. (Wenn Sie Azure Managed Grafana nicht verwenden, müssen Sie einen Dienstprinzipal für den Datenverbindungszugriff verwenden.)

  3. Erstellen Sie die Azure Monitor-Datenquellenverbindung in Ihrer Azure Managed Grafana-Instanz. Mit dieser Verbindung kann das Dashboard auf Azure Resource Graph-Daten zugreifen.

  4. Laden Sie das GitOps Flux - Application Deployments Dashboard herunter.

  5. Führen Sie die Schritte aus, um das JSON-Dashboard in Grafana zu importieren.

Nachdem Sie das Dashboard importiert haben, werden Informationen aus den Clustern angezeigt, die Sie überwachen, mit mehreren Bereichen, die Details bereitstellen. Wenn Sie weitere Details zu einem Element wünschen, wählen Sie den Link aus, um das Azure-Portal zu besuchen, in dem Sie weitere Informationen zu Konfigurationen, Fehlern und Protokollen finden können.

Screenshot of the Flux Application Deployments Dashboard.

Die Tabelle Flux Extension Deployment Status listet alle Cluster auf, in denen die Flux-Erweiterung bereitgestellt wird, sowie den aktuellen Bereitstellungsstatus.

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

Die Tabelle Flux Configuration Compliance Status listet alle auf den Clustern erstellten Flux-Konfigurationen zusammen mit ihrem Compliancestatus auf. Um Status- und Fehlerprotokolle für Konfigurationsobjekte wie Helm-Versionen und Anpassungen anzuzeigen, wählen Sie den Link Nicht konform aus der Spalte ComplianceState aus.

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

Das Diagramm Anzahl von Flux Extension Deployment nach Status zeigt die Anzahl der Cluster basierend auf ihrem Bereitstellungsstatus an.

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

Das Diagramm Anzahl der Flux-Konfigurationen nach Compliancestatus zeigt die Anzahl der Flux-Konfigurationen basierend auf ihrem Compliancestatus im Hinblick auf das Quell-Repository an.

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

Filtern von Dashboarddaten zum Nachverfolgen von Anwendungsbereitstellungen

Sie können Daten im GitOps Flux - Application Deployments Dashboard filtern, um die angezeigten Informationen zu ändern. Sie können beispielsweise Daten nur für bestimmte Abonnements oder Ressourcengruppen anzeigen oder Daten auf ein bestimmtes Cluster beschränken. Wählen Sie dazu die Filteroption entweder aus den Dropdownlisten der obersten Ebene oder aus einer beliebigen Spaltenüberschrift in den Tabellen aus.

Beispielsweise können Sie in der Tabelle Flux Configuration Compliance Status einen bestimmten Commit aus der Spalte SourceLastSyncCommit auswählen. Auf diese Weise können Sie den Status einer Konfigurationsbereitstellung für alle Cluster nachverfolgen, die von diesem Commit betroffen sind.

Erstellen von Warnungen für Erweiterungs- und Konfigurationsfehler

Nachdem Sie das Dashboard wie im vorherigen Abschnitt beschrieben importiert haben, können Sie Warnungen einrichten. Diese Warnungen benachrichtigen Sie, wenn bei Flux-Erweiterungen oder Flux-Konfigurationen Fehler auftreten.

Führen Sie die folgenden Schritte aus, um eine Warnung zu erstellen. Beispielabfragen werden bereitgestellt, um Erweiterungsbereitstellungs- oder Erweiterungsupgradefehler oder Compliancestatusfehler zu erkennen.

  1. Wählen Sie im linken Navigationsmenü des Dashboards die Option Warnen aus.

  2. Wählen Sie Warnungsregeln aus.

  3. Wählen Sie + Warnungsregel erstellen aus. Die neue Warnungsregelseite wird geöffnet, wobei standardmäßig die Option durch Grafana verwaltete Warnungen ausgewählt ist.

  4. Fügen Sie unter Regelname einen beschreibenden Namen hinzu. Dieser Name wird in der Liste der Warnungsregeln angezeigt und er wird als alertname-Bezeichnung für jede Warnungsinstanz verwendet, die aus dieser Regel erstellt wurde.

  5. Unter Abfrage- und Warnungsbedingung festlegen:

    • Datenquelle auswählen. Die gleiche Datenquelle, die für das Dashboard verwendet wird, kann hier verwendet werden.

    • Wählen Sie als DienstAzure Resource Graph aus.

    • Wählen Sie in der Dropdownliste „Abonnements“ aus.

    • Geben Sie die Abfrage ein, die Sie nutzen möchten. Bei Erweiterungsbereitstellungs- oder Upgradefehlern können Sie z. B. diese Abfrage eingeben:

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

      Oder bei Compliancestatusfehlern können Sie diese Abfrage eingeben:

      kubernetesconfigurationresources
      | where type == "microsoft.kubernetesconfiguration/fluxconfigurations"
      | extend complianceState=tostring(properties.complianceState)
      | where complianceState == "Non-Compliant"
      | summarize count() by complianceState
      
    • Wählen Sie für das Feld SchwellenwertAals Eingabetyp aus und legen Sie den Schwellenwert auf 0 fest, um Warnungen zu empfangen, auch wenn nur eine Erweiterung im Cluster fehlschlägt. Markieren Sie dies als Warnungsbedingung.

    Screenshot showing the alert creation process.

  6. Festlegen des Warnungsauswertungsintervalls:

    • Wählen Sie als Bedingung die Abfrage oder den Ausdruck aus, um die Warnungsregel auszulösen.
    • Geben Sie für Alle auswerten die Auswertungshäufigkeit als Vielfaches von 10 Sekunden ein.
    • Geben Sie für Auswerten bei an, wie lange die Bedingung erfüllt sein muss, bevor die Warnung erstellt wird.
    • Geben Sie unter Keine Daten und Fehlerbehandlung konfigurieren an, was passieren soll, wenn die Warnungsregel keine Daten oder einen Fehler zurückgibt.
    • Um die Ergebnisse der Ausführung der Abfrage zu überprüfen, wählen Sie Vorschau aus.
  7. Fügen Sie den Speicherort, die Regelgruppe und alle zusätzlichen Metadaten hinzu, die Sie der Regel zuordnen möchten.

    • Wählen Sie für Ordner den Ordner aus, in dem die Regel gespeichert werden soll.
    • Geben Sie für Gruppe eine vordefinierte Gruppe an.
    • Fügen Sie bei Bedarf eine Beschreibung und Zusammenfassung hinzu, um Warnungsmeldungen anzupassen.
    • Fügen Sie bei Bedarf Runbook-URL, Bereich, Dashboard und Warnungs-IDs hinzu.
  8. Fügen Sie bei Bedarf benutzerdefinierte Bezeichnungen hinzu. Klicken Sie dann auf Speichern.

Sie können auch Kontaktpunkte konfigurieren und Benachrichtigungsrichtlinien für Ihre Warnungen konfigurieren.

Überwachen des Ressourcenverbrauchs und der Abgleiche

Führen Sie diese Schritte aus, um Dashboards zu importieren, mit denen Sie den Flux-Ressourcenverbrauch, Abstimmungen, API-Anforderungen und Abgleichstatus überwachen können.

  1. Führen Sie die Schritte zum Erstellen eines Azure Monitor Workspace aus.

  2. Erstellen Sie eine Azure Managed Grafana-Instanz mithilfe des Azure-Portals oder der Azure CLI.

  3. Aktivieren Sie die Prometheus-Metriksammlung auf den AKS-Clustern und/oder arc-fähigen Kubernetes-Clustern, die Sie überwachen möchten.

  4. Konfigurieren Sie den Azure Monitor-Agent, um die Azure Managed Flux-Metriken auszulesen, indem Sie eine Configmap erstellen:

    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. Laden Sie die Dashboards Flux Control Plane und Flux Cluster Stats herunter.

  6. Verknüpfen Sie den verwalteten Prometheus-Arbeitsbereich mit der verwalteten Grafana-Instanz. Der Vorgang kann einige Minuten dauern.

  7. Führen Sie die Schritte aus, um diese JSON-Dashboards in Grafana zu importieren.

Nachdem Sie die Dashboards importiert haben, zeigen sie Informationen aus den Clustern an, die Sie überwachen. Wenn Sie Informationen nur für ein bestimmtes Cluster oder einen Namespace anzeigen möchten, verwenden Sie die Filter am oberen Rand jedes Dashboards.

Das Dashboard Flux Control Plane zeigt Details zum Statusressourcenverbrauch, Abstimmungen auf Clusterebene und Kubernetes-API-Anforderungen an.

Screenshot of the Flux Control Plane dashboard.

Das Dashboard Flux Cluster Stats zeigt Details zur Anzahl der Abgleicher zusammen mit der Status- und Ausführungsdauer jedes Abgleichs.

Screenshot of the Flux Cluster Stats dashboard.

Erstellen von Warnungen für Ressourcenverbrauch und Abstimmungsprobleme

Nachdem Sie das Dashboard wie im vorherigen Abschnitt beschrieben importiert haben, können Sie Warnungen einrichten. Diese Warnungen informieren Sie über Ressourcenverbrauchs- und Abstimmungsprobleme, die möglicherweise Aufmerksamkeit erfordern.

Um diese Warnungen zu aktivieren, stellen Sie eine Bicep-Vorlage wie die hier gezeigte bereit. Die Warnungsregeln in dieser Vorlage sind Beispiele, die bei Bedarf geändert werden können.

Nachdem Sie die Vorlage Bicep heruntergeladen und Ihre Änderungen vorgenommen haben, führen Sie die folgenden Schritte aus, um die Vorlage bereitzustellen.

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ächste Schritte