2.3. RRDCached

2.3.1. Introduzione

Sanet3 utilizza i file RRD come sistema di storage per mantenere lo storico dei "datasource".

RRDCached e' un demone che permette di ottimizzare l'accesso in scrittura/lettura ai file RRD.

L'utilizzo di RRDCached puo' essere attivato/disabilitato in qualunque momento.

2.3.2. Installazione

2.3.2.1. Sistemi debian

Eseguire:

apt-get install rrdcached

2.3.3. Configurazione permessi di lettura di Apache sul socket di RRDCached

Se il demone Apache e' in esecuzione con utente/gruppo diverso da root, per poter far comunicare correttamente l'interfaccia web di Sanet con RRDCACHED e' necessario configurare i permessi su socket specificato con RRDCACHED_ADDRESS.

2.3.3.1. Sistemi debian

Creiamo il gruppo "rrdcached":

groupadd rrdcached

Assegnamo all'utente "www-data" (Apache 2) gruppo "rrdcached"

usermod -a -G rrdcached www-data

2.3.4. Configurazione di RRDCACHED

2.3.4.1. Sistemi debian

Avvertimento

In alcuni sistemi (es: Debian) la configurazione di default (/etc/rrdcached) limita l'accesso al filesystem con le opzioni "-b" e "-B". Questi parametri sono incompatibili con Sanet.

OPTS="-l unix:/var/run/rrdcached.sock"
OPTS="$OPTS -j /var/lib/rrdcached/journal/ -F"
OPTS="$OPTS -b /var/lib/rrdcached/db/ -B"        <-----------

Modificate il file:

/etc/default/rrdcached

cosi':

cat >> /etc/default/rrdcached <<ENDOFFILE

#
# RRDCached 1.7 per debian 10
#
JOURNAL_PATH=""
SOCKFILE=""
BASE_PATH=""
BASE_OPTIONS=""
BASE_OPTIONS="\$BASE_OPTIONS -s rrdcached"
BASE_OPTIONS="\$BASE_OPTIONS -l unix:/var/run/rrdcached.sock -F"
BASE_OPTIONS="\$BASE_OPTIONS -t 2"
BASE_OPTIONS="\$BASE_OPTIONS -z 3600 -w 3600 -f 7200"

ENDOFFILE

Riavviate rrdcached

/etc/init.d/rrdcached restart

Verifica esecuzione:

apt-get install socat
echo 'STATS' | socat - unix:/var/run/rrdcached.sock

L'output dovrebbe essere qualcosa del tipo:

9 Statistics follow
QueueLength: 0
UpdatesReceived: 0
FlushesReceived: 0
UpdatesWritten: 0
DataSetsWritten: 0
TreeNodesNumber: 0
TreeDepth: 0
JournalBytes: 0
JournalRotate: 0

2.3.5. Configurazione del sistema

Per utilizzare correttamente RRDCACHED e' necessario che sia valorizzata correttamente la variabile d'ambiente:

RRDCACHED_ADDRESS

Esempio:

export RRDCACHED_ADDRESS='unix:/var/run/rrdcached.sock'

Pericolo

Questo garantisce che qualunque accesso ai file RRD tramite Sanet o direttamente con i tool di RRDTOOL passi attraverso il demone rrdcached.

2.3.5.2. Sistemi debian

Aggiungere il file:

/etc/profile.d/rrdcached.sh

cosi':

cat > /etc/profile.d/rrdcached.sh <<ENDOFFILE
export RRDCACHED_ADDRESS='unix:/var/run/rrdcached.sock'
ENDOFFILE

chmod 755 /etc/profile.d/rrdcached.sh

Pericolo

Questo e' fondamentale per assicurare che qualunque script eseguito da utenti normali, per accedere ai file RRD acceda corramente a RRDCached.

Avvertimento

Questa configurazione non gestisce l'utente "root".

Aggiungere al file

/etc/environment

cosi':

cat >> /etc/environment <<ENDOFFILE
RRDCACHED_ADDRESS='unix:/var/run/rrdcached.sock'
ENDOFFILE

2.3.5.3. Environment di Cron

Se sanet viene configurato per essere ravviato tramite comandi in crontab, assicurarsi che all'inizio della configurazione di cron compia la variable RRDCACHED_ADDRESS.

Avvertimento

Questo e' fondamentale per assicurare che qualunque script esterno a Sanet che deve accedere ai file RRD acceda corramente a RRDCached.

2.3.5.4. Environment di Apache

2.3.5.4.1. Sistemi debian

Aggiungere al file:

/etc/apache2/envvars

la configurazione:

cat >> /etc/apache2/envvars <<ENDOFFILE
export RRDCACHED_ADDRESS=unix:/var/run/rrdcached.sock
ENDOFFILE

Riavviare apache:

apache2ctl restart

Pericolo

La presenza della variabile d'ambiente RRDCACHED_ADDRESS e' fondamentale per assicurare che qualunque applicazione WEB che deve accedere ai file RRD acceda corramente ai file tramite il demone RRDCached.

2.3.6. Configurazione di Sanet

2.3.6.1. RRDCACHED_ADDRESS

E' FONDAMENTALE che il parametro di configurazione DATASOURCE_STORAGE_PARAMS contenga la chiave RRDCACHED_ADDRESS valorizzata:

DATASOURCE_STORAGE_PARAMS.update({
        "RRDCACHED_ADDRESS": "unix:/var/run/rrdcached.sock"
})

Esempio:

cat >> /usr/local/sanet/conf/settings.py <<ENDOFFILE
DATASOURCE_STORAGE_PARAMS.update({
        "RRDCACHED_ADDRESS": "unix:/var/run/rrdcached.sock"
})
ENDOFFILE

Pericolo

Se la variabile d'ambinete RRDCACHED_ADDRESS e la chiave DATASOURCE_STORAGE_PARAMS["RRDCACHED_ADDRESS"] sono valorizzate diversamente, la CLI e altri componenti di Sanet si arrestano immediatamente dopo il lancio per prevenire eventuali comportamenti imprevedibili.

2.3.6.2. FLUSH automatico

E' possibile configurare Sanet per obbligare RRDCACHED a fare flush dei dati prima di effettuare una operazione di fetch dai file RRD.

Mettere nel file:

{SANET_INSTALL_DIR}/conf/settings.py

Aggiungere:

DATASOURCE_STORAGE_PARAMS.update({
        "rrdcached_flush_before_read": True
})

Esempio:

cat >> /usr/local/sanet/conf/settings.py <<ENDOFFILE
DATASOURCE_STORAGE_PARAMS.update({
        "rrdcached_flush_before_read": True
})
ENDOFFILE

Nota

se la variabile d'ambiente RRDCACHED_ADDRESS non e' configurata nell'environment, la configurazione precedente viene ignorata.

Avvertimento

RRDCACHED puo' essere configurato per effettuare un journaling dei dati e garantire che dati bufferizzati non vengano persi in caso di terminazione/riavvio del processo. L'opzione per attivare il journaling (-j) vanifica in parte l'effetto del flushing dei dati.

2.3.7. Riavvio processi coinvolti

Per rendere effettive le configurazioni e' necessario riavviate tutti i processi in esecuzione che hanno bisogno dell'enviroment corretto:

cd {{SANET_INSTALL_DIR}}
./script/server/sanetd restart
apachectl restart

2.3.8. Statistiche di RRDCached

E' possibile interagire con RRDCached attraverso comandi inviati sul suo unix socket con il comando socat:

Importante

Su sistemi Debian serve installare il pacchetto "socat"

apt-get install socat

Interrogare RRDCACHED:

echo 'STATS' | socat - unix:/var/run/rrdcached.sock

Dovreste vedere in output il valore UpdatesReceived crescere con il tempo:

9 Statistics follow
QueueLength: 0
UpdatesReceived: 776     <--------------- UPDATE RICEVUTI
FlushesReceived: 7       <--------------- FLUSH RICEVUTI
UpdatesWritten: 1
DataSetsWritten: 1       <--------------- WRITE SU DISCO
TreeNodesNumber: 263
TreeDepth: 10
JournalBytes: 114393
JournalRotate: 0