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.
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.
[grafana] name=grafana baseurl=https://packages.grafana.com/oss/rpm repo_gpgcheck=1 enabled=1 gpgcheck=1 gpgkey=https://packages.grafana.com/gpg.key sslverify=1 sslcacert=/etc/pki/tls/certs/ca-bundle.crt
Attenzione: la configurazione che segue, ancora riportata su molti siti, non e' piu' valida [NdA 2019-01]. packagecloud.io non e' piu' aggiornato:
[grafana] name=grafana baseurl=https://packagecloud.io/grafana/stable/el/7/$basearch repo_gpgcheck=1 enabled=0 gpgcheck=1 gpgkey=https://packagecloud.io/gpg.key https://grafanarel.s3.amazonaws.com/RPM-GPG-KEY-grafana sslverify=1 sslcacert=/etc/pki/tls/certs/ca-bundle.crt
Sulle versioni precedenti di RHEL l'installazione e' analoga [NdA ovviamente va cambiata la baseurl] mentre per l'avvio del servizio i comandi sono:
Vogliamo installare su Docker?
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 =
Sono molteplici i plugin grafici aggiuntivi di Grafana che e' possibile installare con un semplice comando. Ecco come installare i miei preferiti:
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:
Maggiori dettagli sono riportati nella documentazione ufficiale.
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';
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!
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):
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
Data:
31 Ottobre 2018 🎃 Halloween
Versione: 1.0.3 - 14 Febbraio 2021 ❤️ San Valentino
Autore: mail [AT] meo.bogliolo.name