Freigeben über


Ü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 für Ihren 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 der Clustercompliance und anderer Werte im 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 mit detaillierten Bedingungen für ein Konfigurationsobjekt.

Wenn Sie die Kubernetes-Objekte anzeigen möchten, die aufgrund der angewendeten Flux-Konfigurationen erstellt wurden, wählen Sie im Dienstmenü des Clusters im Abschnitt Kubernetes-Ressourcen die Option Workloads 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 im 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 der Seite „Übersicht“ einer Fluxkonfiguration im 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 Benutzer mit Leseberechtigung für Überwachungsdaten für das Abonnement zuzuweisen, in dem Sie Ihre Azure Managed Grafana-Instanz erstellt haben:

    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, anschließend die Option Azure Managed Grafana und dann 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 von Ihnen überwachten Clustern mit mehreren Bereichen angezeigt, die Details enthalten. Wenn Sie weitere Details zu einem Element wünschen, wählen Sie den Link aus, um das Azure-Portal aufzurufen, in dem Sie weitere Informationen zu Konfigurationen, Fehlern und Protokollen finden können.

Screenshot des Flux-Anwendungsbereitstellungsdashboards.

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

Screenshot der Tabelle „Status der Flux-Erweiterungsbereitstellungen“ im Anwendungsbereitstellungsdashboard.

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 der Tabelle „Status der Flux-Konfigurationscompliance“ im Anwendungsbereitstellungsdashboard.

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

Screenshot des Kreisdiagramms „Status der Flux-Erweiterungsbereitstellungen“ im Anwendungsbereitstellungsdashboard.

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 des Diagramms „Status der Flux-Konfigurationscompliance“ im Anwendungsbereitstellungsdashboard.

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 als alertname-Bezeichnung für jede Warnungsinstanz verwendet, die auf der Grundlage dieser Regel erstellt wird.

  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 Dienst Azure 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 Schwellenwert Aals 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 des Benachrichtigungserstellungsprozesses.

  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 anderen 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 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. Dieser Prozess dauert nur wenige Minuten.

  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 des Flux-Steuerungsebene-Dashboards.

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

Screenshot des Flux-Cluster-Stats-Dashboards.

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 Bicep-Vorlage heruntergeladen und Ihre Änderungen vorgenommen haben, führen Sie diese 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