Я использую 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,+,+
У меня это сработало.