Cacti - ERROR: RPN final stack size != 1 with 4 Graphs

Cacti - ERROR: RPN final stack size != 1 with 4 Graphs

我使用 Cacti 和 rrdxport 来获取 2 个图的总和,它工作正常。

rrdtool xport --start now-5min --end now-5min DEF:out1=sbc1_fs_call_five_min_do_137.rrd:fs_call_five_min_do:LAST DEF:out2=sbc2_fs_call_five_min_do_147.rrd:fs_call_five_min_do:LAST CDEF:sum=out1,out2,+ XPORT:sum:"output sum"

输出:

<xport> 
<meta>
<start>1524226500</start>
<step>300</step>
<end>1524226500</end>
<rows>1</rows>
<columns>1</columns>
<legend>
<entry>output sum</entry>
</legend>
</meta>  
<data>
<row><t>1524226500</t><v>7.1630000000e+02</v></row> 
</data>
</xport>

现在我想添加 4 个图表,但我总是得到错误 RPN final stack size != 1。

rrdtool xport --start now-5min --end now-5min DEF:out1=sbc1_fs_call_five_min_do_137.rrd:fs_call_five_min_do:LAST DEF:out2=sbc1_berlin_fs_call_five_min_do_1176.rrd:fs_call_five_min_do:LAST DEF:out3=sbc2_fs_call_five_min_do_147.rrd:fs_call_five_min_do:LAST DEF:out4=sbc2_berlin_fs_call_five_min_do_1187.rrd:fs_call_five_min_do:LAST CDEF:sum=out1,out2,out3,out4,+ XPORT:sum:"output sum" ERROR: RPN final stack size != 1

为什么它适用于 2 个图形而不适用于 4 个?
感谢您的帮助!

您错误地指定了 RPN 函数,堆栈中还剩不止一项。

此函数按预期工作:

CDEF:sum=out1,out2,+

这是因为 RPN 命令序列表示:

  • out1放入堆栈,
  • out2放入堆栈,
  • 取出前两项并相加,并将结果压入堆栈

这导致堆栈包含一个值为 (out1+out2) 的项目。

然而,您的第二次尝试是这样的:

CDEF:sum=out1,out2,out3,out4,+

这意味着:

  • out1放入堆栈,
  • out2放入堆栈,
  • out3放入堆栈,
  • out4放入堆栈,
  • 取出前两项并相加,并将结果压入堆栈

因此,堆栈现在包含三项内容 -- out1、out2 和 (out3+out4)。 RRDTool 检查堆栈大小以捕获任何 RPN 错误和错误,因为它发现堆栈中还剩不止一项。

你应该做的是在你的定义中再添加两个加法运算:

CDEF:sum=out1,out2,out3,out4,+,+,+

这为 RPN 增加了两个步骤,以添加堆栈中剩余的两项并获得您想要的结果。

我建议您完成 RPN tutorial 以更好地了解如何指定 RPN。