10.10. DataSource Storage Backends

10.10.1. Introduzione

La storicizzazione dei dati raccolti tramite datasource e' affidata ad un modulo di Sanet che si occupa di creare e aggiornare il database delle serie storiche.

Le modalita' con cui Sanet crea e aggiorna le serie storiche dipende dal backend in uso.

Per specificare il backend da usate (e i suoi parametri di funzionamento) si rimanda a Configurazione del datasource backend.

10.10.1.1. Il parametro storage spec

Per ogni datasource e' possibile specificare tramite il parametro storage-spec parametrizzazioni aggiuntive che influenzano il comportamento del backend usato.

Per sapere come configurare il parametro storage-spec bisogna consultare la documentazione specificia del backend in uso. Si rimanda a Moduli di backend.

Note

se si specificano parametrizzazioni non valide per il backend usato, semplicemente vengono ignorate.

10.10.2. Configurazione del datasource backend

Il modulo di backend viene configurato da file settings tramite i parametri:

  • DATASOURCE_STORAGE_HANDLER
    • modulo python da caricare per connettesi al backend.

  • DATASOURCE_STORAGE_PARAMS
    • dizionario con parametri di configurazione che dipendono dal modulo caricato.

Esempio:

DATASOURCE_STORAGE_HANDLER = 'core.api.datasource.rrd.RRDTOOLDataSourceStore'

DATASOURCE_STORAGE_PARAMS  = {
        "storage_base_dir"          : '/var/lib/rrds',
        rrdcached_flush_before_read": True
}

10.10.3. Moduli di backend

10.10.3.1. RRDTOOL DataSource Store module

Per storicizzare i dati dei datasource tramite RRDTOOL e' necessario usare il modulo:

DATASOURCE_STORAGE_HANDLER = 'core.api.datasource.rrd.RRDTOOLDataSourceStore'

10.10.3.1.1. Configurazione modulo

I parametri di configurazione del modulo sono:

Parametro

Descrizione

storage_base_dir

Directory dove salvare i file RRD

heartbeat_factor

L'heartbeat dei file RRD viene alcolato moltiplicando il minperiod con questo valore.

rrdcached_flush_before_read

Se impostato a true, qualunque operazione di lettura dati causa un flush preventivo del demone RRDCACHED

max_retention_interval

Se impostato, intervallo massimo di retention, espresso in secondi. Se non specificato, vale la retention configurata nel parametro DATA_RETENTION_MAX_DAYS.

Esempio:

DATASOURCE_STORAGE_PARAMS  = { 
        "heartbeat_factor"       : 10  ,   # 10 volte il "minperiod"
        "max_retention_interval" : 180 ,   # ~sei mesi 
}

10.10.3.1.2. Allocazione storage su filesystem

Per ogni datasource definito nel sistema viene creato un file RRD.

La dimensione di un file RRD e' statica e dipende dal minperiod e dalla retention massima configurata.

Con una rentention di un anno questi sono le stime di occupazione di un file RRD

minperiod

Dimensione file RRD

5 s (5)

~50.5 Mb

10 s (10)

~25.2 Mb

20 s (20)

~12.6 Mb

30 s (30)

~8.4 Mb

1 m (60)

~4.2 Mb (DEFAULT)

3 m (180)

~1.4 Mb

5 m (300)

~841 Kb

10 m (600)

~421 Kb

30 m (1800)

~140 Kb

1 h (3600)

~70 Kb

6 h (21600)

~12 Kb

12 h (43200)

~6 Kb

24 h (86400)

~3 Kb

Se viene modificata la retention o il minperiod associato ad un datasource e' necessario ridimensionare i file allocati con il comando fix_ds_storage_spec.

In fase di riallocazione viene modificato:

  • il parametro step

  • il numero di entry/row dell'RRA usato per memorizzare i dati storici.

10.10.3.1.3. Opzioni di configurazione avanzate dei datasource (storage-spec)

Il parametro storage-spec (nella sezione datasource di un datagroup-template) puo' essere utilizzato per specificare parametri specifici di RRDTOOL non gestibili direttamente da Sanet.

Esempio:

datagroup-template test
        ...
        datasource ds1
                ...
                storage-spec "...."    <-------
                ...
        exit
        ...
exit

Danger

quando viene modificato il parametro storage-spec (in un template o in una configurazione specifica), deve essere effettuata una operazione di aggiornamento dei file RRD. NON e' predicibile quanto tempo sia necessaio a RRDTOOL per aggiornare tutti i file RRD potenzialmente coinvolti da questa configurazione.

Danger

La modifica della configurazione di Sanet e l'aggioranmento dei file RRD non sono operazioni atomiche e/o transazionali. In caso di errori di aggiornamento dei file RRD, Sanet non e' in grado di garantire che alcuni file siano stati gia' modificati con una configurazione inconsistente rispetto a quanto specificato nel database di configurazione di Sanet.

La configurazione avviene impostato una stringa con la seguente sintassi:

<option>=<value> <option>=<value> ...

I parametri che e' possibile specificare sono i seguenti:

Nome

Tipo

Default

Descrizione

DST

stringa

I valori ammessi sono: COUNTER, DERIVE. Questo parametro viene considerato solo se il datasource e' impostato di tipo COUNTER (gauge = false).

min

numero

Valore minimo valido per la memorizzazione. Se il valore da salvare e' inferiore, viene storicizzato il valore nullo (NaN).

max

numero

Valore massimo valido per la memorizzazione. Se il valore da salvare e' superiore, viene storicizzato il valore nullo (NaN).

max_retention_interval

numero

Intervallo massimo di retention che sovrascrive il default configurato a livello globale.

Esempio:

datagroup-template test
        ...
        datasource ds1
                ...
                storage-spec "DST=DERIVE min=0 max=5000000000"
                ...
        exit
        ...
exit

10.10.3.1.4. Debugging

E' possibile abilitare il logging del modulo aggiungendo al file di configurazione (settings.py) la configurazione seguente:

LOGGING['loggers']['sanet.core.api.datasource.rrd'] = { 'handlers' : ['console'], 'level': logging.DEBUG } 

10.10.3.2. Null DataSource Store module

Questo modulo non salva e non restituisce dati.

Il suo utilizzo e' prevalentemente a scopo di debug.

10.10.3.2.1. Configurazione modulo

Per utilizzarlo bisogna impostare nel file di configurazione di Sanet (settings.py):

DATASOURCE_STORAGE_HANDLER = 'core.api.datasource.nullstore.NullDataSourceStore'

Note

Il parametro DATASOURCE_STORAGE_PARAMS viene completamente ignorato

Il modulo non e' parametrizzabile.

Note

Il parametro di configurazione DATASOURCE_STORAGE_PARAMS viene completamente ignorato.