Назад | Перейти на главную страницу

Агрегирование более двух RRD в RRDGraph возвращает пустой график

Я использую rrd graph для создания диаграммы агрегированных данных вручную на основе RRD, собранных с помощью PNP4Nagios. Моя проблема в том, что когда я пытаюсь объединить более двух источников, я получаю пустой график.

Я считаю, что у меня есть правильный формат CDEF для создания источников агрегированных данных на основе следующего: http://oss.oetiker.ch/rrdtool/tut/cdeftutorial.en.html (См. «Преобразование ваших пожеланий в RPN»).

Основываясь на этой статье, я использую:

CDEF:rx=rx1,rx2,+,rx3,+,rx4,+,...,rx10,+,rx11,+

Это работает, только если я объединяю первые два источника данных в инструкции, каждый раз, когда я делаю 3 или более, я получаю пустой график.

Я не могу понять, почему это? Единственная разница между рабочим графиком и неработающим - это оператор CDEF.

Работает: CDEF:rx=rx1,rx2,+

Не работает: CDEF:rx=rx1,rx2,+,rx3,+

Вот полный рабочий оператор графика RRD только с двумя агрегированными источниками:

rrdtool graph bw_graph.png -a PNG --start=1389348873 --end=1392096786 --step 30 -w 597 -h 188 -v "Interface Traffic (bps)" \
'DEF:rx1=/path/to/data/cust1/eth0.rrd:1:AVERAGE' \
'DEF:tx1=/path/to/data/cust1/eth0.rrd:2:AVERAGE' \
'DEF:rx2=/path/to/data/cust2/eth0.rrd:1:AVERAGE' \
'DEF:tx2=/path/to/data/cust2/eth0.rrd:2:AVERAGE' \
'DEF:rx3=/path/to/data/cust3/eth0.rrd:1:AVERAGE' \
'DEF:tx3=/path/to/data/cust3/eth0.rrd:2:AVERAGE' \
'DEF:rx4=/path/to/data/cust4/eth0.rrd:1:AVERAGE' \
'DEF:tx4=/path/to/data/cust4/eth0.rrd:2:AVERAGE' \
'CDEF:rx=rx1,rx2,+' \
'CDEF:tx=tx1,tx2,+' \
'AREA:rx#0F5BFF:RX' \
'AREA:tx#FF9933:TX' \
GPRINT:rx:MAX:"RX Max %6.2lf %s" \
GPRINT:rx:MIN:"RX Min %6.2lf %s" \
GPRINT:rx:AVERAGE:"RX Avg %6.2lf %s" \
GPRINT:rx:LAST:"RX Curr %6.2lf %s\n" \
-t bw_graph

Я обнаружил, что проблема в этом случае заключалась не в том, что я добавлял более двух источников данных - это было нормально. Проблема заключалась в том, что один из добавляемых мной источников данных имел неопределенные данные, что, в свою очередь, приводило к обнулению всего графика.

Я нашел это экспериментально - попробовал добавить rx3,rx4,+ и обнаружил, что граф все еще не работает, только эти две пары. Казалось, что причиной моих проблем был rx3.

Сделав еще один шаг, чтобы подтвердить мою проблему, я решил объединить 4,5,6: rx4,rx5,+,rx6,+ работал нормально и построил график.

После некоторого поиска я нашел статью, в которой упоминалась эта проблема: http://rrd-mailinglists.937164.n2.nabble.com/adding-DS-values-from-multiple-rrd-files-tp5368188p5512061.html

Затем, с некоторой дополнительной помощью из этого документа, о том, как использовать UN заменить неизвестные данные на 0: http://oss.oetiker.ch/rrdtool/tut/cdeftutorial.en.html

В основном, в моих заявлениях CDEF, rx1 станет rx1,UN,0,rx1,IF. И rx2 становится rx2,UN,0,rx2,IF и т.д...

Окончательный CDEF может выглядеть примерно так:

CDEF:rx=rx1,UN,0,rx1,IF,rx2,UN,0,rx2,IF,+,rx3,UN,0,rx3,IF,+

Попробуйте следующее:
CDEF:rx=rx1,rx2,rx3,+,+

У меня это сработало.