Panoramica dell'Infrastruttura
Nell'era centrata sui container, per integrare la mia istanza SQL Server su Docker (articoli precedenti ) ho esaminato soluzioni di monitoraggio containerizzate e ho scelto Grafana come primo candidato. Spoiler: tutto diventa semplice una volta capito come funzionano queste cose, il che potrebbe non essere banale per un "Windows Guy" come me.
Elementi Principali
-
Grafana: Una soluzione open source di analisi e monitoraggio per ogni tipo di database. Grafana consente di interrogare, visualizzare, impostare allarmi e capire le metriche ovunque siano memorizzate. Puoi creare, esplorare e condividere dashboard con il tuo team, promuovendo una cultura basata sui dati.
-
InfluxDB: Un database di serie temporali programmabile e performante, con un'API comune tra le offerte open source, cloud e enterprise.
-
Telegraf: Un agente server basato su plugin per la raccolta e la segnalazione di metriche. Telegraf raccoglie e invia dati di ogni tipo da database, sistemi e sensori IoT.
Panoramica del Processo
Telegraf si connette alle istanze SQL Server e inizia a leggere dalle DMV (Dynamic Management Views), senza richiedere o creare oggetti aggiuntivi. Il modo in cui i dati vengono raccolti è definito da Telegraf, che è un componente per InfluxDB con oltre 170 plugin per inglobare dati dalle fonti più disparate, inclusi SQL Server.
Vantaggi di Telegraf + InfluxDB:
- I componenti di monitoraggio dell'istanza sono containerizzati, quindi nessuna modifica influisce sull'istanza SQL.
- Gli stessi container possono essere utilizzati per monitorare più istanze SQL (o uno degli altri 170+ componenti che Telegraf può leggere).
- Dashboards pronti all'uso su Grafana, evitando la necessità di reinventare la ruota.
Alternativa Considerata:
L'uso del primoresponderskit per salvare i dati storici delle DMV direttamente sull'istanza e generare query personalizzate per Grafana, eliminando i container InfluxDB ma aumentando la complessità delle interrogazioni.
Implementazione
Passo 1: Preparazione dell'ambiente Docker per SQL Server 2019
docker pull mcr.microsoft.com/mssql/server:2019-latest
docker network create localnet
docker run -v sqlvolume:/var/opt/mssql -v D:\SQL:/sql -i --name sql2019 --net localnet -p 1433:1433 -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=QuestaÈUnaPassword,ok?" -e MSSQL_AGENT_ENABLED=True -d mcr.microsoft.com/mssql/server:2019-latest
docker start sql2019
Passo 2: Creazione di una Rete Interna per i Container e Abilitazione dell'Agente SQL
docker network create localnet
-e MSSQL_AGENT_ENABLED=True
Passo 3: Configurazione di Grafana
docker volume create grafana-storagedocker
run -d -p 3000:3000 --name=grafana --net localnet -v grafana-storage:/var/lib/grafana grafana/grafana
Passo 4: Pull e Configurazione di InfluxDB
docker run -p 8086:8086 --name=influxdb --net localnet -v D:\SQL\Influx:/var/lib/influxdb influxdb
Passo 5: Pull e Configurazione di Telegraf
docker run --rm telegraf --net localnet telegraf config > telegraf.conf
Modificare telegraf.conf
con l'indirizzo di InfluxDB e SQL Server, quindi avviare il container Telegraf:
docker run -v D:\SQL\telegraf.conf:/etc/telegraf/telegraf.conf:ro --name=telegraf --net localnet telegraf
Passo 6: Configurazione Finale di Grafana
Aprire il browser, accedere a localhost:3000
, utilizzare le credenziali predefinite (admin/admin) e aggiungere InfluxDB come sorgente dati.
Utilizzo di Grafana
Se tutto è stato eseguito correttamente, aprendo le nuove dashboard importate, i dati inizieranno a comparire dopo pochi secondi. Ogni pannello può essere modificato, spostato o rimosso, e è possibile creare nuovi pannelli.
L'interrogazione di InfluxDB è semi-automatica grazie al menu a discesa nell'editor di query. Ora, le possibilità sono limitate solo dalla tua immaginazione!
Concludendo, l'utilizzo di Grafana su Docker con InfluxDB e Telegraf per monitorare il tuo SQL Server rappresenta un approccio flessibile e containerizzato che offre numerosi vantaggi in termini di gestione, scalabilità e personalizzazione delle dashboard. Seguendo i passi sopra descritti, potrai facilmente implementare questa soluzione nel tuo ambiente Docker, migliorando l'efficienza e la facilità di monitoraggio delle tue istanze SQL Server.