La precisione dell’orario di sistema è fondamentale per la coerenza nei log, la sicurezza, la sincronizzazione dei processi distribuiti e il corretto funzionamento di molti servizi IT.
Per questo motivo, monitorare l’efficienza e l’affidabilità di un server NTP è una buona pratica in ogni infrastruttura professionale.
In questo articolo ti mostreremo come creare un sistema di monitoraggio completo per un server NTP basato su Chrony, sfruttando la potenza di Telegraf, InfluxDB e Grafana.
Partiremo dall’installazione e configurazione degli strumenti necessari, per poi arrivare alla visualizzazione in tempo reale delle metriche più importanti, come l’offset di sincronizzazione, la frequenza, il ritardo e la qualità delle fonti NTP. Alla fine otterrai una dashboard Grafana efficace e facilmente estendibile, utile per rilevare anomalie e garantire la precisione dell’orologio di sistema nel tempo.
PREREQUISTI
Server con Chrony installato e configurato (SRV-CHRONY.TEST.LAB)
Installazione e Configurazione dell’NTP Server Chrony su Ubuntu Server 24.04
Server con Grafana installato (SRV-GRAFANA.TEST.LAB)
Installazione e Configurazione base di Grafana su Ubuntu Server 24.04
CONFIGURAZIONI DA FARE SUL SERVER GRAFANA (SRV-GRAFANA.TEST.LAB)
Installare InflusxDB con il comando:
0 |
apt install influxdb
|
Installare il client di InflusDb con il comando:
0 |
apt install influxdb-client
|
CREAZIONE DEL DATABASE IN INFLUXDB
Accedere al DB con il comando:
0 |
influx |
Quindi creare il database con il seguente comando:
0 |
CREATE DATABASE telegraf
|
CREAZIONE DELLE UTENZE SU INFLUXDB
Accedere al DB con il comando:
0 |
influx |
Quindi creare le utenze seguenti con i comandi:
0
1
2
|
CREATE USER "influxadmin" WITH PASSWORD 'Password' WITH ALL PRIVILEGES
CREATE USER "influxread" WITH PASSWORD 'Password'
CREATE USER "influxwrite" WITH PASSWORD 'Password'
|
NOTA BENE: al posto di Password inserire la propria password
Concedere alle utenze un accesso adeguato al database (che in questo caso è chiamato telegraf).
0
1
|
GRANT READ ON "telegraf" TO "influxread"
GRANT WRITE ON "telegraf" TO "influxwrite"
|
Infine abilitare il plug-in di input HTTP e l’autenticazione.
Ciò comporta la modifica del file /etc/influxdb/influxdb.conf.
Editare il file con il comando:
0 |
sudo nano /etc/influxdb/influxdb.conf
|
All’interno del file individuare le seguenti righe nella sezione [http]:
0
1
2
|
[http]
# Determines whether HTTP endpoint is enabled.
# enabled = true
|
Quindi sostituirle con le seguenti:
0
1
2
|
[http]
# Determines whether HTTP endpoint is enabled.
enabled = true
|
Individuare le seguenti righe
0
1
|
# Determines whether user authentication is enabled over HTTP/HTTPS.
# auth-enabled = false
|
Quindi sostituirle con le seguenti:
0
1
|
# Determines whether user authentication is enabled over HTTP/HTTPS.
auth-enabled = true
|
Salvare e chiudere il file di configurazione
Per implementare la modifica, è sufficiente riavviare InfluxDB con il comando:
0 |
systemctl restart influxdb
|
CONFIGURAZIONI DA FARE SUL SERVER NTP CHRONY (SRV-CHRONY.TEST.LAB)
La prima cosa da fare sul server Chrony è quella di installare Telegraf con i seguenti comandi:
0
1
2
3
4
5
6
|
curl -fsSL https://repos.influxdata.com/influxdata-archive_compat.key -o /etc/apt/keyrings/influxdata-archive_compat.key
echo "deb [signed-by=/etc/apt/keyrings/influxdata-archive_compat.key] https://repos.influxdata.com/ubuntu stable main" | tee /etc/apt/sources.list.d/influxdata.list
apt update
apt -y install telegraf
|
Successivamente è necessario apportare alcune modifiche alla configurazione di Telegraf.
Per impostazione predefinita, estrae le configurazioni da una sottocartella, il che lo rende utile per mantenere le cose in ordine.
Creare la cartella con il comando:
0 |
mkdir -p /etc/telegraf/telegraf.d
|
Quindi assegnare i permessi all’utente telegraf con il comando:
0 |
chown telegraf:telegraf /etc/telegraf/telegraf.d
|
A questo punto indicare a Telegraf di prendere input da Chrony utilizzando l’utilità chronyc.
Telegraf include un plugin per Chrony e basta solo abilitarlo.
Per fare ciò creare un file chiamato /etc/telegraf/telegraf.d/chrony.conf con il comando:
0 |
sudo nano /etc/telegraf/telegraf.d/chrony.conf
|
e aggiungere il seguente contenuto:
0
1
2
3
|
# Get standard chrony metrics, requires chronyc executable.
[[inputs.chrony]]
## If true, chronyc tries to perform a DNS lookup for the time server.
# dns_lookup = false
|
Salvare e chiudere il file di configurazione.
Per ottenere alcune statistiche di base del sistema abilitare il plugin di sistema creando un altro file chiamato /etc/telegraf/telegraf.d/system.conf con il comando:
0 |
sudo nano /etc/telegraf/telegraf.d/system.conf
|
con il seguente contenuto:
0
1
2
|
# Read metrics about system load & uptime
[[inputs.system]]
# no configuration
|
Salvare e chiudere il file di configurazione.
Assegnare ad entrambe i files la proprietà dell’utente telegraf e impostare le autorizzazioni a 640 con i seguenti comandi:
0
1
2
3
4
|
sudo chown telegraf:telegraf /etc/telegraf/telegraf.d/system.conf
sudo chmod 640 /etc/telegraf/telegraf.d/system.conf
sudo chown telegraf:telegraf /etc/telegraf/telegraf.d/chrony.conf
sudo chmod 640 /etc/telegraf/telegraf.d/chrony.conf
|
Ora che Telegraf è pronto a raccogliere le misure, dobbiamo dirgli dove inviarle. Per questo dobbiamo configurare un plugin di output per InfluxDB.
Creare un file chiamato /etc/telegraf/telegraf.d/outputs.conf con il comando:
0 |
sudo nano /etc/telegraf/telegraf.d/outputs.conf
|
inserire il seguente contenuto:
0
1
2
3
4
5
6
7
8
9
|
[[outputs.influxdb]]
urls = ["http://SRV-GRAFANA.TEST.LAB:8086"]
insecure_skip_verify = true
database = "telegraf"
skip_database_creation = true
precision = "s"
timeout = "5s"
username = "influxwrite"
password = "Password"
retention_policy = ""
|
Salvare e chiudere il file di configurazione
ATTENZIONE: Ovviamente questo contenuto deve essere personalizzato per adattarsi all’ambiente con le informazioni inserite in precedenza
Abilitare e avviare il servizio Telegraf con i seguenti comandi:
0
1
|
systemctl enable telegraf
systemctl start telegraf
|
VERIFICA DELLE MISURAZIONI SU INFLUXDB
Collegarsi al server Grafana quindi eseguire il comando:
0 |
influx |
Eseguire il comando:
0 |
auth |
Quindi inserire username e password dell’utente admin creato in precedenza
0
1
|
influxadmin
Password
|
Utilizzare il database telegraf con il comando:
0 |
user telegraf
|
Dovremmo visualizzare il seguente output:
0 |
Using database telegraf
|
Quindi eseguire la seguente select:
0 |
SELECT * FROM "chrony" ORDER BY time DESC LIMIT 10
|
Se è tutto OK e il server Chrony invia i dati a Inlfuxdb dovremmo visualizzare un output simile al seguente:
0
1
2
3
4
5
6
7
8
9
10
11
12
|
name: chrony
time frequency host last_offset leap_status reference_id residual_freq rms_offset root_delay root_dispersion skew stratum system_time update_interval
---- --------- ---- ----------- ----------- ------------ ------------- ---------- ---------- --------------- ---- ------- ----------- ---------------
1747428640000000000 -9.064045906066895 srv-chrony -0.00011213588004466146 normal A29FC801 -0.002257004613056779 0.0006281014648266137 0.024802299216389656 0.0006954112905077636 0.21549469232559204 4 0.00015123654156923294 1035.757568359375
1747428630000000000 -9.064045906066895 srv-chrony -0.00011213588004466146 normal A29FC801 -0.002257004613056779 0.0006281014648266137 0.024802299216389656 0.0006832343060523272 0.21549469232559204 4 0.00015171772975008935 1035.757568359375
1747428620000000000 -9.064045906066895 srv-chrony -0.00011213588004466146 normal A29FC801 -0.002257004613056779 0.0006281014648266137 0.024802299216389656 0.0006710554007440805 0.21549469232559204 4 0.0001521989906905219 1035.757568359375
1747428610000000000 -9.064045906066895 srv-chrony -0.00011213588004466146 normal A29FC801 -0.002257004613056779 0.0006281014648266137 0.024802299216389656 0.0006588779506273568 0.21549469232559204 4 0.0001526801788713783 1035.757568359375
1747428600000000000 -9.064045906066895 srv-chrony -0.00011213588004466146 normal A29FC801 -0.002257004613056779 0.0006281014648266137 0.024802299216389656 0.0006467006751336157 0.21549469232559204 4 0.00015316138160414994 1035.757568359375
1747428590000000000 -9.064045906066895 srv-chrony -0.00011213588004466146 normal A29FC801 -0.002257004613056779 0.0006281014648266137 0.024802299216389656 0.0006345236906781793 0.21549469232559204 4 0.00015364256978500634 1035.757568359375
1747428580000000000 -9.051680564880371 srv-chrony -7.729441335868614e-7 normal A29FC801 0.00010907016257988289 0.0006610210984945297 0.025440435856580734 0.0023356021847575903 0.26945939660072327 4 0.00004195214933133684 1032.426513671875
1747428570000000000 -9.051680564880371 srv-chrony -7.729441335868614e-7 normal A29FC801 0.00010907016257988289 0.0006610210984945297 0.025440435856580734 0.0023229047656059265 0.26945939660072327 4 0.00004198999886284582 1032.426513671875
1747428560000000000 -9.051680564880371 srv-chrony -7.729441335868614e-7 normal A29FC801 0.00010907016257988289 0.0006610210984945297 0.025440435856580734 0.002310209907591343 0.26945939660072327 4 0.00004202784111839719 1032.426513671875
1747428550000000000 -9.051680564880371 srv-chrony -7.729441335868614e-7 normal A29FC801 0.00010907016257988289 0.0006610210984945297 0.025440435856580734 0.0022975143510848284 0.26945939660072327 4 0.000042065687011927366 1032.426513671875
|
CONFIGURAZIONE DEL DATA SOURCE SU GRAFANA
Collegarsi alla Dashboard di Grafana richiamando il link:
http://SRV-GRAFANA.TEST.LAB:3000
Dal menù a sinistra cliccare su Data Sources
Cliccare su Add new data source
Selezionare InfluxDB
Inserire le seguenti configurazioni:
URL: inserire l’URL del server Grafana. Nel mio caso Grafana e InfluxDB sono sullo stesso server per quello ho inserito localhost
Basic auth: abilitare l’autenticazione basic
Basic Auth Details: inserire le credenziali di in influxadmin create in precedenza
Database: inserire il nome del database creato in InfluxDB
User: Inserire l’utente influxwrite creato in precedenza
Password: Inserire la password dell’utente influxwrite
Cliccare su Save & Test
Se è andato tutto a buon fine dovremmo visualizzare il messaggio mostrato nell’immagine sovrastante
A questo punto cliccare su Data sources e in corrispondenza di InfluxDB cliccare su Build a Dashboard come mostrato nell’immagine sovrastante
Da questa schermata è possibile iniziare la creazione della nostra Dashboard da zero oppure importandola da un file .json scaricato da grafana.com
Dopo un po di configurazioni il risultato che potreste ottenere è quello mostrato nell’immagine sovrastante
0 commenti