Я использую RRDTool для управления данными о производительности и построения графиков.
В настоящее время я вызываю RRDTool из скрипта bash , но получаю ошибку, которую не могу исправить.
Мой Bash Script выглядит так:

# Call RRDTool and save the output
output=$(rrdtool graph --width 4000 \
DEF:data=/usr/local/pnp4nagios/var/perfdata/FM/win_tcpu.rrd:proc:AVERAGE \
VDEF:slope=data,LSLSLOPE \
PRINT:slope:'%lf')

echo "Output: " $output

Я пытаюсь найти m в y = m * x + b с помощью этого простого примера.
Мои данные о производительности выглядят примерно так:

<NAGIOS>
<DATASOURCE>
  <TEMPLATE>nrpe_win_tcpu</TEMPLATE>
  <RRDFILE>/usr/local/pnp4nagios/var/perfdata/FM/win_tcpu.rrd</RRDFILE>
  <RRD_STORAGE_TYPE>SINGLE</RRD_STORAGE_TYPE>
  <RRD_HEARTBEAT>8460</RRD_HEARTBEAT>
  <IS_MULTI>0</IS_MULTI>
  <DS>1</DS>
  <NAME>proc</NAME>
  ...
</DATASOURCE>
...

Как видите, имя файла и имя источника данных правильное.
Моя проблема в том, что DEF не работает. Я получаю следующее сообщение об ошибке:

ERROR: Not a valid vname: data in line VDEF:slope=data,LSLSLOPE

При попытке доступа к данным, сохраненным в переменной data , как это, просто чтобы проверить, не в моей ли строке VDEF :

LINE1:data#0000FF:"data" \

Я получаю следующую ошибку:

ERROR: parameter 'data' does not represent a number in line LINE1:data#0000FF:data

Это проясняет, что проблема где-то в строке DEF , но я не понимаю, почему это происходит.

Кто-нибудь знает, почему я получаю эти сообщения об ошибках и как решить эту проблему?

Любая помощь приветствуется. Заранее спасибо.

0
Naturjoghurt 28 Янв 2015 в 21:19

2 ответа

Лучший ответ

Я нашел проблему. Это была всего лишь действительно глупая ошибка. Я звонил:

rrdtool graph --width 4000 \
DEF:data=/usr/local/pnp4nagios/var/perfdata/FM/win_tcpu.rrd:proc:AVERAGE \
VDEF:slope=data,LSLSLOPE \
...

Снова посмотрев описание использования графа RRDTool, я увидел следующее:

rrdtool graph filename [-s|--start seconds] [-e|--end seconds] ...

Мне просто не хватало имени файла . При его вызове, как указано выше, RRDTool интерпретирует мою строку DEF как имя файла. Это вызовет ошибку при записи результата в этот файл, но RRDTool завершит работу с ошибкой в ​​строке VDEF, поскольку данные никогда не определялись.

Спасибо за все комментарии. Я просто хотел прояснить некоторые моменты, которые я тестировал:
- Имя переменной data не вызывает никаких проблем
- Это полностью работает, чтобы иметь DS с именем 1 , и вы также могли бы получить к нему доступ в CDEF и т. Д.

Спасибо за помощь!

1
Naturjoghurt 29 Янв 2015 в 12:14

Вы не можете создать строку из VDEF - это значение, и оно действительно только с функцией агрегирования.

От: http://oss.oetiker.ch/rrdtool/doc/rrdgraph_rpn.en .html LSLSLOPE действителен.

Однако у вас должна быть возможность построить график data, например

LINE1:data#00CC00:data

То, что вы не можете - и получить «не представляет собой число», заставляет меня задаться вопросом, что находится в вашем источнике данных. Я предлагаю вам взглянуть на xport, чтобы сбросить RRD и посмотреть, что там внутри.

Возможно, вы не получаете достаточно входных данных для построения CDP в своем RRD, поэтому все они UNKNOWN или NaN.

(Недействительный VNAME действительно заставляет меня задуматься - пробовали ли вы изменить его на что-то другое, кроме data - которое, похоже, могло быть зарезервированным словом.)

0
Sobrique 28 Янв 2015 в 18:39