Я использую 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 , но я не понимаю, почему это происходит.
Кто-нибудь знает, почему я получаю эти сообщения об ошибках и как решить эту проблему?
Любая помощь приветствуется. Заранее спасибо.
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 и т. Д.
Спасибо за помощь!
Вы не можете создать строку из 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
- которое, похоже, могло быть зарезервированным словом.)
Похожие вопросы
Новые вопросы
bash
Этот тег предназначен для вопросов о сценариях, написанных для командной оболочки Bash. Сценарии оболочки с синтаксисом или другими ошибками, пожалуйста, проверьте их на https://shellcheck.net, прежде чем публиковать здесь. Вопросы об интерактивном использовании Bash, скорее всего, будут актуальны на Unix & Linux Stack Exchange или Super User, чем на Stack Overflow.