2My Simple Dashboard

2MySQL Simple Dashboard e' una dashboard realizzata con Grafana che consente di visualizzare grafici molto significativi sulle attivita' svolte nel tempo su database MySQL analizzando andamenti ed eventi.

Perche' si chiama cosi?
Perche' e' la mia (la uso spesso) ed e' semplice: My MySQL Simple Dashboard --> 2MySQL Simple Dashboard! [NdA e poi risultava prima in ordine alfabetico sulla community Grafana ;-]

Ho fretta!

Per utilizzare 2My Dash e' sufficiente scaricare Grafana, my2Collector, 2MySQL Simple Dashboard e configurarli come descritto in ciascun tool. E' cosi' possibile utilizzare il cruscotto con un qualsiasi Data Source MySQL.

2MySQL Grafana Simple Dashboard

Volete saperne di piu'? Continuate a leggere!

Grafana

Grafana e' un software Open Source che consente di generare grafici e dashboard per il monitoraggio di ambienti e di sistemi.
L'utente accede a Grafana con un normale browser: tipicamente il servizio risponde sulla porta 3000 [NdA e' possibile modificare la porta ed utilizzare in alternativa i protocolli HTTP/HTTPS]. Grafana permette di interrogare, visualizzare, definire alert ed analizzare metriche con un'interfaccia semplice ed intuitiva.
Grafana supporta diversi database temporali [NdA TSDB: Time Series Database] quali Graphite, InfluxDB, ... e di recente anche diversi DB Relazionali quali MySQL e PostgreSQL.

Grafana e' un ottimo strumento per creare dashboard dinamiche su dati temporali: e' molto veloce, graficamente accattivante e di uso intuitivo.
Una dashboard e' composta da pannelli, ciascuno dei quali esegue le ricerche su un database e visualizza i dati relativi. Le query vengono eseguite sull'intervallo temporale scelto dall'utente e, se richiesto, viene eseguito un refresh periodico. Le funzionalita' di Grafana sono molte:

Questo documento e gli esempi fanno riferimento alla versione 5.3 di Grafana, ma molte delle indicazioni valgono anche per le versioni precedenti e successive.

MySQL

MySQL© e' un diffusissimo database relazionale Open Source. I suoi principali punti di forza sono:

Questo documento e gli esempi fanno riferimento alla versione di MySQL 5.7 ma in realta' la componente di collezione dati e la dashboard sono in grado di operare con tutte le versioni MySQL dalla versione 5.1 alla 8.0 e con i principali fork (eg. MariaDB versioni 5.x e 10.x).

2MySQL Dashboard

L'utilizzo della dashboard Grafana per MySQL (2MySQL Dash) e' molto semplice...

La 2MY Dash presenta una situazione di insieme: MySQL Dashboard with Grafana

Sono riportati organizzati in pannelli le principali statistiche sul comportamento di MySQL: i thread connessi e quelli attivi, l'utilizzo di spazio (su una scala temporale di 2 mesi), i comandi SQL /sec. per tipologia (Select, Insert, Update, Delete), il traffico di rete ed il numero di query per fascia temporale. Un ulteriore pannello consente di visualizzare una o piu' statistiche scelte tra le centinaia raccolte.

I cruscotti a destra riportano ulteriori informazioni: la frequenza delle connessioni al DB, l'utilizzo delle principali cache (InnoDB, MyISAM e Query Cache), l'eventuale stato della replica MySQL.

La maggior parte delle informazioni utili al DBA sono raccolte in questa pagina e, con la possibilita' di visualizzare statistiche a scelta o di scorrere nel tempo i dati il livello di dettaglio e' veramente elevato. Tuttavia nel caso servissero ulteriori informazioni sono disponibili altre dashboard opzionali.

Seguendo i link e' possibile navigare sulle altre dashboard aggiuntive per MySQL. Sono disponibili altre 4 dashboard:

Le dashboard aggiuntive possono essere scaricate da qui!

2My Collector

MySQL rende disponibili un centinaio di metriche utili al monitoraggio con il comando SHOW GLOBAL STATUS; che riporta i valori accumulati dall'avvio del DB o dall'ultimo FLUSH STATUS. MySQL pero' non effettua alcuna storicizzazione dei dati e quindi i valori si riferiscono al momento attuale.

2My Collector effettua la storicizzazione e la comparazione dei valori delle metriche MySQL ogni 10 minuti inserendoli in una tabella facilmente interrogabile. 2My Collector utilizza Stored Procedures e lo scheduler di MySQL, quindi non richiede alcun componente esterno.
In questo modo la dashboard ha a disposizione tutti i dati necessari per visualizzare le statistiche [NdA per default vengono mantenuti 2 mesi di dati].

L'installazione si effettua eseguendo il semplice my2.sql script scaricato da Github.

Installazione e configurazione di Grafana

L'installazione di Grafana e' disponibile su diverse piattaforme e tecnologie (eg. Linux, Windows, Mac, Docker, ...), come ampiamente descritto nella documentazione ufficiale.

Nel seguito vediamo l'installazione da YUM repository su RHEL/CentOS/Fedora/OL 7.x. E' la piu' semplice perche' scarica ed installa automaticamente tutti gli RPM necessari.

Sulle versioni precedenti di RHEL l'installazione e' analoga [NdA ovviamente va cambiata la baseurl] mentre per l'avvio del servizio i comandi sono:

sudo /sbin/chkconfig --add grafana-server sudo service grafana-server start

Effettuata l'installazione ed avviato il servizio e' possibile accedere alla porta 3000 con un normale browser. Al primo accesso l'utenza utilizzabile e' admin/admin ed e' ovviamente consigliabile cambiare subito la password:

Per un'installazione in alta affidabilita' e' possibile configurare istanze di Grafana su server diversi dietro un load balancer ed utilizzare un DB esterno (eg. MySQL o PostgreSQL) al posto del default SQLite in locale. La configurazione nel file /etc/grafana/grafana.ini e' banale:

# Either "mysql", "postgres" or "sqlite3", it's your choice
;type = sqlite3
;host = 127.0.0.1:3306
;name = grafana
;user = root
# If the password contains # or ; you have to wrap it with triple quotes. Ex """#password;"""
;password =

Sono molteplici i pannelli aggiuntivi di Grafana che e' possibile installare con un semplice comando. Ecco come installare i miei preferiti:

grafana-cli plugins install grafana-clock-panel grafana-cli plugins install grafana-piechart-panel grafana-cli plugins install grafana-worldmap-panel grafana-cli plugins install raintank-worldping-app service grafana-server restart

E' ora opportuno creare un'utenza dedicata sul DB MySQL di MySQL per l'accesso a grafana. I comandi sono:

 CREATE USER 'xgrafana'@'IP' IDENTIFIED BY 'XXX';
 GRANT SELECT ON motion2.* TO 'xgrafana'@'IP';
 GRANT SELECT ON my2.* TO 'xgrafana'@'IP';
 -- GRANT SELECT ON performance_schema.* to 'xgrafana'@'IP';

Ed infine bisogna installare la Dashboard 2MySQL:

... nell'installazione vengono richieste le credenziali per l'accesso al DB ...

A questo punto la dashboard e' installata ed e' possibile utilizzarla come gia' descritto nel punto precedente.

MySQL Datasource Plugin

2MySQL Grafana Simple Dashboard La gestione dei Plugin si effettua in modo molto semplice con Grafana... e l'unico necessario e' quello per la connessione MySQL.

Maggiori dettagli sono riportati nella documentazione ufficiale.

Download Dashboard

La 2MySQL Simple Dashboard e' pubblicata su sito ufficiale di Grafana.

Le altre dashboard sono disponibili... basta chiederle!
Non le abbiamo pubblicate su sito di Grafana poiche' tecnicamente meno interessanti (dal punto di vista grafico e di query utilizzate: al contrario le informazioni riportate sono molto utili per i DBA: per esempio la PROCESSLIST).

L'apprendista stregone

Utilizzare la dashboard 2MySQL e' sufficiente per la maggioranza delle esigenze di monitoraggio. E' possibile effettuare personalizzazioni inserendo variabili e condizioni ulteriori alle query implementate nei pannelli.

Ma con Grafana e' facile aggiungere ulteriori componenti o modificare significativamente quelli presenti... Tutto si puo' fare: anche rompere la dashboard o la base dati MySQL! Meglio seguire alcune avvertenze:

Un esempio di query temporale Grafana su MySQL e':

SELECT UNIX_TIMESTAMP(time_column) as time_sec,
       value_column as value
  FROM table_name
 WHERE $__timeFilter(time_column)
 ORDER BY time_column

E' importante notare che la dimensione temporale deve essere rappresentata come uno UNIX_TIMESTAMP [NdA numero di secondi da epoch come integer, fino a che funzionera' ;-)]; MySQL ha gia' una funzione per convertire una data in un timestamp. La macro $__timeFilter trasforma la colonna in una condizione temporale corretta da Grafana prima di inviare la query al DB MySQL.

Per effettuare un'aggregazione sulla dimensione temporale la query diventa:

SELECT $__timeGroup(time_column,'10m') as time,
       max(value column), 'max' as metric
  FROM table_name
 WHERE $__timeFilter(time_column)
 GROUP BY $__timeGroup(time_column,'10m')
 ORDER BY $__timeGroup(time_column,'10m')

Spesso si utilizzano piu' metriche... ma basta effettuare i corretti GROUP BY per ottenere il risultato corretto. La macro Grafana $__timeGroup raggruppa i valori della colonna sul corretto valore temporale.

Varie ed eventuali

Un elenco piu' completo delle funzionalita' di Grafana e' riportato nel sito ufficiale Grafana. Un elenco piu' completo delle funzionalita' di MySQL e' riportato nel sito ufficiale MySQL.

Sempre aggiornato sui rilasci delle release MySQL e di Grafana e' il documento: Your server stinks!

2MyMSQL dashboard ha un numero elevato di cloni... scegliete l'originale! 2MySQL Grafana Dashboard clones


Titolo: Dashboard Grafana per MySQL
Livello: Avanzato (3/5)
Data: 31 Ottobre 2018 🎃 Halloween
Versione: 1.0.2 - 14 Febbraio 2020 ❤️ San Valentino
Autore: mail [AT] meo.bogliolo.name