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 następujące opcje:
- Monitorowanie konfiguracji i zasobów platformy Flux w poszczególnych klastrach za pomocą witryny Azure Portal.
- Monitorowanie stanu wdrożenia i zgodności przy użyciu pulpitu nawigacyjnego narzędzia Grafana.
- Monitorowanie zużycia i uzgodnień zasobów za pomocą pulpitów nawigacyjnych płaszczyzny sterowania platformy Flux i statystyk klastra platformy Flux.
- Włącz wydobywanie danych klastrów z rozwiązania Prometheus i utwórz własne pulpity nawigacyjne przy użyciu danych w obszarze roboczym usługi Azure Monitor.
- Utwórz alerty w usłudze Azure Monitor przy użyciu danych dostępnych za pośrednictwem wydobywania danych z rozwiązania Prometheus.
W tym temacie opisano niektóre sposoby monitorowania aktywności i stanu platformy 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.
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.
Aby wyświetlić obiekty Kubernetes utworzone w wyniku zastosowania konfiguracji platformy Flux, wybierz pozycję Obciążenia w sekcji Zasoby kubernetes w menu usługi klastra. W tym miejscu możesz wyświetlić wszystkie szczegóły wszystkich zasobów utworzonych 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 flux kolumna State 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
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.
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.
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 subskrypcji, w której utworzono wystąpienie usługi Azure Managed Grafana:
- W witrynie Azure Portal przejdź do subskrypcji, którą chcesz dodać.
- Wybierz pozycję Kontrola dostępu (IAM).
- Wybierz pozycję Dodaj przypisanie roli.
- Wybierz rolę Czytelnik monitorowania, a następnie wybierz przycisk Dalej.
- Na karcie Członkowie wybierz pozycję Tożsamość zarządzana, a następnie wybierz pozycję Wybierz członków.
- Z listy Tożsamość zarządzana wybierz subskrypcję, a następnie wybierz pozycję Azure Managed Grafana i nazwę wystąpienia usługi Azure Managed Grafana.
- Wybierz pozycję Przejrzyj + 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).
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.
Pobierz pulpit nawigacyjny GitOps Flux — wdrożenia aplikacji.
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źć informacje o konfiguracjach, błędach i dziennikach.
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.
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 .
Wykres Liczba wdrożeń rozszerzeń flux według stanu przedstawia liczbę klastrów na podstawie ich stanu aprowizacji.
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.
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 następujące 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.
W menu nawigacji po lewej stronie pulpitu nawigacyjnego wybierz pozycję Alerty.
Wybierz pozycję Reguły alertów.
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.
W polu Nazwa reguły dodaj opisową nazwę. Ta nazwa jest wyświetlana na liście reguł alertów i jest używana jako
alertname
etykieta dla każdego wystąpienia alertu utworzonego na podstawie tej reguły.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.
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.
Dodaj lokalizację magazynu, grupę reguł i wszelkie inne 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.
W razie potrzeby dodaj etykiety niestandardowe. Następnie wybierz opcję Zapisz.
Możesz również skonfigurować punkty kontaktowe i 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.
Wykonaj kroki tworzenia obszaru roboczego usługi Azure Monitor.
Utwórz wystąpienie usługi Azure Managed Grafana przy użyciu witryny Azure Portal lub interfejsu wiersza polecenia platformy Azure.
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ć.
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
Pobierz pulpity nawigacyjne Płaszczyzna sterowania flux i Statystyki klastra flux.
Połącz obszar roboczy Zarządzany prometheus z wystąpieniem zarządzanego narzędzia Grafana. Ten proces może potrwać kilka minut.
Wykonaj kroki importowania tych pulpitów nawigacyjnych JSON do narzędzia Grafana.
Po zaimportowaniu pulpitów nawigacyjnych zostaną wyświetlone 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.
Na pulpicie nawigacyjnym Statystyki klastra flux są wyświetlane szczegółowe informacje o liczbie uzgodnień wraz ze stanem i czasem wykonywania każdego uzgadniania.
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
- Zapoznaj się z naszym samouczkiem dotyczącym używania metodyki GitOps z rozwiązaniem Flux w wersji 2, aby zarządzać konfiguracją i wdrażaniem aplikacji.
- Dowiedz się więcej o usłudze Azure Monitor Container Insights.