Monitorare lo stato e l'attività di GitOps (Flux v2)
Per monitorare lo stato e l'attività correlati a GitOps con Flux v2 nei cluster Kubernetes abilitati per Azure Arc o nei cluster servizio Azure Kubernetes (AKS), sono disponibili diverse opzioni:
- Usare il portale di Azure per monitorare le configurazioni e le risorse di Flux in singoli cluster.
- Usare un dashboard di Grafana per monitorare lo stato di distribuzione e conformità.
- Usare i dashboard Flux Control Plane e Flux Cluster Stats per monitorare l'utilizzo delle risorse e le riconciliazione.
- Abilitare lo scorporo di Prometheus dai cluster e creare dashboard personalizzati usando i dati nell'area di lavoro di Monitoraggio di Azure.
- Creare avvisi in Monitoraggio di Azure usando i dati disponibili tramite lo scraping di Prometheus.
Questo argomento descrive alcuni dei modi in cui è possibile monitorare l'attività e lo stato di Flux.
Monitorare le configurazioni di Flux nel portale di Azure
Dopo aver creato configurazioni Flux nel cluster, è possibile visualizzare le informazioni sullo stato nel portale di Azure passando a un cluster e selezionando GitOps.
Visualizzare i dettagli sulla conformità e sugli oggetti del cluster
Lo stato Conformità indica se lo stato corrente del cluster corrisponde allo stato desiderato. Valori possibili:
- Conforme: lo stato del cluster corrisponde allo stato desiderato.
- In sospeso: è stato rilevato uno stato desiderato aggiornato, ma tale stato non è ancora riconciliato nel cluster.
- Non conforme: lo stato corrente non corrisponde allo stato desiderato.
Per supportare il debug dei problemi di riconciliazione per un cluster, selezionare Oggetti di configurazione. Qui è possibile visualizzare i log di ognuno degli oggetti di configurazione creati da Flux per ogni configurazione di Flux. Selezionare un nome di oggetto per visualizzarne i log.
Per visualizzare gli oggetti Kubernetes creati in seguito all'applicazione delle configurazioni Flux, selezionare Carichi di lavoro nella sezione Risorse Kubernetes del menu del servizio del cluster. Qui è possibile visualizzare tutti i dettagli di tutte le risorse create nel cluster.
Per impostazione predefinita, è possibile filtrare in base allo spazio dei nomi e al nome del servizio. È anche possibile aggiungere eventuali filtri di etichetta in uso nelle applicazioni per limitare la ricerca.
Visualizzare lo stato di configurazione e i dettagli di Flux
Per ogni configurazione di Flux, la colonna State indica se l'oggetto di configurazione Flux è stato creato correttamente nel cluster.
Selezionare una configurazione di Flux per visualizzarne pagina Panoramica, che include le informazioni seguenti:
- ID commit di origine per l'ultima sincronizzazione
- Timestamp dell'aggiornamento dell'origine più recente
- Timestamp dell'aggiornamento dello stato (che indica quando sono state ottenute le statistiche più recenti)
- URL e ramo del repository
- Collegamenti per visualizzare diverse personalizzazioni
Usare dashboard per il monitoraggio dello stato e dell'attività di GitOps
Vengono forniti dashboard per supportare il monitoraggio dello stato, della conformità, del consumo di risorse e dell'attività di riconciliazione per GitOps con Flux v2. Questi dashboard JSON possono essere importati in Grafana per visualizzare e analizzare i propri dati in tempo reale. È anche possibile configurare gli avvisi per queste informazioni.
Per importare e usare questi dashboard, sono necessari:
- Uno o più cluster Kubernetes o cluster del servizio Azure Kubernetes esistenti con abilitazione ARC.
- L'estensione microsoft.flux installata nei cluster.
- Almeno unaconfigurazione di Flux creata nei cluster.
Monitorare lo stato di distribuzione e conformità
Seguire questi passi per importare dashboard che consentono di monitorare la distribuzione e lo stato dell'estensione Flux nei cluster e lo stato di conformità della configurazione di Flux in tali cluster.
Nota
Questi passi descrivono il processo di importazione del dashboard in Grafana con gestione Azure. È anche possibile importare questo dashboard in qualsiasi istanza di Grafana. Con questa opzione, è necessario usare un'entità servizio; l'identità gestita non è supportata per la connessione dati all'esterno di Grafana con gestione Azure.
Creare un'istanza Grafana con gestione Azure usando il portale di Azure o l'interfaccia della riga di comando di Azure. Assicurarsi di poter accedere a Grafana selezionandone l'endpoint nella pagina Panoramica. Per visualizzare e modificare i dashboard sono necessarie autorizzazioni almeno di livello Grafana Editor. È possibile controllare l'accesso passando a Controllo di accesso (IAM) nell'istanza di Grafana.
Se si usa un'identità gestita per l'istanza di Grafana gestita di Azure, seguire questa procedura per assegnare il ruolo Lettore di monitoraggio nella sottoscrizione in cui è stata creata l'istanza di Grafana gestita di Azure:
- Nel portale di Azure passare alla sottoscrizione che si desidera aggiungere.
- Seleziona Controllo di accesso (IAM).
- Selezionare Aggiungi un'assegnazione di ruolo.
- Selezionare il ruolo Lettore di monitoraggio e quindi Avanti.
- Nella scheda Membri selezionare Identità gestita e quindi scegliere Seleziona membri.
- Nell'elenco Identità gestita selezionare la sottoscrizione, quindi selezionare Grafana gestita di Azure e il nome dell'istanza di Grafana gestita di Azure.
- Selezionare Rivedi + Assegna.
Se è in uso un'entità servizio, concedere il ruolo Lettore di monitoraggio all'entità servizio che verrà usata per la connessione all'origine dati. Seguire questi stessi passaggi, ma selezionare utente, gruppo o entità servizio nella scheda Membri, quindi selezionare l'entità servizio (se non si usa Grafana con gestione Azure, è necessario usare un'entità servizio per l'accesso alla connessione dati).
Creare la connessione all'origine dati di Monitoraggio di Azure nell'istanza di Grafana con gestione Azure. Questa connessione consente al dashboard di accedere ai dati di Azure Resource Graph.
Scaricare il dashboard Distribuzioni delle applicazioni di GitOps Flux.
Seguire i passi per importare il dashboard JSON in Grafana.
Dopo aver importato il dashboard, vengono visualizzate le informazioni dai cluster monitorati, con diversi pannelli che forniscono i dettagli. Per altri dettagli su un elemento, selezionare il collegamento per visitare il portale di Azure, dove è possibile trovare informazioni su configurazioni, errori e log.
La tabella Stato di distribuzione dell'estensione Flux elenca tutti i cluster in cui viene distribuita l'estensione Flux, insieme allo stato di distribuzione corrente.
La tabella Stato di conformità della configurazione di Flux elenca tutte le configurazioni di Flux create nei cluster, insieme al relativo stato di conformità. Per visualizzare i log di stato e di errore per gli oggetti di configurazione, ad esempio versioni Helm e personalizzazioni, selezionare il collegamento Non conforme dalla colonna ComplianceState.
Il grafico Conteggio delle distribuzioni dell'estensione Flux per stato mostra il numero di cluster, in base al relativo stato di provisioning.
Il grafico Conteggio delle configurazioni di Flux per stato di conformità mostra il numero di configurazioni di Flux, in base al loro stato di conformità rispetto al repository di origine.
Filtrare i dati del dashboard per tenere traccia delle distribuzioni delle applicazioni
È possibile filtrare i dati in Distribuzioni delle applicazioni di GitOps Flux per modificare le informazioni visualizzate. Ad esempio, è possibile visualizzare i dati solo per determinate sottoscrizioni o determinati gruppi di risorse o limitare i dati a un determinato cluster. A tale scopo, selezionare l'opzione di filtro dagli elenchi a discesa di primo livello o da qualsiasi intestazione di colonna nelle tabelle.
Ad esempio, nella tabella Stato di conformità della configurazione di Flux è possibile selezionare un commit specifico dalla colonna SourceLastSyncCommit. In questo modo, è possibile tenere traccia dello stato di una distribuzione di configurazione in tutti i cluster interessati da tale commit.
Creare avvisi per errori di estensione e configurazione
Dopo aver importato il dashboard come descritto nella sezione precedente, è possibile configurare gli avvisi. Questi avvisi segnalano quando si verificano errori nelle configurazioni o nelle estensioni Flux.
Seguire questa procedura per creare un avviso. Vengono fornite query di esempio per rilevare gli errori di provisioning o di aggiornamento dell'estensione o per rilevare gli errori di stato di conformità.
Nel menu di spostamento a sinistra del dashboard selezionare Avviso.
Selezionare le regole di avviso.
Selezionare + Crea regola di avviso. Si apre la pagina della nuova regola di avviso, con l'opzione Avvisi gestiti da Grafana selezionata per impostazione predefinita.
In Nome regola aggiungere un nome descrittivo. Questo nome viene visualizzato nell'elenco delle regole di avviso e viene usato come
alertname
etichetta per ogni istanza di avviso creata da questa regola.In Imposta una query e una condizione di avviso:
Selezionare un'origine dati. È possibile usare qui la stessa origine dati usata per il dashboard.
Per Servizio, selezionare Azure Resource Graph.
Selezionare la sottoscrizione dall'elenco a discesa.
Immettere la query che si desidera usare. Ad esempio, per errori di provisioning o aggiornamento dell'estensione, è possibile immettere questa query:
kubernetesconfigurationresources | where type == "microsoft.kubernetesconfiguration/extensions" | extend provisioningState = tostring(properties.ProvisioningState) | where provisioningState == "Failed" | summarize count() by provisioningState
In alternativa, per gli errori di stato di conformità, è possibile immettere questa query:
kubernetesconfigurationresources | where type == "microsoft.kubernetesconfiguration/fluxconfigurations" | extend complianceState=tostring(properties.complianceState) | where complianceState == "Non-Compliant" | summarize count() by complianceState
Per la casella Soglia, selezionare A per il tipo di input e impostare la soglia su 0 per ricevere avvisi anche se nel cluster si verifica un errore di una sola estensione. Contrassegnare questa come Condizione di avviso.
Specificare l'intervallo di valutazione dell'avviso:
- Per Condizione, selezionare la query o l'espressione che attiva la regola di avviso.
- Per Valuta ogni, immettere la frequenza di valutazione come multiplo di 10 secondi.
- Per Valuta per, specificare per quanto tempo la condizione deve essere vera prima della creazione dell'avviso.
- In Configura gestione degli errori o assenza di dati indicare cosa deve accadere quando la regola di avviso non restituisce dati o restituisce un errore.
- Per controllare i risultati dopo l'esecuzione della query, selezionare Anteprima.
Aggiungere il percorso di archiviazione, il gruppo di regole e tutti gli altri metadati da associare alla regola.
- Per Cartella, selezionare la cartella in cui archiviare la regola.
- Per Gruppo, specificare un gruppo predefinito.
- Se necessario, aggiungere una descrizione e un riepilogo per personalizzare i messaggi di avviso.
- Aggiungere URL del runbook, pannello, dashboard e ID avviso in base alle esigenze.
Se lo si desidera, aggiungere eventuali etichette personalizzate. Quindi selezionare Salva.
È anche possibile configurare i punti di contatto e i criteri di notifica per gli avvisi.
Monitorare il consumo delle risorse e le riconciliazioni
Seguire questi passi per importare dashboard che consentano di monitorare il consumo delle risorse Flux, le riconciliazioni, le richieste API e lo stato del riconciliatore.
Seguire i passi riportati per creare un'area di lavoro di Monitoraggio di Azure.
Creare un'istanza Grafana con gestione Azure usando il portale di Azure o l'interfaccia della riga di comando di Azure.
Abilitare la raccolta di metriche Prometheus nei cluster del servizio Azure Kubernetes e/o cluster Kubernetes abilitati per ARC che si desiderano monitorare.
Configurare l'agente di Monitoraggio di Azure in modo da scorporare le metriche di Flux gestite di Azure creando una configmap:
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
Scaricare i dashboard Piano di controllo Flux e Statistiche cluster Flux.
Collegare l'area di lavoro Prometheus gestita all'istanza Grafana gestita. Il completamento di questo processo richiede alcuni minuti.
Seguire i passi per importare questi dashboard JSON in Grafana.
Dopo aver importato i dashboard, visualizzano informazioni dai cluster monitorati. Per visualizzare informazioni solo per un determinato cluster o spazio dei nomi, usare i filtri nella parte superiore di ogni dashboard.
Il dashboard Piano di controllo Flux mostra i dettagli sul consumo delle risorse di stato, sulle riconciliazioni a livello di cluster e sulle richieste API Kubernetes.
Il dashboard Statistiche cluster Flux mostra i dettagli sul numero di riconciliatori, insieme allo stato e alla durata di esecuzione di ogni riconciliatore.
Creare avvisi per problemi di consumo e riconciliazione delle risorse
Dopo aver importato il dashboard come descritto nella sezione precedente, è possibile configurare gli avvisi. Questi avvisi comunicheranno la presenza di problemi di riconciliazione e consumo delle risorse che potrebbero richiedere attenzione.
Per abilitare questi avvisi, si distribuisce un modello Bicep simile a quello illustrato qui. Le regole di avviso in questo modello sono esempi che possono essere modificati in base alle esigenze.
Dopo aver scaricato il modello Bicep e aver apportato le modifiche, seguire questa procedura per distribuire il modello.
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
}
]
}
]
}
}