Apr 11, 2012
|
RRDtool (Round Robin Database). Обеспечивает хранение и отображение данных мониторинга (загрузка каналов, температура и любая другая зависящая от времени последовательность данных, которую можно получить некоторым способом). Задумывалась как повторная, но более правильная реализация MRTG. Объём хранимых данных не увеличивается со временем (ячейки хранения используются циклически). Использование различных функций консолидации данных позволяет охватывать большие интервалы времени без чрезмерного увеличения объема БД за счет снижения разрешающей способности. В отличие от mrtg, программа не упаковывает старые данные самостоятельно, это надо предусматривать при проектировании БД. Сбор информации и генерация HTML-кода также производится с помощью внешних средств. Более мощные средства генерации графиков. Все времена во внутреннем формате Unix (число секунд с 1 января 1970 в UTC). Значения счетчиков могут быть целыми или вещественными числами или специальным значением UNKNOWN. Лицензия - GPL (но автор не будет против, если в благодарность послать ему CD/DVD из указанного им списка; при установке rrdtool имитируется заказ CD на amazone.com ;-). Необходимо иметь perl 5 (без perl rrdtool соберется, но не будет модулей подержки perl) и обычный набор средств компиляции (make, gcc, autoconf, automake, libtool). Имеется также поддержка tcl и python. Нельзя использовать для учета и биллинга - слишком много он усредняет и сглаживает, используя достаточно сложные алгоритмы.
Очень хорошее описание http://www.bog.pp.ru/work/rrdtool.html#at
rrd_file = "/usr/local/www/nagios/2week.rrd"
def rrd_create(rrd_file):
if not os.path.isfile(rrd_file):
rrdtool.create(rrd_file,
"--step", "86400",
"DS:available:GAUGE:172800:0.0:100.0",
"RRA:AVERAGE:0.5:1:366",
)
step
- интервал через который будут обновляться значения. У нас 86400 сек - это 1 день т.е. ежедневно.DS:available:GAUGE:172800:0:100
- источник данныхavailable
- название источникаGAUGE
- тип (в данном случае поддерживает числа с плавающей точкой)172800
- значение которое должно быть 2*step :)0:100
- интервал допустимых значенийRRA:AVERAGE:0.5:1:366
- архив значенийAVERAGE
- тип (в данном случае среднее значение)1:366
- означает что в архиве 366 записей с интервалом 1*stepdef rrd_update(rrd_file, value):
rrdtool.update(rrd_file, "N:%s" % str(value))
N
- означает на текущее время (Now
)DS
(В случае нескольких DS
могло быть так N:%s:%s:%s
)import tempfile
fd,path = tempfile.mkstemp('.png')
rrdtool.graph("/tmp/net.png",
"--imgformat", "PNG",
"--height", "250",
"--width", "550",
"--end", "now",
"--start", "end-2w-1h",
"--lower-limit", "99.3",
"--upper-limit", "100.0",
"--zoom", "1.5",
"--y-grid", "0.05:1",
"--x-grid=DAY:1:DAY:1:DAY:2:0:%a",
"--right-axis", "1:0",
"--right-axis-format", "%0.2lf%%",
"--slope-mode",
"--vertical-label=Up times/day",
"DEF:avl=%s:available:AVERAGE" % rrd_file,
"AREA:avl#00FF00:Up times(%)",
'GPRINT:avl:AVERAGE:avg\: %2.2lf%%')
Описание всех параметров есть в ссылке приведенной выше.
Фаил rrd платформо зависим и может не заработать на другом железе или ОС (например из 32бит в 64бит), поэтому принято хранить бэкапы в xml.
$ rrdtool dump файл.rrd > бэкап.xml
XML можно править вручную и залить обратно в rrd.
$ rrdtool restore бэкап.xml > файл.rrd
Результат:
Для обучения лучше выбрать меньший интервал чем 1 день, например 2 мин (step = 120).