Domanda

Sono interessato a sapere se esiste qualche alternativa a rrdtool per la registrazione dei dati delle serie temporali. Sto cercando qualcosa che può scalare per un gran numero di dispositivi da monitorare.

Da quanto ho letto su questo argomento, rrdtool è associato a I / O quando lo si colpisce con grandi quantità di dati. Dal momento che immagino che questo si ridimensioni a un numero molto elevato di dispositivi da monitorare, sono curioso di sapere se esiste qualche alternativa che non si strozzerebbe con l'I / O. Preferibile basato su SQL, ma non necessariamente.

Grazie

È stato utile?

Soluzione

Se la prestazione I / O è la preoccupazione principale, allora vuoi esaminare qualcosa come rrdcached che è disponibile nella versione corrente (1.4) di RRDTools.

L'overhead I / O non è una funzione dei dati scritti, dopo tutto ogni valore di 8 byte per origine dati. La larghezza di banda I / O deriva dal fatto che un intero settore (in genere 4k) deve essere letto prima di essere scritto. Improvvisamente per scrivere 8 byte hai letto / scritto 8k byte.

Il rrdcached riunisce tutte queste scritture insieme, quindi quando un RRD viene aggiornato il rapporto tra dati utili (valori DS effettivi) e dati sprecati (i byte di riserva nel settore) viene ridotto.

Tutti gli RRDTools funzioneranno automaticamente con rrdcached quando lo rileveranno in esecuzione (tramite una variabile d'ambiente). Ciò consente loro di attivare vampate quando necessario, ad esempio durante la generazione di un grafico dai dati.

Mentre si passa a una soluzione basata su SQL può essere utile considerare l'I / O aggiuntivo che sarà richiesto per supportare SQL. Considerando che non si tende a utilizzare i dati RRD in quel tipo di schema di accesso casuale, un database è un po 'una mazza per il problema. Rimanendo con RRDTool manterrai l'accesso a tutto l'ecosistema di strumenti che comprendono e possono lavorare con i file, il che è utile soprattutto se ne hai già familiarità.

Altri suggerimenti

Esistono alcuni database di serie temporali che hanno alta disponibilità e / o scalabilità come obiettivi.

Forse dai un'occhiata a

Un mio amico ha lavorato un po 'di tempo fa su un back-end SQL per archiviare i dati round robin: http: // rrs .decibel.org

Tuttavia, sospetto che, poiché stai chiedendo informazioni su " dispositivi da monitorare " ;, potresti essere alla ricerca di una soluzione più completa.

Se le operazioni di I / O al secondo rappresentano il tuo principale collo di bottiglia e stai utilizzando Linux, c'è un trucco semplice che ti costa solo memoria. Usa un mount tmpfs per mettere in scena le tue scritture RRD.

Tutte le operazioni di I / O verranno eseguite in memoria e non incorreranno in alcuno dei colli di bottiglia riscontrati nell'esecuzione di I / O su disco (ciò è persino più veloce dell'utilizzo di dischi a stato solido). È quindi possibile utilizzare un processo cron e rsync per copiare su disco solo i RRD modificati una volta ogni pochi minuti.


Crea le directory

bash-4.2# mkdir /mnt/rrd-reads
bash-4.2# mkdir /mnt/rrd-writes

Crea un filesystem RAM massimo di 500 MB con le opzioni appropriate

bash-4.2# mount -t tmpfs -o size=500m,mode=0750,uid=collectd,gid=collectd none /mnt/rrd-writes
bash-4.2# echo "none /mnt/rrd-writes tmpfs size=500m,mode=0750,uid=collectd,gid=collectd 1 2" >> /etc/fstab

Copia i vecchi file RRD nel nuovo mount point

bash-4.2# cp -a /var/lib/collectd/rrd/* /mnt/rrd-writes

Configura l'applicazione rrd-writing per scrivere nel nuovo mount point

bash-4.2# sed -i -e 's/DataDir "\/var\/lib\/collectd\/rrd"/DataDir "\/mnt\/rrd-writes"/' /etc/collectd/collectd.conf

Imposta un processo cron per sincronizzare solo i RRD modificati su disco una volta ogni 2 minuti

bash-4.2# echo "*/2 * * * * collectd rsync -a /mnt/rrd-writes/* /mnt/rrd-reads/ ; sync" > /etc/cron.d/rrd-sync

Non dimenticare di copiare i file RRD salvati nel punto di montaggio prima di avviare l'applicazione rrd-writing! Potrebbe essere necessario modificare lo script init per quel servizio per accertarsi che i file siano presenti prima dell'avvio. Se inizia senza i file in atto, ne verranno creati di nuovi nudi e sarai molto confuso una volta che la directory di lettura viene sovrascritta con RRD vuoti.

Se ad un certo punto devi ridimensionare il mount di tmpfs, puoi farlo al volo:

bash-4.2# mount -t tmpfs -o remount,size=850m /mnt/rrd-writes
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top