Procesul de monitorizare presupune colectarea continuă de date la intervale regulate de timp. În timp, volumul de date crește foarte mult, iar spațiul ocupat de acestea devine o problemă. Luând în calcul și faptul că granularitatea datelor colectate la un moment dat în timp poate să scadă o dată cu trecerea timpului (ex.: nu ne interesează traficul pe o interfață de acum un an la o granularitate de un minut, ci la o oră este rezonabil) a fost proiectat un nou tip de bază de date: Round Robin Database (RRD).
Dimensiunea acesteia este cunoscuta de la momentul creării, în funcție de numărul de tipuri de date colectate și de granularitatea acestora. După cum îi spune și numele, aceasta stochează datele într-un spațiu finit, iar când acel spațiu alocat este epuizat, datele inițiale se vor suprascrie. Înainte de suprascriere se face o arhivare
a datelor suprascrise (de cele mai multe ori se folosește media aritmetică pe intervalul de timp respectiv).
Utilitarul cu ajutorul căruia vom crea și popula bazele de date se numește rrdtool
. Acesta permite 3 operații:
create
(creare bază de date)update
(inserare valori bază de date)graph
(generează un grafic funcție de timp pe baza valorilor introduse)
Pe stația monitor instalăm utilitarul rrdtool
:
root@monitor:~# apt-get install rrdtool
Pentru a crea o bază de date, comanda rrdtool create
primește următorii parametri:
Vom crea o bază de date ce are ca timp de început/referință ora curentă a stației monitor
. rrdtool
are nevoie de această valoare în numărul de secunde trecut de la 1 Ianuarie 1970. Acesta poate fi obținut cu comanda date
:
root@monitor:~# date +%s 1394405025
Pasul folosit va fi de 5 secunde (în practică se folosește pasul de 300 de secunde, dar acum dorim să colectăm mai multe date într-un interval scurt de timp pentru a putea genera un grafic relevant):
root@monitor:~# rrdtool create target.rrd \ --start 1394405025 \ --step 5 \ DS:speedIn:COUNTER:10:U:U \ DS:speedOut:COUNTER:10:U:U \ RRA:AVERAGE:0.5:2:60 \ RRA:AVERAGE:0.5:60:12
După cum se observă am creat 2 variabile de tipul COUNTER
care se numesc speedIn
și speedOut
(pentru alte tipuri de variabile vezi Curs 03 - Monitorizarea rețelei). Valoarea lor maximă este nespecficată (U
- undefined). Valoarea 10
reprezintă numărul de secunde cât așteaptă după date noi, iar dacă este depășit se inserează o valoarea specială UNKNOWN
pentru a nu afecta mediile calculate.
Tipul de arhivare configurat este AVERAGE
și o dată la 2 valori, realizează media acestora după care vechile valori vor fi suprascrise. Sunt păstrate 60 astfel de medii, în final aceste 60 medii fiind suprascrise și ele. Timpul acoperit de această arhivare este de 10 minute (5 secunde x 2 x 60).
O altă arhivare configurată este dată media a 60 de valori (deci 300 de secunde), fiind ținute 12 de astfel de medii. Această arhivare acoperă 300 secunde x 12 = 60 minute
. Deci baza noastră de date ne poate oferi statistici ale traficului pe o interfață de rețea la diferite nivele de granularitate (în ultimele 10 minute este calculată media la nivel de 10 secunde, iar în ultima oră este calculată media la 1 minut).
Copiați și completați scriptul de mai jos pentru a obține valorile pentru variabilele octetsIn
și octetsOut
. Acestea reprezintă numărul de octeți (trimiși și primiți) de pe interfața eth0
a stației gateway
(Hint: snmpwalk
, IF-MIB::ifInOctets
urmat de numărul instanței). Scriptul colectează numărul de octeți din 5 în 5 secunde și îl introduce în baza de date target.rrd
(rrdtool update target.rrd $(date +%s):inOctets:outOctets
):
#!/bin/bash rm -rf target.rrd # Init timestamp. timestamp=$(date +%s) # Align timestamp to multiple of 5 seconds. timestamp=$(($timestamp/5*5)) init_timestamp=$timestamp rrdtool create target.rrd \ --start $timestamp \ --step 5 \ DS:speedIn:COUNTER:10:U:U \ DS:speedOut:COUNTER:10:U:U \ RRA:AVERAGE:0.5:2:60 \ RRA:AVERAGE:0.5:60:12 for i in $(seq 1 24); do sleep 5 timestamp=$(($timestamp + 5)) outOctets=$(...) inOctets=$(...) rrdtool update target.rrd $timestamp:$inOctets:$outOctets done echo --start $init_timestamp --end $timestamp
Comanda rrdtool update
primește timestamp-ul ( scp root@192.168.1.4:speed.png .
</code>