Introduzione
Le notifiche e gli avvisi sono una parte critica del flusso di lavoro di distribuzione. Quando si lavora con un cluster Kubernetes, spesso è necessario essere immediatamente informati su eventuali problemi critici nel cluster.
Alertmanager fa parte dello stack kube-prom-stack
installato nel tuo cluster in Prometheus Stack. Consente di ricevere avvisi da varie fonti come Prometheus. Le regole vengono create sul lato di Prometheus, che a loro volta possono generare avvisi. È responsabilità di Alertmanager intercettare tali avvisi, raggrupparli (aggregazione), applicare altre trasformazioni e infine instradarli ai destinatari configurati. I messaggi di notifica possono essere ulteriormente formattati per includere dettagli aggiuntivi se desiderato. Puoi utilizzare Slack, Gmail, ecc. per inviare notifiche in tempo reale.
In questa sezione, imparerai come ispezionare gli avvisi esistenti, crearne di nuovi e quindi configurare Alertmanager per inviare notifiche tramite Slack utilizzando lo stesso file di manifesto utilizzato per configurare Prometheus.
Tabella dei contenuti
- Prerequisiti
- Passaggio 1 – Controllare gli Alert inclusi
- Passaggio 2 – Creare un nuovo Alert
- Passaggio 3 – Configurare Alertmanager per inviare notifiche a Slack
- Passaggio 4 – Risolvere un Alert attivo
- Conclusioni
Prerequisiti
Per completare questo tutorial, avrai bisogno di:
- Lo stack di monitoraggio Prometheus installato nel tuo cluster come spiegato in Stack Prometheus.
- Lo stack Loki installato nel tuo cluster come spiegato in Stack Loki.
- L’applicazione di esempio Emojivoto è stata distribuita nel cluster. Si prega di seguire i passaggi dal repository principale. Si creeranno avvisi per questa applicazione.
- Diritti amministrativi su uno spazio di lavoro Slack. In seguito, si creerà un’applicazione con un webhook in ingresso che verrà utilizzato per inviare notifiche da Alertmanager.
Passo 1 – Controllare gli Avvisi Inclusi
kube-prom-stack
ha già oltre cento regole attivate. Per accedere alla console di Prometheus, effettuare prima un port-forward sulla propria macchina locale.
Aprire un browser web su localhost:9091 e accedere alla voce di menu Avvisi. Dovresti vedere alcuni Avvisi predefiniti e dovrebbe apparire come segue:
Fare clic su uno qualsiasi degli avvisi per espanderlo. È possibile visualizzare informazioni sull’espressione che interroga, le etichette che sono state impostate e le annotazioni che sono molto importanti dal punto di vista del template. Prometheus supporta il templating nelle annotazioni e nelle etichette degli avvisi. Per ulteriori informazioni, consultare la documentazione ufficiale.
Passaggio 2 – Creazione di un Nuovo Avviso
Per creare un nuovo avviso, è necessario aggiungere una nuova definizione nella sezione additionalPrometheusRule
del file dei valori di Helm kube-prom-stack
.
Creerai un esempio di avviso che verrà attivato se lo spazio dei nomi emojivoto
non ha un numero previsto di istanze. Il numero previsto di pod per l’applicazione emojivoto
è 4.
Innanzitutto, apri il file 04-setup-observability/assets/manifests/prom-stack-values.yaml
fornito nel repository del kit di avvio, utilizzando un editor di testo a tua scelta (preferibilmente con supporto per il controllo YAML). Poi, decommenta il blocco additionalPrometheusRules
.
Infine, applica le impostazioni utilizzando helm
:
Per verificare che l’avviso sia stato creato con successo, vai alla Console di Prometheus, clicca su Avvisi e identifica l’avviso EmojivotioInstanceDown
. Dovrebbe essere visibile in fondo all’elenco.
Passaggio 3 – Configura Alertmanager per Inviare Notifiche a Slack
Per completare questa sezione, è necessario disporre dei diritti amministrativi su uno spazio di lavoro Slack. Ciò ti consentirà di creare il webhook in entrata di cui avrai bisogno nei passaggi successivi. Dovrai anche creare un canale dove desideri ricevere le notifiche da Alertmanager.
Configurerai Alertmanager per scansionare tutti gli avvisi ricevuti stampando i rispettivi riassunti e descrizioni su nuove linee.
- Apri un browser web e vai su
https://api.slack.com/apps
. Clicca sul pulsante Crea nuova app. - Nella finestra Crea un’app, seleziona l’opzione Da zero. Quindi, dai un nome alla tua applicazione e seleziona lo spazio di lavoro appropriato.
- Dalla pagina Informazioni di base, clicca sull’opzione Webhook in entrata, attivala e clicca sul pulsante Aggiungi nuovo webhook allo spazio di lavoro in fondo.
- Nella pagina successiva, utilizza il menu a discesa Cerca un canale… per selezionare il canale desiderato dove vuoi inviare le notifiche. Quando sei pronto, clicca sul pulsante Consenti.
- Copia il valore dell’URL del webhook visualizzato sulla pagina. Ne avrai bisogno nella sezione successiva.
Successivamente, indicherai ad Alertmanager come inviare le notifiche su Slack. Apri il file 04-setup-observability/assets/manifests/prom-stack-values-v35.5.1.yaml
fornito nel repository del Kit di Avvio utilizzando un editor di testo a tua scelta. Rimuovi il commento dall’intero blocco alertmanager.config
. Assicurati di aggiornare i valori slack_api_url
e channel
sostituendo i segnaposto <>
di conseguenza.
Nella configurazione sopra,
slack_api_url
: URL webhook Slack in ingresso creato nel passaggio 4receivers.[].slack_configs
: definisce il canale Slack utilizzato per inviare le notifiche, il titolo della notifica e il messaggio effettivo. È anche possibile formattare il messaggio di notifica (o corpo) in base alle proprie esigenze.title
etext
: scorrono le allerte attive e stampano il riepilogo e la descrizione utilizzando il sistema di modelli di Prometheus.send_resolved
: booleano che indica se Alertmanager dovrebbe inviare una notifica quando un’avviso non è più attivo.
I parametri matcher
e continue
sono ancora commentati poiché verranno decommentati successivamente nella guida. Per ora, dovrebbero rimanere commentati.
Infine, esegui l’aggiornamento dello stack kube-prometheus
, utilizzando helm
:
A questo punto, dovresti ricevere notifiche Slack per tutte le allerte attive.
Successivamente, testerai se l’allerta EmojivotoInstanceDown
aggiunta precedentemente funziona e invia una notifica a Slack ridimensionando il numero di repliche per il deployment /emoji
dello spazio dei nomi emojivoto
.
Dal terminale, esegui il seguente comando per portare il numero di repliche per il deployment /emoji
a 0:
Apri un browser web su localhost:9091 e accedi alla voce di menu Alerts. Cerca l’allarme EmojivotoInstanceDown creato in precedenza. Lo stato dell’allarme dovrebbe indicare Firing dopo circa un minuto di ridimensionamento del deployment.
A message notification will be sent to Slack to the channel you configured earlier if everything goes well. You should see the “The Number of pods from the namespace emojivoto
is lower than the expected 4.” alert in the Slack message as configured in the annotations.description
config of the additionalPrometheusRulesMap
block.
Attualmente, tutte le attivazioni degli allarmi verranno inviate al canale Slack. Questo può causare affaticamento da notifica. Per analizzare meglio quali notifiche vengono inviate, è possibile limitare Alertmanager a inviare notifiche solo per gli allarmi che corrispondono a un determinato modello. Ciò viene fatto utilizzando il parametro matcher
.
Apri il file 04-setup-observability/assets/manifests/prom-stack-values-v35.5.1.yaml
fornito nel repository Starter Kit utilizzando un editor di testo a tua scelta. Rimuovi il commento dall’intero blocco alertmanager.config
. Assicurati di rimuovere il commento dai parametri matcher
e continue
:
Infine, esegui l’aggiornamento dello stack kube-prometheus-stack
, utilizzando helm
:
Ora dovresti ricevere solo le notifiche corrispondenti al nome dell’allarme EmojivotoInstanceDown
. Poiché il parametro continue
è impostato su false, Alertmanager invierà solo notifiche da questo allarme e smetterà di inviarle agli altri.
Cliccando sul nome della notifica in Slack si aprirà un browser web su una pagina web non raggiungibile con il DNS interno di Kubernetes del pod Alertmanager. Questo è previsto. Alcuni link utili da controllare: Per ulteriori informazioni, puoi consultare servizio pod DNS, Parametri di configurazione per AlertManager, e alcuni Esempi di notifica.
Passaggio 4 – Risoluzione dei problemi di un’allerta attiva
Quando un’allerta viene attivata e invia una notifica in Slack, è importante che tu possa risolvere facilmente il problema e trovare prontamente la causa principale. Per fare ciò, puoi fare uso di Grafana che è già stato installato nei tutorial Stack Prometheus e Stack Loki.
Crea un port forwarding per Grafana sulla porta 3000
:
Apri un browser web su localhost:3000 e accedi utilizzando le credenziali predefinite admin/prom-operator
.
Passa alla sezione Allerta. Dal filtro Stato, clicca sull’opzione Fuoco. Identifica l’allerta emojivoto-instance-down
definita nella sezione Creazione di una nuova allerta ed espandila. Dovresti vedere quanto segue:
Clicca sul pulsante Vedi grafico. Dalla pagina successiva, puoi osservare il conteggio per il numero di pod nello spazio dei nomi emojivoto
visualizzato come metrica. Tieni presente che Grafana filtra i risultati utilizzando un intervallo di tempo di Ultima ora per impostazione predefinita. Regola questo all’intervallo di tempo in cui scatta l’allarme. Puoi regolare l’intervallo di tempo utilizzando l’opzione Da A per un risultato più granulare o utilizzando un Intervallo rapido come Ultimi 30 minuti
.
Dalla scheda Esplora, seleziona la sorgente dati Loki. Nel browser di log inserisci quanto segue: {namespace="emojivoto"}
e clicca sul pulsante Esegui query in alto a destra della pagina. Dovresti vedere quanto segue:
Assicurati di regolare l’intervallo di tempo di conseguenza.
Da questa pagina, puoi filtrare ulteriormente i risultati del log. Ad esempio, per filtrare i log per il contenitore web-svc
dello spazio dei nomi emojivoto
, puoi inserire la seguente query: {namespace="emojivoto", container="web-svc"}
Maggiori spiegazioni sull’utilizzo di LogQL
possono essere trovate in Passaggio 3 – Utilizzo di LogQL.
Puoi anche utilizzare gli Eventi Kubernetes esportati installati in precedenza e filtrare gli eventi relativi allo spazio dei nomi emojivoto
.
Inserisci la seguente query nel browser dei log: {app="event-exporter"} |= "emojivoto"
. Questo restituirà gli eventi Kubernetes correlati allo spazio dei nomi emojivoto
.
Conclusione
In questo tutorial, hai imparato come ispezionare gli alert esistenti, crearne di nuovi e configurare AlertManager
per inviare notifiche a Slack.
Per saperne di più
- Configurare uno Stack di Monitoraggio Kubernetes con Prometheus, Grafana e Alertmanager su DigitalOcean
- Crea Alert utilizzando l’Uptime di DigitalOcean
Il prossimo passo è impostare il Backup e il Ripristino utilizzando Velero o TrilioVault nel tuo cluster DOKS.