我使用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 最终堆栈大小 != 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 教程,以更好地了解如何指定 RPN。