Cred că aproape fiecare administrator de sistem a văzut diagrame interesante care arată date statistice pentru o anumită perioadă de timp. Unul dintre exemplele acestor grafice este secțiunea de statistici de pe acest site. Grafice similare pot fi desenate folosind utilitarele din pachetul RRDtool. RRDtool - un set de instrumente pentru lucrul cu datele de bază circulare (RRD), pentru stocarea, procesarea și vizualizarea dinamica (variabile în timp), secvențele de date, cum ar fi traficul în rețea, temperatura, CPU, etc. RRDtool este foarte ușor de integrat în scripturi bash, există, de asemenea, obligatoriu în formă de biblioteci la Perl, Python, Ruby. Toate acțiunile pe care le voi face pe o mașină care rulează FreeBSD 8.3.
RRD este o bază de date inelară. Caracteristica principală a acestei baze de date este că ea are întotdeauna o dimensiune fixă. Adică, atunci când se ajunge la un anumit domeniu într-o astfel de bază de date, datele vor fi scrise la început, eliminându-se astfel pe cele anterioare. În RRD, se introduc alte concepte în locul tabelelor, coloanelor și câmpurilor. Are așa-numitele surse de date (DS), care, prin ele însele, nu stochează nimic. Pentru simplitate, ele pot fi interpretate ca coloane obișnuite într-un tabel. Stocarea acelorași date este atribuită arhivelor inelului (RRA). RRA este atașat la o sursă de date și are următoarele proprietăți: numărul de celule; funcția de consolidare aplicată; intervalul de timp după care funcția de consolidare este aplicată datelor, iar rezultatul lucrării este scris în celula următoare. Poate că tot ce trebuie să știți despre structura de date în RRD.
În momentul acestei scrieri, versiunea 1.4.5 este disponibilă în porturi. Deci, hai să mergem la porturi și să setăm (rețineți că există mai multe versiuni ale acestui pachet în porturi):
În plus față de parametrii impliciți de construire, am bifat DEJAVU. Notă - dacă doriți să semnați grafice cu litere rusești, trebuie să bifați opțiunea DEJAVU. în caz contrar, veți primi în loc de scrisori ruse krakoyzaby. Într-un mic regret, portul se deplasează împreună cu câteva dependențe, de exemplu bibliotecile glib, cairo, x11. După instalarea portului, este instalat un set de utilitare.
Toate scripturile pe care le am sunt stocate în directorul de domiciliu al utilizatorului root din directorul rrd și se creează un subdirector separat pentru fiecare tip de statistică. În fiecare astfel de director există o bază de date în sine și trei scripturi responsabile pentru crearea și actualizarea bazei de date, precum și diagrame de desen.
Nu este nevoie să urmați o astfel de ierarhie, deoarece ar fi mai convenabil pentru dvs. să păstrați întregul lucru într-un fel diferit.
Cu pachetul rrdtool, mai multe utilitare sunt puse și una dintre ele are același nume - rrdtool. Cu ea puteți efectua diverse manipulări cu baza de date a inelului (crearea / modificarea bazelor de date, actualizarea / extragerea datelor, construirea graficelor etc.). Utilitarul are următoarea sintaxă:
Apoi, voi descrie câteva comenzi (pentru mai multe informații, consultați documentația):
- Creați o bază de date inel
Descrierea parametrilor:
- numele fișierului este numele fișierului.
- --start, -b - timpul în secunde de la începutul erei Unix (1970-01-01 UTC), din care se colectează statistici. RRDtool nu va accepta date mai vechi decât timpul specificat aici. Implicit: acum - 10 secunde.
- --pas, -s - intervalul prin care datele intră în baza de date. Implicit: 300 secunde.
- --fără suprascriere, -O - Nu suprascrieți un fișier existent cu același nume.
- DS: ds-name: DST: dst argumente - sursă de date sau mai simplu - coloană în baza de date unde sunt stocate datele.
- ds-name este numele coloanei (nu poate fi mai mare de 19 caractere, caractere valide: [a-zA-Z0-9_]).
- DST este tipul sursei de date. Poate lua valori:
- GAUGE - potrivit pentru tipul de date: temperatura, sarcina procesorului, dimensiunea memoriei.
- COUNTER - proiectat pentru a stoca date de la contoare, cum ar fi traficul. Se presupune că valoarea contorului nu scade niciodată, cu excepția cazului depășirii acestuia.
- DERIVE este un contor care poate scădea.
- ABSOLUTE este, de asemenea, un contor, dar este resetat după citire.
- COMPUTE - vă permite să specificați formula rpn pentru prelucrarea datelor.
- inima - numărul maxim de secunde de date care așteaptă o celulă, după care valoarea este marcată ca UNKNOWN. Se recomandă instalarea în pasul 2 *.
- min este valoarea minimă admisibilă. Dacă nu există restricții, vă rugăm să specificați aici U.
- max este valoarea maximă permisă. Dacă nu există restricții, vă rugăm să specificați aici U.
- AVERAGE - valoare medie pentru o anumită perioadă
- MIN este valoarea minimă
- MAX - valoarea maximă
- LAST - ultima valoare
xff - determină ponderea valorilor incerte în intervalul de consolidare la care valoarea consolidată este încă considerată determinată (0..1).
pași - definește numărul de valori pentru care se va utiliza funcția de consolidare, după care rezultatul lucrărilor sale este scris în arhivă.
rânduri este numărul de celule utilizate pentru stocarea datelor consolidate.
Descrierea parametrilor:
- numele fișierului este numele fișierului.
- --șablon, -t - această opțiune stabilește un șablon care vă permite să specificați sursele de date și în ce ordine doriți să scrieți în baza de date. Dacă sursele de date specificate aici nu sunt în fișier, înregistrarea va fi anulată, iar programul va elimina eroarea.
- --daemon - dacă este setat, rrdtool va încerca să se conecteze la daemonul rrdcached. Dacă încercarea eșuează, este afișat un mesaj de eroare.
- timp | N: valoare [: valoare. ] - date legate de timp care sunt scrise în baza de date. Dacă specificați N în timp, timpul curent va fi înlocuit. De asemenea, timpul poate fi setat în câteva secunde de la începutul erei Unix sau în stil AT (pentru detalii în documentație).
- numele fișierului este numele fișierului.
- rranum este numărul RRA. Numărul poate fi găsit utilizând comanda rrdtool info.
- GROW | SHRINK - acțiune la RRA: creștere / scădere.
- rânduri - numărul de celule care urmează să fie adăugate / șterse.
Cu această comandă, puteți schimba caracteristicile bazei de date sau un singur DS (de exemplu, redenumiți-o). Pentru informații, consultați documentația.
E timpul pentru primul exemplu practic)). Înainte de a crea o bază de date, trebuie mai întâi să vă gândiți la ce date vor fi stocate în ea. În majoritatea sistemelor de tip Unix, procesorul poate fi în 5 state (utilizator, sistem, frumos, int, inactiv), iar FreeBSD nu face excepție. Vreau să stochez fiecare stat separat și, dacă este necesar să se unească ceva, atunci această sarcină simplă este foarte simplu de rezolvat prin operații aritmetice simple. Deci, avem nevoie de o bază de date cu 5 DS (surse de date). Acum trebuie să decidem care RRA sunt necesare și pentru ce interval de timp o celulă va stoca datele (cu cât intervalul este mai mic, cu atât graficul va fi mai precis). Pentru a construi un program mai precis, datele vor fi deconectate la fiecare minut și vor fi mai multe RRA-uri (am uitat să spun - datele vor fi stocate pentru un an):
- Fiecare celulă stochează date pentru fiecare număr (adică, înregistrarea se face la fiecare 60 de secunde). Pentru a stoca cât mai multe date de care aveți nevoie 365 * 24 * 60 * 60/60 = 525600 celule.
- Fiecare celulă stochează datele timp de 15 minute (adică datele se vor acumula timp de 15 minute, apoi se va aplica funcția de consolidare a acestora și numai atunci va avea loc înregistrarea). Pentru a stoca cât mai multe date de care aveți nevoie 365 * 24 * 60 * 60 / (60 * 15) = 35040 celule.
- Fiecare celulă stochează date în 30 de minute. Pentru a stoca cât mai multe date de care aveți nevoie 365 * 24 * 60 * 60 / (60 * 30) = 17520 celule.
- Fiecare celulă stochează date în 60 de minute. Pentru a stoca cât mai multe date de care aveți nevoie 365 * 24 * 60 * 60 / (60 * 60) = 8760 de celule.
P.S. În acest moment folosesc doar 1 RRA, restul doar în cazul în care este necesar.
Vor exista, de asemenea, RRA cu diferite funcții de consolidare, deci va trebui să duplicați RRA pentru fiecare interval de timp. Să nu faci chestii de fiecare dată cu toate mâinile (și multe lucruri), este mai bine să scrii imediat un script. Iată scriptul pentru crearea bazei de date necesare:
Acum trebuie să scrieți un script care să colecteze datele și să umple baza de date. Din păcate, FreeBSD nu are un utilitar standard, care ar afișa sarcina CPU pe ecran într-o formă convenabilă pentru parsare. Desigur, puteți să eliminați descărcarea de către SNMP, dar nu vreau să instalați și să configurați software suplimentar (și nimic nu este pentru că este mai ușor de făcut). Așa că a trebuit să scriu propriul meu program pentru a rezolva această problemă. Iată codul:
Puteți să o compilați cu această comandă: