0

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

现在我的问题是,单个 rrd 命令从 RRD 文件中获取最大输入、最大输出、最小输入和最小输出值。

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

请帮忙。

4

1 回答 1

0

对于 MRTG 创建的 RRD 文件,“输入”和“输出”数据源分别命名为“ds0”和“ds1”。存在 8 个 RRA;这些对应于 AVG 和 MAX 汇总的 5 分钟、30 分钟、2 小时和 1 天的粒度。默认情况下,它们的长度为 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"

对此有几点说明:

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

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

于 2015-10-01T21:49:36.473 回答