"invalid rpn expression in a variable name, RPN final stack size != 1, rpn expressions without DEF or CDEF variables are not supported"
Это сообщение об ошибке сообщает вам о проблеме; Ваша функция RPN (вероятно, в CDEF) отформатирована неправильно. Причина в том, что вам нужна переменная DEF или CDEF, а вы используете переменные VDEF.
В чем разница?
Ну, DEF или CDEF - это ряд значений, которые потенциально могут быть отображены. VDEF, с другой стороны, представляет собой однозначное суммарное значение за весь временной ряд.
Ваш DEF - это набор значений прямо из файла RRD с выбранным разрешением (шаг по времени) и коэффициентом консолидации (AVG, MAX, MIN).
Ваш CDEF - это вычисленный набор значений, работающий как минимум с одним набором DEF или CDEF.
Ваш VDEF, тем не менее, принимает набор значений (из DEF или CDEF) и суммирует их. Таким образом вы получаете среднее значение за весь день, когда ваш график показывает средние значения за 5-минутные интервалы.
Итак, как делать то, что вы хотите сделать?
Вам нужно использовать DEF для извлечения нескольких временных рядов с правильными коэффициентами консолидации из RRD; затем используйте CDEF для их суммирования. Возможно, вы захотите также использовать VDEF, чтобы не получить единственное значение для текста в нижнем колонтитуле.
Пример:
DEF:lasta=file.rrd:a:LAST
DEF:lastb=file.rrd:b:LAST
CDEF:lasttotal=lasta,lastb,+
DEF:maxa=file.rrd:a:MAXIMUM
DEF:maxb=file.rrd:b:MAXIMUM
CDEF:maxtotal=maxa,maxb,+
LINE:lasttotal#ff0000:"Last
LINE:maxtotal#00ff00:"Maximum for this interval"
VDEF:overallmaxtotal=maxtotal,MAXIMUM
PRINT:overallmaxtotal:"The maximum for the whole graph is %lf"
Однако у вас также есть другая проблема.
По мере того как ваша гранулярность уменьшается - и вы переходите к большим временным окнам - вычисление общей суммы становится все более и более неточным. Это потому, что max(a+b) <> max(a)+max(b)
с увеличением интервала суммирования. Это верно как для MAX, так и для MIN, но не для LAST или AVG. Единственный способ получить правильную точность - выполнить суммирование перед сохранением в RRD.
Кроме того, вполне вероятно, что вам лучше использовать AVERAGE, чем использовать LAST, поскольку AVERAGE правильно объединяет значения при переходе к более низкой гранулярности.
На веб-сайте RRDTool имеется много информации, которая может помочь вам понять.