MRTG CPU和内存在一起

时间:2014-09-10 10:55:28

标签: snmp router mrtg

所以,我有一台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

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

2 个答案:

答案 0 :(得分:1)

在单个本机Target中实际上不可能这样做,因为计算适用于这两个值。虽然您可以使用pseudoZero和pseudoOne来部分解决这个问题,但您无法通过这种方式进行管理。

我建议您有一个用于CPU的目标,以及一个用于内存计算的单独目标,这使得它更加简单。然后,您可以使用Memory Target上的'dorelpercent'选项,并将used和total取出为单独的值。

然而,如果你真的,真的,必须在同一个目标中,有一种尴尬的方式来解决它 - 自定义数据转换功能。

你可以定义一个自定义perl函数,将第二个项目乘以100,如果它小于1,并将其存储到flie'converting.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目标。如果你正在使用带有Routers2的MRTG / RRD,你总是可以将这两个目标组合成一个图表来显示。

另一种方法是编写一个自定义集合脚本来执行检索和处理,并将其定义如下:

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

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

答案 1 :(得分:0)

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

( 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