所以,我有一台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
这甚至可能吗?或者,我是否必须有一个单独的内存图?
答案 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)
您可以使用 PseudoOne
和 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