1

所以,我有一个 Adtran 路由器,我想在一个图表中同时监控 CPU 和内存利用率。不幸的是,Adtran 没有像 CPU 利用率那样提供内存利用率的百分比指标。它确实提供了两种 OID:一种以字节为单位提供空闲内存,另一种以字节为单位提供总内存。

我想在我的 MRTG 配置中创建一个 cpu_memory 目标来进行必要的数学运算,但我看不到这样做的方法。理想情况下,它会像这样工作:

# CPU Utilization OID: .1.3.6.1.4.1.664.5.53.1.4.1.0
# Total Memory OID: .1.3.6.1.4.1.664.5.53.1.4.7.0 (adGenAOSHeapSize)
# Free Memory OID: .1.3.6.1.4.1.664.5.53.1.4.8.0 (adGenAOSHeapFree)

Target[rtr-cpu_mem]: .1.3.6.1.4.1.664.5.53.1.4.1.0&( 100 - ( .1.3.6.1.4.1.664.5.53.1.4.8.0 / .1.3.6.1.4.1.664.5.53.1.4.7.0 ) ):public@router.local
# ... rest of config

这甚至可能吗?或者,我是否必须有一个单独的内存图表?

4

2 回答 2

1

这在单个原生 Target 中实际上是不可能做到的,因为计算适用于这两个值。虽然您可以使用 pseudoZero 和 pseudoOne 来部分解决此问题,但您无法以这种方式管理它。

我建议你有一个用于 CPU 的目标,以及一个用于内存计算的单独目标,这样会更简单。然后,您可以在 Memory Target 上使用“dorelpercent”选项,并让它将 used 和 total 提取到单独的值中。

但是,如果您真的,真的,必须在同一个目标中使用 then,则有一种笨拙的方法来组合它 - 自定义数据转换功能。

您可以定义一个自定义 perl 函数,将第二项乘以 100(如果它小于 1),并将其存储到文件“conversion.pl”中

sub topercent {
  my $value = shift;
  return ($1 * 100) if( $value =~ /([01]\.\d*)/ and ($1<=1));
  return $value;
}

然后,像这样定义您的目标(适当地替换 cpuoid、totalmemoid 和 freememoid):

ConversionCode: /path/to/conversion.pl
Target[cpumem]: ( cpuoid&totalmemoid:comm@rtr - pseudoZero&freememoid:comm&rtr ) / ( pseudoOne&totalmemoid:comm@rtr ) |topercent

这导致 In=cpupercent, Out=memusedpercent

不过,我不建议这样做。最好坚持单独的内存和 CPU 目标。如果您将 MRTG/RRD 与 Routers2 一起使用,则始终可以将这两个目标组合成一个图形进行显示。

另一种选择是编写一个自定义集合脚本来进行检索和处理,并像这样定义它:

Target[cpumem]: `myscript.sh community router`

myscript.sh输出四行;CPU 百分比、内存百分比和两个空行。

于 2014-09-10T21:34:17.623 回答
0

PseudoOne您可以使用and对每个值进行单独计算PseudoZero,例如:

( PseudoZero&PseudoOne:community@host * 100 - memUsed&cpuIdle:community@host )
  * ( PseudoOne&PseudoZero:community@host * 99 + PseudoOne&PseudoOne:community@host )
  * ( PseudoZero&PseudoOne:community@host - PseudoOne&PseudoZero:community@host )
  / memTotal&PseudoOne:community@host

这将计算以下内容:

memPercent = 100 * memUsed / memTotal
cpuPercent = 100 - cpuIdle
于 2021-02-07T15:11:45.490 回答