O scurtă prezentare a blogului rrdtool - puncte și paranteze

În ultimul post, am menționat că colecția stochează datele colectate în mod implicit prin rrdtool. La ieșire, se obțin mai multe fișiere .rrd - câte una pentru fiecare metrică - și apoi pot fi redate folosind același rrdtool. Fișierele RRD nu sunt atât de des înotat în conversații la automatul de cafea, și într-adevăr, ea instrument încă rrdtool, deci nu este imediat clar de ce collectd folosește, și nu unele CSV.

Se pare că există suficiente motive.

Ce este rrdtool?

RRDtool este un utilitar mic care face trei lucruri minunate:

  1. Creează baze de date ciclice (baze de date Round-Robin, RRD),
  2. înregistrează date în ele,
  3. și creează grafică bazată pe ceea ce am scris.

Ce este o bază de date ciclică (RRD)

RRD este o bază de date specială, care, începând de la un moment dat, scrie valori noi față de cele vechi. De exemplu, dacă o bază de date ar trebui să stocheze date de 7 zile, atunci a opta zi va suprascrie prima, a noua - peste a doua, și așa mai departe.

Pentru a stoca metrici de sistem, aceasta este doar o descoperire. De exemplu, eu sunt rar interesat de modul în care pe secundă sarcina procesorului a fost schimbat cu un an în urmă. Astăzi și ieri - interesant. Orice valori orare medii din ultimele două săptămâni - este, de asemenea, destul. Chiar și încărcarea medie pe zi pentru ultimul an este uneori interesantă. Dar tot ce este mai vechi și mai detaliat - cine are nevoie de el?

Și rrdtool doar în astfel de arhive legate de timp și exacte și întemnițat. În plus, datorită faptului că intervalul de timp și precizia sunt stabilite strict, mărimea arhivelor este cunoscută în avans, astfel încât nu vor exista surprize cu depășirea discului.

Creați o bază de date ciclică (RRD)

Pentru a crea un RRD cu rrdtool, aveți nevoie de un pic de magie neagră, dar odată ce ați dat seama, totul va merge ca un ceas. Cred că ar trebui să începem imediat cu o echipă pregătită și apoi să înțelegem de ce funcționează:

Prima linie este destul de ușor de înțeles - creăm ceva numit cpu.rrd. În cazul nostru, aceasta este o bază de date ciclică pentru stocarea valorilor procesorului. Următorul parametru - - pasul 10 - specifică cât de des vom scrie o nouă bucată de date. În acest caz - la zece secunde. Dacă datele apar mai devreme sau mai târziu, rrdtool interpolează valorile și le aliniază la limitele de zece secunde.

Ultimele două linii descriu sursa de date și arhiva în care vor fi stocate.

Sursa de date (DS)

Parametrul DS descrie sursa de date. Faptul că este vorba nu înseamnă că datele vor fi păstrate - arhivele sunt necesare pentru aceasta. Și într-o bază de date pot exista mai multe surse de date.

Parametrul nostru este DS. cpu. Gauge. 20. 0. 100 literal înseamnă următoarele:

  1. Creați o sursă de date (DS)
  2. sub numele de CPU
  3. și cu tipul GAUGE.
  4. În cazul în care nu se primesc date noi în 20 de secunde (interval de inima) - salvați UNDEFINED.
  5. Valorile variază între 0
  6. și 100.

Tipul GAUGE spune ca rrdtool sa interpreteze valorile primite "ca atare". Există tipuri de COUNTER, derive și ABSOLUTE, care a tinut rrdtool nu ar conta, iar viteza cu care se schimbă (ia valoarea curentă, scade cel precedent, se împarte la - pas). Pas cu pas. parametrul bătăilor inimii și interpolarea încorporată la fiecare 10 secunde, va apărea o nouă valoare în baza de date, indiferent dacă ne place sau nu. Această valoare se numește Punctul de date primar (PDP)

Arhiva rotundă (RRA)

RRA este o agregată fereastră de timp cu date. Ca și în cazul DS, pot exista mai multe în baza de date. Singura noastră arhivă RRA. MEDIE. 0.5. 6. 120 reprezintă:

  1. Creați o arhivă circulară (RRA)
  2. lungime de 120 de elemente,
  3. fiecare dintre acestea fiind o medie (medie)
  4. din 6 puncte de date primare.
  5. Dacă mai mult de jumătate (> 0,5) din valorile din șase sunt UNDEFINED, UNDEFINED este, de asemenea, în arhivă.

Rezultatul este o arhivă care va stoca sarcina CPU medie pe minut (10 secunde * 6) pentru ultimele două ore (10 secunde * 6 * 120). Un element al arhivei este numit un punct de date consolidat (Consolidated Data Point, CDP), iar AVERAGE este o funcție de consolidare (CF). Punctele primare și consolidate sunt legate unul de celălalt astfel:

În plus față de AVERAGE, există și alte funcții de consolidare: MIN, MAX și LAST.

Adăugarea de date către RRD

Adăugarea de date noi în baza de date ciclică trece prin rrdtool. Din moment ce timpul afectează cum și unde vor fi stocate valorile, trebuie să fie transmise împreună cu ele. De exemplu, puteți adăuga o valoare cu eticheta "acum":

În plus față de valorile numerice din baza de date, puteți salva "U" - UNDEFINED.

Deși datele pot fi adăugate manual prin linia de comandă, va fi mai rezonabil dacă acest lucru se face printr-un script sau alt program.

Crearea de grafice din RRD

rrdtool nu poate numai să stocheze date, ci și să deseneze. Comanda pentru crearea grafurilor poate lua intrarea unui milion de parametri. dar pentru demo există doar câteva elemente de bază.

La Ubuntu collectd mea virtuală a fost de lucru pentru mai multe zile, care ar putea face o turmă de fișiere RRD: cpu-system.rrd, cpu-user.rrd și altele asemenea. Pentru a face un program normal pentru primele două fișiere, această comandă este de ajuns:

Creați graficul CPU

Buna ziua.
Ajutor, vă rog, să înțelegeți: I se întâmplă o eroare când folosesc $ res = rrd_graph ($ file, $ options) -> "Apelați la funcția nedefinită rrd_graph ()"? Nu există nici o eroare pe rrd_error, rrd_fetch funcționează bine, dar rrd_graph nu dorește să funcționeze. Poate fi pentru rrd_graph podustanovlis un pachet? Sau drepturile la un dosar cu fișiere rrd nu sunt acelea? Mulțumesc

Salutări!
PHP nu este profilul meu, deci nu sunt de natură să ajut aici. Dar aș pune problema în argumentele rrd_graph, nu în pachetul ratat. În docurile nu există dependențe suplimentare, iar pe Stack Overflow cineva a avut deja aceeași problemă cu rrd_xport, deoarece opțiunile $ sunt dimensiunea greșit, astfel încât «apelarea funcției nedefinită» poate arunca din diverse motive. Ideea este că preluarea și graficul ar trebui să fie aceiași parametri, astfel încât în ​​cazul solicitării de preluare a sarcinii, opțiunile $ sunt corecte, iar problema trebuie să fie undeva în fișierul $. Poate că nu există suficientă permisiune de scriere, sau în felul în care dosarul intermediar nu este creat. Puteți experimenta chiar și cu formatul imaginii de ieșire: dacă PNG cade, poate, plimbare SVG, iar apoi ne întoarcem la dependențele implicite pierdute.
Cumva.

Buna ziua. Cui îi este util: la mine a arătat o eroare Apel la funcția nedefinită rrd_graph într-un rând în care am cauzat funcția dată. PHP este un get_defined_functions funcții, așa că, dacă apelați la print_r (get_defined_functions); ieșire ();. de exemplu, în fișierul index, va părea toate disponibile php-funttsii și, dacă nu le vedeți rrd_graph, probleme în setările de pe server. Am avut toate, dar rrd_graph 🙂 adevărul nu știu exact ce sefii făcut pe server - cum ar fi modul de a reseta toate problemele cu rrdtool, rebutnuli un server si a functionat. Ei bine, și dacă funcția este - atunci într-adevăr problema în opțiuni.

Hmm, misterios. Dar multumesc pentru partajare. M-am gândesc deja limbaje de scripting și imperfecțiunile acestei lumi, el a amintit că recenta captura evaziv NuGet pachet de comprimare pentru aplicatii .NET: totul este bine compilat, dar imediat a căzut atunci când executați RuntimeExeption aplicație, Compresison.ZipFile nu a fost găsit. Nicăieri nu există ordine.