Una volta che la tua infrastruttura di database è attiva e funzionante, dovrai tenere sotto controllo ciò che sta accadendo. Il monitoraggio è d'obbligo se vuoi essere sicuro che tutto stia andando bene o se potresti dover cambiare qualcosa.
Per ogni tecnologia di database ci sono diverse cose da monitorare. Alcuni di questi sono specifici del motore di database o del fornitore o anche della versione specifica che stai utilizzando.
In questo blog, daremo un'occhiata a ciò che è necessario monitorare in un ambiente PostgreSQL.
Cosa monitorare in PostgreSQL
Durante il monitoraggio di un cluster o nodo di database, ci sono due cose principali da tenere in considerazione:il sistema operativo e il database stesso. Dovrai definire quali metriche monitorerai da entrambi i lati e come lo farai. Devi monitorare la metrica sempre nel contesto del tuo sistema e dovresti cercare alterazioni nel modello di comportamento.
Nella maggior parte dei casi, dovrai utilizzare diversi strumenti (poiché è quasi impossibile trovarne uno per coprire tutte le metriche desiderate.)
Tieni presente che quando una delle tue metriche è interessata, può interessare anche altre, rendendo più complessa la risoluzione del problema. Avere un buon sistema di monitoraggio e avviso è importante per rendere questo compito il più semplice possibile.
Monitoraggio del sistema operativo
Una cosa importante (che è comune a tutti i motori di database e anche a tutti sistemi) è quello di monitorare il comportamento del sistema operativo. Ecco alcuni punti da controllare qui.
Utilizzo CPU
Una percentuale eccessiva di utilizzo della CPU potrebbe essere un problema se non è un comportamento normale. In questo caso, è importante identificare il processo/i processi che stanno generando questo problema. Se il problema è il processo del database, dovrai controllare cosa sta succedendo all'interno del database.
Memoria RAM o utilizzo SWAP
Se vedi un valore elevato per questa metrica e nulla è cambiato nel tuo sistema, probabilmente devi controllare la configurazione del tuo database. Parametri come shared_buffers e work_mem possono influire direttamente su questo dato che definiscono la quantità di memoria da utilizzare per il database PostgreSQL.
Utilizzo del disco
Un aumento anomalo dell'uso dello spazio su disco o un consumo eccessivo di accesso al disco sono cose importanti da monitorare poiché potresti avere un numero elevato di errori registrati nel file di registro di PostgreSQL o una configurazione della cache errata che potrebbe generare un consumo importante di accesso al disco invece di utilizzare la memoria per elaborare le query.
Carico medio
È correlato ai tre punti sopra menzionati. Un carico medio elevato potrebbe essere generato da un utilizzo eccessivo di CPU, RAM o disco.
Rete
Un problema di rete può interessare tutti i sistemi poiché l'applicazione non può connettersi (o connettere pacchetti persi) al database, quindi questa è una metrica importante da monitorare. Puoi monitorare la latenza o la perdita di pacchetti e il problema principale potrebbe essere una saturazione della rete, un problema hardware o semplicemente una cattiva configurazione di rete.
Monitoraggio del database PostgreSQL
Il monitoraggio del tuo database PostgreSQL non è solo importante per vedere se stai riscontrando un problema, ma anche per sapere se hai bisogno di cambiare qualcosa per migliorare le prestazioni del tuo database, questo è probabilmente uno dei più importanti cose da monitorare in un database. Vediamo alcune metriche importanti per questo.
Monitoraggio query
Per impostazione predefinita, PostgreSQL è configurato pensando alla compatibilità e alla stabilità, quindi è necessario conoscere le query e il suo schema e configurare i database in base al traffico che hai. Qui puoi utilizzare il comando EXPLAIN per controllare il piano di query per una query specifica e puoi anche monitorare la quantità di SELECT, INSERT, UPDATE o DELETE su ciascun nodo. Se hai una query lunga o un numero elevato di query in esecuzione contemporaneamente, potrebbe essere un problema per tutti i sistemi.
Monitoraggio delle sessioni attive
Dovresti anche monitorare il numero di sessioni attive. Se sei vicino al limite, devi controllare se qualcosa non va o se hai solo bisogno di incrementare il valore max_connections. La differenza nel numero può essere un aumento o una diminuzione delle connessioni. Il cattivo utilizzo del pool di connessioni, il blocco o il problema della rete sono i problemi più comuni relativi al numero di connessioni.
Blocchi database
Se hai una query in attesa di un'altra query, devi controllare se quell'altra query è un processo normale o qualcosa di nuovo. In alcuni casi, se qualcuno sta effettuando un aggiornamento su un grande tavolo, ad esempio, questa azione può influire sul normale comportamento del tuo database, generando un numero elevato di blocchi.
Monitoraggio della replica
Le metriche chiave da monitorare per la replica sono il ritardo e lo stato di replica. I problemi più comuni sono problemi di rete, problemi di risorse hardware o problemi di dimensionamento. Se stai affrontando un problema di replica, dovrai conoscerlo al più presto poiché dovrai risolverlo per garantire l'ambiente ad alta disponibilità.
Monitoraggio backup
Evitare la perdita di dati è una delle attività DBA di base, quindi non devi solo eseguire il backup, dovresti sapere se il backup è stato completato e se è utilizzabile. Di solito quest'ultimo punto non viene preso in considerazione, ma è probabilmente il controllo più importante in un processo di backup.
Monitoraggio dei registri del database
Dovresti monitorare il registro del tuo database per errori come FATAL o deadlock, o anche per errori comuni come problemi di autenticazione o query di lunga durata. La maggior parte degli errori viene scritta nel file di registro con informazioni utili dettagliate per risolverlo.
Impatto del monitoraggio sulle prestazioni del database PostgreSQL
Sebbene il monitoraggio sia un must, in genere non è gratuito. C'è sempre un costo sulle prestazioni del database, a seconda di quanto stai monitorando, quindi dovresti evitare di monitorare cose che non utilizzerai.
In generale, ci sono due modi per monitorare i tuoi database, dai log o dal lato database tramite query.
Nel caso dei log, per poterli utilizzare, è necessario disporre di un livello di registrazione elevato, che genera un elevato accesso al disco e può influire sulle prestazioni del database.
Per la modalità di interrogazione, ogni connessione al database utilizza risorse, quindi a seconda dell'attività del database e delle risorse assegnate, potrebbe influire anche sulle prestazioni.
Strumenti di monitoraggio PostgreSQL
Ci sono diverse opzioni di strumenti per monitorare il tuo database. Può essere uno strumento PostgreSQL integrato, come estensioni o uno strumento esterno. Vediamo alcuni esempi di questi strumenti.
Estensioni
- Pg_stat_statements :questa estensione ti aiuterà a conoscere il profilo di query del tuo database. Tiene traccia di tutte le query eseguite e memorizza molte informazioni utili in una tabella chiamata pg_stat_statements. Interrogando questa tabella puoi ottenere quali query vengono eseguite nel sistema, quante volte sono state eseguite e quanto tempo hanno consumato, tra le altre informazioni.
- Pgbadger :È un software che esegue un'analisi dei log di PostgreSQL e li visualizza in un file HTML. Ti aiuta a comprendere il comportamento del tuo database e identificare quali query devono essere ottimizzate.
- Pgstattuple :può generare statistiche per tabelle e indici, mostrando quanto spazio utilizzato da ciascuna tabella e indice è consumato da tuple live, tuple eliminate o quanto spazio non utilizzato è disponibile in ciascuna relazione.
- Pg_buffercache :Con questo, puoi controllare in tempo reale cosa sta succedendo nella cache del buffer condiviso, mostrando quante pagine sono attualmente conservate nella cache.
Strumenti di monitoraggio esterno
- ClusterControl :È un sistema di gestione e monitoraggio che aiuta a distribuire, gestire, monitorare e ridimensionare i database da un'interfaccia intuitiva. ClusterControl supporta le principali tecnologie di database open source e puoi automatizzare molte delle attività del database che devi eseguire regolarmente, come l'aggiunta e il ridimensionamento di nuovi nodi, l'esecuzione di backup e ripristini e altro ancora.
- Nagios :È un sistema Open Source e un'applicazione di monitoraggio della rete. Monitora host o servizi e gestisce gli avvisi per diversi stati. Con questo strumento puoi monitorare i servizi di rete, le risorse host e altro ancora. Per monitorare PostgreSQL, puoi usare alcuni plugin o puoi creare il tuo script per controllare il tuo database.
- Zabbix :È un software in grado di monitorare sia le reti che i server. Utilizza un meccanismo di notifica flessibile che consente agli utenti di configurare gli avvisi tramite e-mail. Offre inoltre report e visualizzazione dei dati in base ai dati memorizzati. Tutti i rapporti e le statistiche Zabbix, nonché i parametri di configurazione, sono accessibili tramite un'interfaccia web.
Dashboard
La visibilità è utile per il rilevamento rapido dei problemi. È sicuramente un compito più dispendioso in termini di tempo leggere l'output di un comando piuttosto che guardare un grafico. Quindi, l'utilizzo di una dashboard potrebbe fare la differenza tra il rilevamento di un problema ora o nei prossimi 15 minuti, molto sicuri che il tempo potrebbe essere davvero importante per l'azienda. Per questa attività, strumenti come PMM o Vividcortex, tra gli altri, potrebbero essere la chiave per aggiungere visibilità al tuo sistema di monitoraggio del database.
Monitoraggio e gestione Percona (PMM): È una piattaforma open source per la gestione e il monitoraggio delle prestazioni del database. Fornisce un'analisi completa basata sul tempo per i server MySQL, MariaDB, MongoDB e PostgreSQL per garantire che i tuoi dati funzionino nel modo più efficiente possibile.
Corteccia vivida: È una piattaforma ospitata su cloud che fornisce un monitoraggio approfondito delle prestazioni del database. Offre una visibilità completa sui principali database open source tra cui MySQL, PostgreSQL, AWS Aurora, MongoDB e Redis.
Avvisi
Il solo monitoraggio di un sistema non ha senso se non ricevi una notifica su ogni problema. Senza un sistema di avviso, dovresti andare allo strumento di monitoraggio per vedere se tutto va bene e potrebbe essere possibile che tu abbia un grosso problema da molte ore. Questo lavoro di avviso può essere eseguito utilizzando avvisi e-mail, avvisi di testo o altre integrazioni di strumenti come slack.
È davvero difficile trovare alcuni strumenti per monitorare tutte le metriche necessarie per PostgreSQL, in generale sarà necessario usarne più di uno e anche alcuni scripting dovranno essere effettuati. Un modo per centralizzare l'attività di monitoraggio e avviso è utilizzare ClusterControl, che fornisce funzionalità come gestione del backup, monitoraggio e avvisi, distribuzione e ridimensionamento, ripristino automatico e funzionalità più importanti per aiutarti a gestire i database. Tutte queste funzionalità sullo stesso sistema.
Monitoraggio del database PostgreSQL con ClusterControl
ClusterControl ti consente di monitorare i tuoi server in tempo reale. Ha un set predefinito di dashboard per te, per analizzare alcune delle metriche più comuni.
Ti permette di personalizzare i grafici disponibili nel cluster e puoi abilitare il monitoraggio basato sugli agenti per generare dashboard più dettagliati.
Puoi anche creare avvisi che ti informano sugli eventi nel tuo cluster, o integrarsi con diversi servizi come PagerDuty o Slack.
Inoltre, puoi controllare la sezione Query Monitor, dove puoi trovare il le query principali, le query in esecuzione, i valori anomali delle query e le statistiche delle query.
Con queste funzionalità, puoi vedere come sta andando il tuo database PostgreSQL.
Per la gestione del backup, ClusterControl lo centralizza per proteggere, proteggere e recuperare i tuoi dati e, con la funzione di backup di verifica, puoi confermare se il backup è pronto.
Questo processo di backup di verifica ripristinerà il backup in un host autonomo separato, quindi puoi assicurarti che il backup funzioni.
Monitoraggio con la riga di comando ClusterControl
Per lo scripting e l'automazione delle attività, o anche se preferisci semplicemente la riga di comando, ClusterControl ha lo strumento s9s. È uno strumento da riga di comando per la gestione del cluster di database.
Elenco cluster
Elenco nodi
Puoi eseguire tutte le attività (e anche di più) dall'interfaccia utente di ClusterControl e puoi integrare questa funzionalità con alcuni strumenti esterni come slack, per gestirla da lì.
Conclusione
In questo blog, abbiamo menzionato alcuni parametri importanti da monitorare nel tuo ambiente PostgreSQL e alcuni strumenti per semplificarti la vita avendo i tuoi sistemi sotto controllo. Puoi anche vedere come utilizzare ClusterControl per questa attività.
Come puoi vedere, il monitoraggio è assolutamente necessario e il modo migliore per farlo dipende dall'infrastruttura e dal sistema stesso. Dovresti raggiungere un equilibrio tra ciò che devi monitorare e come influisce sulle prestazioni del tuo database.