我正在使用RRDTool来管理和绘制我的性能数据。
目前,我正在从 bash 脚本调用 RRDTool,但我收到一个错误,我无法修复。
我的 Bash 脚本如下所示:
# 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
我试图用这个简单的例子来解决 y = m*x + b 中的 m。
我的性能数据如下所示:
<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
当尝试像这样访问保存在变量数据中的数据时,只是为了检查问题是否出在我的 VDEF 行中:
LINE1:data#0000FF:"data"
我收到以下错误:
ERROR: parameter 'data' does not represent a number in line LINE1:data#0000FF:data
这澄清了问题出在 DEF 行的某个地方,但我不知道为什么会发生这种情况。
有没有人知道为什么我会收到这些错误消息以及如何解决此问题?
任何帮助表示赞赏。提前谢谢。
我发现了问题。这只是我犯的一个非常愚蠢的错误。我打电话给:
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 行上退出并显示错误,因为从未定义过数据。
感谢您的所有评论。我只是想澄清我测试的一些事情:
- 变量名称数据不会导致任何问题
- 拥有名称为 1 的 DS 是完全有效的,您也可以在 CDEF 中访问它,依此类推
感谢您的帮助!
你不能做一行VDEF
- 它是一个值,并且只对聚合函数有效。
发件人:http://oss.oetiker.ch/rrdtool/doc/rrdgraph_rpn.en.html LSLSLOPE 有效。
不过,您应该能够绘制data
图,例如
LINE1:data#00CC00:data
你不能 - 并且得到"不代表一个数字"让我想知道你的数据源中有什么。我建议你看看xport
转储RRD,看看里面有什么。
您可能没有获得足够的输入数据来在 RRD 中构建 CDP,因此它们都是UNKNOWN
或NaN
。
(无效的 VNAME 确实让我想知道 - 您是否尝试过将其更改为 data
以外的其他内容 - 这似乎可能是一个保留字。