Професионален Блог

Поредният WordPress блог – що пък не? :P

Работа с RRDtool

Ще започнем с малко информация относно RRDtool.
RRDtool служи за високопроизводително следене на системата и се използва за написваме на самостоятелни шел скриптове за мониторинг.
RRDtool използва самостоятелна база от данни, която е създадена специално за мониторинг и в нея няма нищo излишно, което от своя страна го прави бърз за обработка на данни.

В случая тестовата машина е с Debian и за да бъде инсалиран пакета трябва да въведете следното:

apt-get install rrdtool

По този начин ще бъде инсталирано всичко необходимо за да извършите това HowTo.
Най-лесно ще разберете как работи rrdtool с пример.
Въведете следната команда:

rrdtool create example.rrd --start 1263753900 --step 300 DS:mem:GAUGE:600:0:671744 RRA:AVERAGE:0.5:12:24 RRA:AVERAGE:0.5:288:31

Което ще създаде файл ( база ) с име example.rrd , започващ от 1263753900 което е тъй наречения unix timestamp ( можете да използвате калкулатора от следния адрес: http://www.unixtimestamp.com/index.php )
По време на обновяване на базата трябва да зададете и „update time“ което е пак в timestamp .

–step 300 – показва, че базата ще очаква нови стойности на всеки 300 секунди ( 5мин )

DS (Data Sorce) е променлива сочеща към параметрите на устройстово (данните) от наблюдението . Нейния синтаксис е:
DS:variable_name:DST:heartbeat:min:max
‘variable_name’ – име под което параметрите (данните) запазват стойностите от „наблюдението“.

  • DST (Data Source Type) – може да бъде COUNTER, DERIVE, ABSOLUTE, GAUGE.
  • COUNTER се използва, когато се очаква при всяко обновяване да има положителни ( нарастващи ) разлики в стойностите. На пример следене на преминал трафик през даден рутер.
  • DERIVE се използва е подобен на COUNTER с тази разлика, че е подходящ и за отрицателни ( намаляващи ) стойности. На пример промяна в дисково пространсто.
  • ABSOLUTE – пести скоростта за промяна, но приема, че предната стойност е била равна на 0.
  • GAUGE – не запазва промяната, а запазва действителната стойност. Може да се използва за следене на заетата памет.
  • heartbeat – задава се колко време ще се изкачва за получаване на стойности. Примерно времето през което трябва да се получават стойности е зададено на 300, но не е било получено такава, тогава ще се изчака още 300 ( 300+300=600) и ако до тогава пак не бъде получена стойност, в базада ще бъде записано UNKNOWN.

Със следващите параметри се задава минимум и максимум на получените стойности. Всяка стойност която не влиза в тези параметри ще бъде записана като UNKNOWN.

Следва задаваме на Round Robin Archive (RRA), който има следния синтаксис:
RRA:CF:xff:step:rows
Където:

  • RRA – ключова дума за задаване на архив.
  • CF – consolidation function, която може да бъде AVERAGE (средна стойност за периодна на отчитане), MINIMUM (минимална стойност за периода на отчитане), MAXIMUM (максимална стойност за периода на отчитане), и LAST ( последна стойност за периода на отчитане )
  • xff – какъв процент от „UNKNOWN“ стойности е разрешен по време на отчитане. Обикновенно се задава 0.5 което означава 50%.
  • step – колко стъпки ще се използват за създаването на стойност в архива. Ако стойността е малка, то толкова по-точни ще са данните ( подходящо за постоянно следене), а ако е голяма, тогава се получава осреднена стойност и е подходяща за статистика ( месечна, годишна … ). 288 стъпки се равняват на едно денонощие. (288 стъпки Х 300 секунди /60 ( получава се в минути в минути ) /60 ( за да се получи в часове ) = 24 часа )
  • rows – определея колко голяма ще бъде базата ( колко реда ще има ) за запазване на данните. Съответно, когато се изпълнят редовете данните почват да се вартят по алгоритъма на „първи влезнал, първи излязал“.

От написаното горе трябва да сте разбрали, че с RRA:AVERAGE:0.5:12:24 задаваме в базата да се пазят средните стойности от данните на всеки час в 24 реда ( тоес за едно денонощие).
RRA:AVERAGE:0.5:288:31 от своя страна означава – да се запазват средните стойности за един ден в 31 реда, което би служило за месечна статистика.

Една база може да съдържа различни статистически данни – на пример за час, ден, седмица, месец и година чрез задаване на няколко архива (RRA)

Добавяне на данни

Ще разлгедаме няколко вида обновявания.

rrdtool update example.rrd N:1:2

където N значи – сега, а след двете точки са стойностите, които да се добавят.

rrdtool update example.rrd 1263754200:1:2:3:4:5:U:7

където времето се посочва в timestamp , а „U“ означава UNKNOWN стойност.

rrdtool update example.rrd "jan 9 2010 18:20@3210"

Тук виждате как се задава датата и часа , а след @ се поставят стойностите.

Също така можете и по следния начин да задавате стойности:

rrdtool update example.rrd 1263754200:0:0 1263754500:100:200 1263754800:400:300

Преглед на данните от базата данни става чрез командата fetch:

$ rrdtool fetch example.rrd AVERAGE --start "17:00" --end N                            mem

1263827100: 1.7300000000e+03
1263827400: 7.3000000000e+02
1263827700: 7.3900000000e+03
1263828000: 9.0000000000e+01
1263828300: 1.9000000000e+02
1263828600: 6.9000000000e+02
1263828900: 1.6900000000e+03
1263829200: -nan

A създаването на графика чрез:

 rrdtool graph graph.png  --start "17:00: --end N DEF:test1=example.rrd:mem:AVERAGE  LINE2:test1#FF0000

Което ще създаде файл (картинка) с име graph.png където:

  • – start – oт кога да започне извадката
  • – end – до кога да е извадката
  • DEF – ключова дума
  • test1 – място където задавате променлива, която да извикате при чертането
  • example.rrd – базата от която да се четата стойностите
  • mem – под дова име са запазени стойносттите в базата
  • LINE1 / LINE2 – колко дебела да бъде линията на изчертаване
  • test1 – извикваме променливата
  • #FF0000 – цвят на линията

И ето какво се получи с зададените от мен данни:

Следва продъжение…

, , , ,

Вашият коментар