2014-09-10 57 views
0

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

我想在我的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)):[email protected] 
# ... rest of config 

这甚至有可能吗?或者,我将不得不为内存单独绘制一张图表?

+1

你用什么来收集/存储数据并建立MRTG图?我将创建一个rrd,分别存储3个值,然后在生成图时在“CDEF”中进行百分比计算。 – Matt 2014-09-10 12:16:07

回答

1

由于计算适用于这两个值,因此在单个本地目标中不可能做到这一点。虽然您可以使用pseudoZero和pseudoOne来部分解决此问题,但您无法通过这种方式进行管理。

我会建议你有一个目标CPU和一个单独的目标为内存计算,这使得它更简单。然后,您可以使用Memory Target上的'dorelpercent'选项,并使用它将总数和总数读取到单独的值中。然而,如果你确实必须有相同的目标,那么就有一种尴尬的方式来克服它 - 自定义数据转换函数。

您可以自定义一个Perl函数由100乘以第二项,如果小于1,而这个存储到一个flie“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:[email protected] - pseudoZero&freememoid:comm&rtr)/(pseudoOne&totalmemoid:[email protected]) |topercent 

这导致= cpupercent,时间= memusedpercent

我不会建议做这种方式,虽然,最好坚持独立的内存和CPU目标。无论如何,如果您将MRTG/RRD与Routers2一起使用,您总是可以将这两个目标合并为一个图表进行显示。

另一种替代方法是编写自定义集合脚本,并检索和处理,并把它定义如下:

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

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

+0

我不知道你可以为目标调用脚本!这改变了一切:D 非常感谢您的帮助。 – Rowshi 2014-09-11 10:00:25