如何在单个rrd命令中从rrd文件获取最大值和最大值

时间:2015-10-01 04:23:11

标签: php rrdtool rrd mrtg

我们设置了MRTG来监控网络。因此我们使用RRD工具来获取绘制图形数据。现在我创建了一个实际从RRD文件中获取数据的脚本,因此从获取的数据中我需要最大输入和最大输出24小时。现在使用这些最大值,我计算每个客户/链接的错误利用率。

现在我的问题是,单个rrd命令从RRD文件中获取max in,max out,min in和min out值。

由于我是这个RRD的新手,所以如果命令也随你的解决方案提供,我将不胜感激。

请帮忙。

1 个答案:

答案 0 :(得分:0)

使用MRTG创建的RRD文件,' in'和' out'数据源命名为' ds0'和' ds1'分别。存在8个RRA;这些对应于AVG和MAX汇总的5min,30min,2hr和1day的粒度。默认情况下,这些长度为400(旧版MRTG)或长度800(较新版本的MRTG),这意味着您可能分别拥有2天,2周,2个月和2年的时间窗口的RRA。 (注意,RRDTool 1.5可能省略1pdp MAX RRA,因为它在功能上与1pdp AVG RRA相同)

这对您意味着什么:

  • 您没有MIN类型RRA。如果在最近2天内工作,则可以从最高粒度的AVG RRA计算出来。否则,您的数据将变得越来越不准确。
  • 您的最低粒度RRA每天保持MAX值。然而,这些日子在UCT午夜而不是当地时间午夜分开。您没有指定需要计算的24小时窗口。

如果您只对最近的24小时期间的计算感兴趣,那么所有计算都可以使用最高粒度的RRA。

请注意,因为步骤边界都是使用UCT计算的,除非您居住在该时区,否则您无法使用FETCH或XPORT获取所需的数据,因为您需要在一般时间窗口内进行汇总。

要检索数据,您可以使用以下内容:

rrdtool graph /dev/null -e 00:00 -s "end-1day" --step 300 
  DEF:inrmax=target.rrd:ds0:AVERAGE:step=300:reduce=MAXIMUM 
  DEF:outrmax=target.rrd:ds1:AVERAGE:step=300:reduce=MAXIMUM 
  DEF:inrmin=target.rrd:ds0:AVERAGE:step=300:reduce=MINIMUM 
  DEF:outrmin=target.rrd:ds1:AVERAGE:step=300:reduce=MINIMUM
  VDEF:inmax=inrmax,MAXIMUM 
  VDEF:inmin=inrmin,MINIMUM
  VDEF:outmax=outrmax,MAXIMUM 
  VDEF:outmin=outrmin,MINIMUM 
  LINE:inrmax 
  PRINT:inmax:"In Max=%lf"
  PRINT:inmin:"In Min=%lf"
  PRINT:outmax:"Out Max=%lf"
  PRINT:outmin:"Out Min=%lf"

关于此的几点说明:

  • 我们正在使用' graph'这样我们就可以使用通用时间窗口,而不依赖于阶梯边界
  • 使用rrdgraph以使用通用时间窗口; fetch和xport将在步边界上工作。
  • 我们正在总结最高粒度的RRA
  • 我们使用/ dev / null,因为我们实际上并不想要图形图像
  • 我们必须在图中定义一条虚线,否则我们什么也得不到
  • DEF行指定最高粒度步骤和减少CF.如果您使用5分钟步骤
  • ,则可以跳过此部分
  • 我们使用VDEF计算汇总值,然后使用PRINT
  • 在stdout上打印它们
  • 输出的第一行是图表大小;你可以放弃这个

当你从php脚本中调用rrdtool :: graph时,只需按照与命令行操作相同的方式传递参数。如果您不使用Linux,则可能需要使用/ dev / null以外的其他内容。