Как я могу напечатать время максимального значения в графе rrdtool? - PullRequest
0 голосов
/ 27 сентября 2018

Я столько раз искал, что устал от этого.

У меня есть база данных rrdtool, с помощью которой я печатаю значения MAX, Min, Average.Теперь я хотел бы напечатать время максимального значения, сохраненного в rrd db.

Вот определение моего rrd (мониторинг процессора):

rrdtool create CPU.rrd --start $Date \
   DS:CPU_ALL:GAUGE:600:U:U \
   DS:User:GAUGE:600:U:U \
   DS:Sys:GAUGE:600:U:U \
   DS:Wait:GAUGE:600:U:U \
   DS:Idle:GAUGE:600:U:U \
   RRA:AVERAGE:0.5:1:20000 \
   RRA:AVERAGE:0.5:1:20000 \
   RRA:AVERAGE:0.5:1:20000 \
   RRA:AVERAGE:0.5:1:20000 \
   RRA:AVERAGE:0.5:1:20000

Вот мой графикскрипт:

rrdtool graph CPUUsed.png --start -1w \
DEF:CPUTOTAL=CPU.rrd:CPU_ALL:AVERAGE AREA:CPUTOTAL#FF0000:"CPU Used" LINE2:CPUTOTAL#FF0000 \
--vertical-label "CPU" \
--title "CPU " \
--width 530 \
--height 380 \
GPRINT:CPUTOTAL:MAX:"MAX\:%6.2lf %s" \
GPRINT:CPUTOTAL:MIN:"MIN\:%6.2lf %s"  \
GPRINT:CPUTOTAL:AVERAGE:"MOY\:%6.2lf %s"  \
GPRINT:CPUTOTAL:LAST:"LAST\:%6.2lf %s" 

Как я могу сгенерировать этот график, добавив время максимального значения ЦП?

1 Ответ

0 голосов
/ 28 сентября 2018

ОК, у вас есть пара проблем.

Во-первых, ваш RRD неправильно настроен.Вы определили 5 идентичных RRA - это не имеет смысла.Один RRA будет хранить значения в указанном разрешении для всех определенных DS.Тем не менее, вы можете захотеть иметь больше при более высокой степени детализации (чтобы ускорить графики месяца или года).Возможно, вы также захотите иметь RRA типа MIN или MAX, чтобы ваши значения MIN и MAX были более точными.

Например, этот набор определяет как MAX, так и MIN RRA, а также среднее значение, и также будет иметь4 свертки, которые примерно соответствуют дневным, недельным, месячным и годовым графикам.

RRA:AVERAGE:0.5:1:20000 \
RRA:AVERAGE:0.5:6:2000 \
RRA:AVERAGE:0.5:24:2000 \
RRA:AVERAGE:0.5:288:2000 \ 
RRA:MAX:0.5:1:20000 \
RRA:MAX:0.5:6:2000 \
RRA:MAX:0.5:24:2000 \
RRA:MAX:0.5:288:2000 \
RRA:MIN:0.5:1:20000 \
RRA:MIN:0.5:6:2000 \
RRA:MIN:0.5:24:2000 \
RRA:MIN:0.5:288:2000 

Во-вторых, когда вы хотите напечатать одну цифру в строке GPRINT, вам нужно использовать VDEF для преобразования вашего временного рядаданные (из DEF или CDEF) в одно значение, используя некоторые функции консолидации.

Например, этот набор команд будет использовать DEF типа MAX и MIN, определенные ранее, а затем вычислять итоги по ним, используя VDEF,Конечно, вы можете просто использовать CPUTOTAL вместо определения CPUTOTALMAX и CPUTOTALMIN (сохраняя себе дополнительные RRA), но при переходе к использованию RRA с более низкой гранулярностью точность будет падать.Если у вас нет RRA с более низкой гранулярностью, вы будете точны, но будете использовать много дополнительного ЦП во время графика, и создание графика будет медленнее.Использование RRA с различным разрешением ускоряет создание графика.

DEF:CPUTOTAL=CPU.rrd:CPU_ALL:AVERAGE \ 
DEF:CPUTOTALMAX=CPU.rrd:CPU_ALL:MAX \ 
DEF:CPUTOTALMIN=CPU.rrd:CPU_ALL:MIN \ 
VDEF:overallmax=CPUTOTALMAX,MAXIMUM \ 
VDEF:overallmin=CPUTOTALMIN,MINIMUM \ 
VDEF:overallavg=CPUTOTAL,AVG \ 
VDEF:overalllst=CPUTOTAL,LAST \ 
AREA:CPUTOTAL#FF0000:"CPU Used" \
LINE2:CPUTOTAL#FF0000 \ 
GPRINT:overallmax:"MAX\:%6.2lf %s" \ 
GPRINT:overallmin:"MIN\:%6.2lf %s"  \ 
GPRINT:overallavg:"MOY\:%6.2lf %s"  \ 
GPRINT:overalllst:"LAST\:%6.2lf %s"  \
GPRINT:overallmax:"Max was at %c":strftime

В последней строке будет напечатано время максимумов, а не значение .Когда VDEF вычисляет MAX или MIN, он фактически возвращает два компонента - значение и момент времени.Обычно вы используете это значение, но, добавив :strftime к GPRINT directrive, вы можете использовать вместо него компонент времени.

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

...