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.

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

Vogliamo installare su Docker?

docker pull grafana/grafana mkdir graf_data ID=$(id -u) docker run -d --user $ID --volume "$PWD/graf_data:/var/lib/grafana" -p 3000:3000 --name grafana grafana/grafana

E su Mac? Facile: brew install grafana; brew services start grafana

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 =

2MySQL Grafana Simple Dashboard - MySQL Plugin Sono molteplici i plugin grafici 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 grafana-cli plugins install vertamedia-clickhouse-datasource service grafana-server restart

La gestione dei Plugin si effettua in modo molto semplice con Grafana... per accedere a basi dati esterne vanno installati i relativi plugin: ad esempio quello per la connessione MySQL e poi configurare le connessioni come nella figura a destra. Naturalmente ogni database ha i suoi parametri specifici... ma tipicamente sono host, port, user e password!

Un'importante avvertenza sui Plugin e' che non vengono necessariamente aggiornati quando si aggiorna Grafana: vanno aggiornati a parte!
Il controllo su quali Plugin sono disponibili aggiornamenti si effettua in modo semplice visualizzando l'elenco in forma di tabella:

Mentre l'aggiornamento e' molto facile:

grafana-cli plugins update grafana-piechart-panel service grafana-server restart

Maggiori dettagli sono riportati nella documentazione ufficiale.

Dashboard 2MySQL

Vediamo ora come configurare una dashboard. Ve ne sono molte disponibili sul sito ufficiale che possono essere scaricate e modificare a piacere. Come esempio utilizzeremo 2MySQL Simple Dashboard perche'...

Innanzi tutto vanno collezionati i dati sull'utilizzo della base dati MySQL da monitorare. Per fare questo basta lanciare lo script my2Collector.

E' opportuno creare un'utenza dedicata sul DB MySQL di MySQL per l'accesso da 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';

Grafana import Ed infine bisogna installare la Dashboard 2MySQL. Basta farlo dal menu principale come da figura a destra: Create --> Import!

Nell'installazione vengono richieste le credenziali per l'accesso al DB appena definite...

A questo punto la dashboard 2My Dash e' installata ed e' possibile utilizzarla!

2MySQL Grafana Simple Dashboard

L'apprendista stregone

Partendo da 0 o utilizzando una dashboard importata 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.

Oltre a database SQL possono essere utilizzati in Grafana molteplici NoSQL ed altre sorgenti di dati. L'elenco ufficiale dei data source supportati e': Alertmanager, AWS CloudWatch, Azure Monitor, Elasticsearch, Google Cloud Monitoring, Graphite, InfluxDB, Loki, Microsoft SQL Server (MSSQL), MySQL, OpenTSDB, PostgreSQL [NdA compresa l'estensione TimescaleDB], Prometheus, Jaeger, Zipkin, Tempo, Testdata. Inoltre dalla versione 3 e' possibile installare quasi un centinaio di Plugin Data Source (eg. ClickHouse) [NdA un certo numero di data source (una decina) e' disponibile solo con l'edizione Enterprise di Grafana (eg. Oracle, MongoDB)].

La generazione delle query nei pannelli e' comunque molto semplice e guidata qualunque sia la sorgente dati (eg. InfluxDB): InfluxDB query in Grafana

Varie ed eventuali

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

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


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