Il monitoraggio è un must in tutti gli ambienti e i database non fanno eccezione. Una volta che la tua infrastruttura di database è pronta e funzionante, dovrai tenere sotto controllo ciò che sta accadendo. Il monitoraggio è d'obbligo se vuoi essere sicuro che tutto stia andando bene, ma anche se apporti le modifiche necessarie mentre il tuo sistema cresce e si evolve. Ciò ti consentirà di identificare tendenze, pianificare aggiornamenti o miglioramenti o reagire adeguatamente a eventuali problemi o errori che possono sorgere con nuove versioni, scopi diversi e così via.
Per ogni tecnologia di database, ci sono diverse cose da monitorare. Alcuni di questi sono specifici del motore di database, del fornitore o persino della versione particolare che stai utilizzando. I cluster di database dipendono fortemente dall'infrastruttura sottostante, quindi le statistiche di rete e operative sono interessanti da vedere anche dagli amministratori di database.
Quando si eseguono più sistemi di database, il monitoraggio di questi sistemi può diventare piuttosto ingrato.
In questo blog, daremo un'occhiata a ciò di cui hai bisogno per monitorare un ambiente MySQL 8.0. Daremo anche un'occhiata alle funzionalità di monitoraggio del controllo del cluster, che potrebbero aiutarti a monitorare gratuitamente lo stato dei tuoi database.
Monitoraggio sistema operativo e database
Quando si osserva un cluster o un nodo di database, ci sono due punti principali da tenere in considerazione:il sistema operativo e l'istanza MySQL stessa. Dovrai definire quali metriche monitorerai da entrambi i lati e come lo farai. Devi seguire il parametro sempre nel senso del tuo sistema, e dovresti cercare alterazioni sul modello di comportamento.
Tieni presente che quando uno dei tuoi parametri è interessato, può influire anche su altri, rendendo più complicata la risoluzione del problema. Avere un adeguato sistema di monitoraggio e allerta è essenziale per rendere questo compito il più semplice possibile.
Nella maggior parte dei casi, dovrai utilizzare alcuni strumenti, poiché è difficile trovarne uno che copra tutte le metriche desiderate.
Monitoraggio del sistema operativo
Una cosa importante (che è comune a tutti i motori di database e persino a tutti i sistemi) è monitorare il comportamento del sistema operativo. Ecco alcuni punti da controllare qui. Di seguito puoi trovare le principali risorse di sistema da guardare su un server di database. In realtà è anche l'elenco delle primissime cose da controllare.
Utilizzo CPU
Un utilizzo elevato della CPU non è una brutta cosa finché non raggiungi il limite. Un'eccessiva percentuale di utilizzo della CPU potrebbe essere un problema se non è un comportamento normale. In questo caso, è essenziale 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
Idealmente, l'intero database dovrebbe essere archiviato in memoria, ma ciò non è sempre possibile. Dai a MySQL quanto ti puoi permettere, ma lasciane abbastanza per il funzionamento di altri processi.
Se vedi un valore alto per questa metrica e non è cambiato nulla 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 MySQL. Lo scambio è solo per le emergenze e non dovrebbe essere utilizzato, assicurati di avere anche il tuo sistema operativo impostato per consentire a MySQL di decidere sull'utilizzo dello scambio.
Utilizzo del disco
L'utilizzo del disco è una delle metriche chiave da monitorare e avvisare. Assicurati di avere sempre spazio libero per nuovi dati, file temporanei, snapshot o backup.
Il monitoraggio di valori metrici rigidi non è abbastanza buono. Un aumento anomalo dell'uso dello spazio su disco o un consumo eccessivo di accesso al disco sono elementi essenziali da tenere d'occhio in quanto potresti avere un numero elevato di errori registrati nel file di registro MySQL o una configurazione della cache scadente che potrebbe generare un consumo vitale di accesso al disco invece di utilizzando la memoria per elaborare le query. Assicurati di essere in grado di rilevare comportamenti anomali anche se i tuoi avvisi e le metriche critiche non sono ancora state raggiunte.
Oltre al monitoraggio dello spazio, dovremmo anche monitorare l'attività del disco. I valori principali da monitorare sono:
- Leggi/Scrivi richieste
- Lunghezza della coda IO
- Attesa IO media
- Tempo medio di lettura/scrittura
- Leggi/Scrivi larghezza di banda
Puoi usare iostat o pt-diskstats di Percona per vedere tutti questi dettagli.
Le cose che possono influenzare le prestazioni del tuo disco sono spesso legate al trasferimento di dati da e verso il tuo disco, quindi monitora processi anomali che possono essere avviati da altri utenti.
Carico medio
Una metrica delle prestazioni all-in-one. Comprendere il carico di Linux è una chiave per monitorare il sistema operativo e i sistemi dipendenti dal database.
Medio di carico relativo ai tre punti sopra menzionati. Un carico medio elevato potrebbe essere generato da un utilizzo eccessivo di CPU, RAM o disco.
Rete
A meno che non si facciano backup o si trasferiscano grandi quantità di dati, non dovrebbe essere il collo di bottiglia.
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 configurazione di rete scadente.
Monitoraggio database
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.
Ovviamente, ci sono molte metriche in MySQL. Qui ci concentreremo sui più importanti.
Monitoraggio delle sessioni attive
Dovresti anche tenere traccia del numero di sessioni attive e dello stato DB up down. Spesso per capire il problema è necessario vedere da quanto tempo è in esecuzione il database. quindi possiamo usarlo per rilevare i respawn.
La prossima cosa sarebbe un numero di sessioni. 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. L'uso improprio del pool di connessioni, il blocco o i problemi di rete sono i problemi più comuni legati al numero di connessioni.
I valori chiave qui sono
- Tempo di attività
- Threads_connected
- Max_used_connections
- Connessioni_interrotte
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. Non solo lo stato up down ma anche il lag perché un continuo aumento di questo valore non è un ottimo segnale in quanto significa che lo slave non è in grado di recuperare il ritardo con il suo master.
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à.
La replica viene monitorata al meglio controllando lo STATO SLAVE e i seguenti parametri:
- SLAVE_RUNNING
- SLAVE_IO_Running
- SLAVE_SQL_RUNNING
- LAST_SQL_ERRNO
- SECONDS_BEHIND_MASTER
Backup
Sfortunatamente, l'edizione della community vanilla non viene fornita con il gestore di 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ù critico in un processo di backup. Qui dovremmo usare strumenti esterni come percona-xtrabackup o ClusterControl.
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. I punti di errore comuni da tenere d'occhio sono gli errori, le dimensioni dei file di registro. La posizione del registro degli errori può essere trovata nella variabile log_error.
Strumenti esterni
Infine, ma non meno importante, puoi trovare un elenco di strumenti utili per monitorare l'attività del tuo database.
Percona Toolkit - è l'insieme di strumenti Linux di Percona per analizzare le attività di MySQL e del sistema operativo. Potete trovare qui. Supporta le distribuzioni Linux a 64 bit più popolari come Debian, Ubuntu e Redhat.
mysqladmin - mysqladmin è un programma di amministrazione per il demone MySQL. Può essere utilizzato per controllare lo stato del server (ping), elencare i processi, vedere i valori delle variabili, ma anche svolgere alcune attività amministrative come creare/eliminare database, svuotare (reimpostare) registri, statistiche e tabelle, uccidere query in esecuzione, arrestare il server e controllare la replica.
innotop - offre una vista estesa delle istruzioni SHOW. È molto potente e può ridurre significativamente il tempo di indagine. Tra il supporto per MySQL vanilla, puoi vedere la vista Galera e i dettagli della replica Master-slave.
mtop - monitora un server MySQL mostrando le query che richiedono più tempo per essere completate. Le funzionalità includono lo "zoom" in un processo per mostrare la query completa, la "spiegazione" delle informazioni di Query Optimizer per una query e le query "uccise". Vengono inoltre fornite statistiche sulle prestazioni del server, informazioni sulla configurazione e suggerimenti per l'ottimizzazione.
Mytop - viene eseguito in un terminale e mostra le statistiche su thread, query, query lente, uptime, carico, ecc. in formato tabulare, molto simile a Linux
Conclusione
Questo blog non vuole essere una guida esauriente su come migliorare il monitoraggio del database, ma si spera fornisca un quadro più chiaro di ciò che le cose possono diventare essenziali e di alcuni dei parametri di base che possono essere osservati. Non esitare a farci sapere se abbiamo perso qualcosa di importante nei commenti qui sotto.