Monitorowanie stanu i działania usługi GitOps (Flux v2)

Aby monitorować stan i działania związane z usługą GitOps za pomocą platformy Flux w wersji 2 w klastrach Kubernetes z obsługą usługi Azure Arc lub klastrach usługi Azure Kubernetes Service (AKS), masz kilka opcji:

W tym temacie opisano niektóre sposoby monitorowania aktywności i stanu flux.

Monitorowanie konfiguracji platformy Flux w witrynie Azure Portal

Po utworzeniu konfiguracji platformy Flux w klastrze możesz wyświetlić informacje o stanie w witrynie Azure Portal, przechodząc do klastra i wybierając pozycję GitOps.

Wyświetlanie szczegółów dotyczących zgodności klastra i obiektów

Stan Zgodność pokazuje, czy bieżący stan klastra jest zgodny z żądanym stanem. Możliwe wartości:

  • Zgodne: stan klastra jest zgodny z żądanym stanem.
  • Oczekujące: wykryto zaktualizowany żądany stan, ale ten stan nie został jeszcze uzgodniony w klastrze.
  • Niezgodne: bieżący stan nie jest zgodny z żądanym stanem.

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

Aby ułatwić debugowanie problemów z uzgadnianiem klastra, wybierz pozycję Obiekty konfiguracji. W tym miejscu można wyświetlić dzienniki każdego z obiektów konfiguracji tworzonych przez flux dla każdej konfiguracji platformy Flux. Wybierz nazwę obiektu, aby wyświetlić jego dzienniki.

Screenshot showing detailed conditions for a configuration object.

Aby wyświetlić obiekty Kubernetes, które zostały utworzone w wyniku zastosowania konfiguracji platformy Flux, wybierz pozycję Obciążenia w sekcji Zasobów Kubernetes w okienku nawigacji po lewej stronie klastra. W tym miejscu możesz wyświetlić wszystkie szczegóły wszystkich zasobów, które zostały utworzone w klastrze.

Domyślnie można filtrować według przestrzeni nazw i nazwy usługi. Możesz również dodać dowolny filtr etykiet, którego możesz używać w aplikacjach, aby ułatwić zawężenie wyszukiwania.

Wyświetlanie stanu i szczegółów konfiguracji platformy Flux

Dla każdej konfiguracji platformy Flux kolumna State (Stan ) wskazuje, czy obiekt konfiguracji Flux został pomyślnie utworzony w klastrze.

Wybierz dowolną konfigurację platformy Flux, aby wyświetlić jej stronę Przegląd , w tym następujące informacje:

  • Identyfikator zatwierdzenia źródła dla ostatniej synchronizacji
  • Sygnatura czasowa najnowszej aktualizacji źródłowej
  • Sygnatura czasowa aktualizacji stanu (wskazująca, kiedy uzyskano najnowsze statystyki)
  • Adres URL i gałąź repozytorium
  • Linki do wyświetlania różnych kustomizacji

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

Monitorowanie stanu i aktywności usługi GitOps za pomocą pulpitów nawigacyjnych

Udostępniamy pulpity nawigacyjne ułatwiające monitorowanie stanu, zgodności, użycia zasobów i działań uzgodnień dla usługi GitOps za pomocą rozwiązania Flux v2. Te pulpity nawigacyjne JSON można zaimportować do narzędzia Grafana, aby ułatwić wyświetlanie i analizowanie danych w czasie rzeczywistym. Możesz również skonfigurować alerty dla tych informacji.

Do importowania i używania tych pulpitów nawigacyjnych potrzebne są następujące elementy:

  • Co najmniej jeden istniejący klaster Kubernetes z obsługą usługi Arc lub klastry AKS.
  • Rozszerzenie microsoft.flux zainstalowane w klastrach.
  • Co najmniej jedna konfiguracja platformy Flux utworzona w klastrach.

Monitorowanie stanu wdrożenia i zgodności

Wykonaj następujące kroki, aby zaimportować pulpity nawigacyjne, które umożliwiają monitorowanie wdrożenia i stanu rozszerzenia Flux w klastrach oraz stan zgodności konfiguracji platformy Flux w tych klastrach.

Uwaga

Te kroki opisują proces importowania pulpitu nawigacyjnego do usługi Azure Managed Grafana. Możesz również zaimportować ten pulpit nawigacyjny do dowolnego wystąpienia narzędzia Grafana. W przypadku tej opcji należy użyć jednostki usługi; Tożsamość zarządzana nie jest obsługiwana w przypadku połączenia danych poza usługą Azure Managed Grafana.

  1. Utwórz wystąpienie usługi Azure Managed Grafana przy użyciu witryny Azure Portal lub interfejsu wiersza polecenia platformy Azure. Upewnij się, że możesz uzyskać dostęp do narzędzia Grafana, wybierając jego punkt końcowy na stronie Przegląd. Do wyświetlania i edytowania pulpitów nawigacyjnych potrzebne są co najmniej uprawnienia na poziomie edytora Grafana. Dostęp można sprawdzić, przechodząc do pozycji Kontrola dostępu (IAM) w wystąpieniu narzędzia Grafana.

  2. Jeśli używasz tożsamości zarządzanej dla wystąpienia usługi Azure Managed Grafana, wykonaj następujące kroki, aby przypisać mu rolę Czytelnik monitorowania w subskrypcjach:

    1. W witrynie Azure Portal przejdź do subskrypcji, którą chcesz dodać.
    2. Wybierz pozycję Kontrola dostępu (IAM) .
    3. Wybierz pozycję Dodaj przypisanie roli.
    4. Wybierz rolę Czytelnik monitorowania, a następnie wybierz przycisk Dalej.
    5. Na karcie Członkowie wybierz pozycję Tożsamość zarządzana, a następnie wybierz pozycję Wybierz członków.
    6. Z listy Tożsamość zarządzana wybierz subskrypcję, w której utworzono wystąpienie usługi Azure Managed Grafana. Następnie wybierz pozycję Azure Managed Grafana i nazwę wystąpienia usługi Azure Managed Grafana.
    7. Wybierz pozycję Przejrzyj i przypisz.

    Jeśli używasz jednostki usługi, przyznaj rolę Czytelnik monitorowania jednostce usługi, która będzie używana na potrzeby połączenia ze źródłem danych. Wykonaj te same kroki, ale wybierz pozycję Użytkownik, grupa lub jednostka usługi na karcie Członkowie , a następnie wybierz jednostkę usługi. (Jeśli nie używasz narzędzia Azure Managed Grafana, musisz użyć jednostki usługi na potrzeby dostępu do połączenia danych).

  3. Utwórz połączenie źródła danych usługi Azure Monitor w wystąpieniu usługi Azure Managed Grafana. To połączenie umożliwia pulpitowi nawigacyjnego dostęp do danych usługi Azure Resource Graph.

  4. Pobierz pulpit nawigacyjny GitOps Flux — wdrożenia aplikacji.

  5. Wykonaj kroki importowania pulpitu nawigacyjnego JSON do narzędzia Grafana.

Po zaimportowaniu pulpitu nawigacyjnego zostaną wyświetlone informacje z monitorowanych klastrów z kilkoma panelami zawierającymi szczegółowe informacje. Aby uzyskać więcej informacji na temat elementu, wybierz link, aby odwiedzić witrynę Azure Portal, gdzie można znaleźć więcej informacji na temat konfiguracji, błędów i dzienników.

Screenshot of the Flux Application Deployments Dashboard.

Tabela Stan wdrożenia rozszerzenia flux zawiera listę wszystkich klastrów, w których wdrożono rozszerzenie Flux, wraz z bieżącym stanem wdrożenia.

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

Tabela Stan zgodności konfiguracji flux zawiera listę wszystkich konfiguracji flux utworzonych w klastrach wraz ze stanem zgodności. Aby wyświetlić dzienniki stanu i błędów dla obiektów konfiguracji, takich jak wydania programu Helm i kustomizations, wybierz link Niezgodne z kolumną ComplianceState .

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

Wykres Liczba wdrożeń rozszerzeń flux według stanu przedstawia liczbę klastrów na podstawie ich stanu aprowizacji.

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

Wykres Liczba konfiguracji flux według stanu zgodności przedstawia liczbę konfiguracji flux na podstawie ich stanu zgodności w odniesieniu do repozytorium źródłowego.

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

Filtrowanie danych pulpitu nawigacyjnego w celu śledzenia wdrożeń aplikacji

Dane można filtrować na pulpicie nawigacyjnym Usługi GitOps Flux — wdrożenia aplikacji, aby zmienić wyświetlane informacje. Można na przykład wyświetlić dane tylko dla niektórych subskrypcji lub grup zasobów albo ograniczyć dane do określonego klastra. W tym celu wybierz opcję filtru z listy rozwijanej najwyższego poziomu lub z dowolnego nagłówka kolumny w tabelach.

Na przykład w tabeli Stan zgodności konfiguracji flux można wybrać określone zatwierdzenie w kolumnie SourceLastSyncCommit . Dzięki temu można śledzić stan wdrożenia konfiguracji do wszystkich klastrów, których dotyczy to zatwierdzenie.

Tworzenie alertów dotyczących niepowodzeń konfiguracji i rozszerzeń

Po zaimportowaniu pulpitu nawigacyjnego zgodnie z opisem w poprzedniej sekcji możesz skonfigurować alerty. Te alerty powiadamiają o niepowodzeniach rozszerzeń flux lub konfiguracji platformy Flux.

Wykonaj poniższe kroki, aby utworzyć alert. Przykładowe zapytania są udostępniane w celu wykrywania błędów aprowizacji rozszerzeń lub uaktualniania rozszerzeń albo wykrywania błędów stanu zgodności.

  1. W menu nawigacji po lewej stronie pulpitu nawigacyjnego wybierz pozycję Alerty.

  2. Wybierz pozycję Reguły alertów.

  3. Wybierz pozycję + Utwórz regułę alertu. Zostanie otwarta nowa strona reguły alertu z wybraną domyślnie opcją Alerty zarządzane przez narzędzie Grafana.

  4. W polu Nazwa reguły dodaj opisową nazwę. Ta nazwa jest wyświetlana na liście reguł alertów i będzie używana jako alertname etykieta dla każdego wystąpienia alertu utworzonego na podstawie tej reguły.

  5. W obszarze Ustaw zapytanie i warunek alertu:

    • Wybierz źródło danych. W tym miejscu można użyć tego samego źródła danych używanego na potrzeby pulpitu nawigacyjnego.

    • W polu Usługa wybierz pozycję Azure Resource Graph.

    • Wybierz subskrypcje z listy rozwijanej.

    • Wprowadź zapytanie, którego chcesz użyć. Na przykład w przypadku niepowodzeń aprowizacji lub uaktualniania rozszerzeń można wprowadzić następujące zapytanie:

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

      Lub w przypadku błędów stanu zgodności możesz wprowadzić następujące zapytanie:

      kubernetesconfigurationresources
      | where type == "microsoft.kubernetesconfiguration/fluxconfigurations"
      | extend complianceState=tostring(properties.complianceState)
      | where complianceState == "Non-Compliant"
      | summarize count() by complianceState
      
    • W polu Próg wybierz wartość A dla typu danych wejściowych i ustaw próg na 0 , aby otrzymywać alerty, nawet jeśli w klastrze wystąpi awaria tylko jednego rozszerzenia. Oznacz to jako warunek alertu.

    Screenshot showing the alert creation process.

  6. Określ interwał oceny alertu:

    • W polu Warunek wybierz zapytanie lub wyrażenie, aby wyzwolić regułę alertu.
    • W polu Oceń co wprowadź częstotliwość oceny jako wielokrotność 10 sekund.
    • W obszarze Oceń dla określ, jak długo warunek musi być spełniony przed utworzeniem alertu.
    • W obszarze Konfigurowanie braku danych i obsługi błędów wskaż, co powinno się zdarzyć, gdy reguła alertu nie zwraca żadnych danych lub zwraca błąd.
    • Aby sprawdzić wyniki uruchamiania zapytania, wybierz pozycję Podgląd.
  7. Dodaj lokalizację magazynu, grupę reguł i wszelkie dodatkowe metadane, które chcesz skojarzyć z regułą.

    • W obszarze Folder wybierz folder, w którym ma być przechowywana reguła.
    • W polu Grupa określ wstępnie zdefiniowaną grupę.
    • W razie potrzeby dodaj opis i podsumowanie, aby dostosować komunikaty alertów.
    • W razie potrzeby dodaj adres URL elementu Runbook, panel, pulpit nawigacyjny i identyfikatory alertów.
  8. W razie potrzeby dodaj etykiety niestandardowe. Następnie wybierz opcję Zapisz.

Możesz również skonfigurować punkty kontaktowe i skonfigurować zasady powiadomień dla alertów.

Monitorowanie zużycia zasobów i uzgodnień

Wykonaj następujące kroki, aby zaimportować pulpity nawigacyjne, które umożliwiają monitorowanie użycia zasobów platformy Flux, uzgodnień, żądań interfejsu API i stanu uzgadniania.

  1. Wykonaj kroki tworzenia obszaru roboczego usługi Azure Monitor.

  2. Utwórz wystąpienie usługi Azure Managed Grafana przy użyciu witryny Azure Portal lub interfejsu wiersza polecenia platformy Azure.

  3. Włącz zbieranie metryk rozwiązania Prometheus w klastrach usługi AKS i/lub klastrach Kubernetes z obsługą usługi Arc, które chcesz monitorować.

  4. Skonfiguruj agenta usługi Azure Monitor, aby zeskrobać metryki usługi Azure Managed Flux, tworząc mapę konfiguracji:

    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. Pobierz pulpity nawigacyjne Płaszczyzna sterowania flux i Statystyki klastra flux.

  6. Połącz obszar roboczy Zarządzany prometheus z wystąpieniem zarządzanego narzędzia Grafana. Wykonanie tej operacji może zająć kilka minut.

  7. Wykonaj kroki importowania tych pulpitów nawigacyjnych JSON do narzędzia Grafana.

Po zaimportowaniu pulpitów nawigacyjnych będą one wyświetlać informacje z monitorowanych klastrów. Aby wyświetlić informacje tylko dla określonego klastra lub przestrzeni nazw, użyj filtrów w górnej części każdego pulpitu nawigacyjnego.

Pulpit nawigacyjny płaszczyzny sterowania strumienia przedstawia szczegółowe informacje o użyciu zasobów stanu, uzgodnieniach na poziomie klastra i żądaniach interfejsu API Kubernetes.

Screenshot of the Flux Control Plane dashboard.

Na pulpicie nawigacyjnym Statystyki klastra flux są wyświetlane szczegółowe informacje o liczbie uzgodnień wraz ze stanem i czasem wykonywania każdego uzgadniania.

Screenshot of the Flux Cluster Stats dashboard.

Tworzenie alertów dotyczących problemów z użyciem zasobów i uzgadnianiem

Po zaimportowaniu pulpitu nawigacyjnego zgodnie z opisem w poprzedniej sekcji możesz skonfigurować alerty. Te alerty powiadamiają o problemach dotyczących zużycia zasobów i uzgodnień, które mogą wymagać uwagi.

Aby włączyć te alerty, należy wdrożyć szablon Bicep podobny do przedstawionego tutaj. Reguły alertów w tym szablonie to przykłady, które można modyfikować w razie potrzeby.

Po pobraniu szablonu Bicep i wprowadzeniu zmian wykonaj następujące kroki, aby wdrożyć szablon.

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

Następne kroki