Snmp MRTG将CPU和内存放在一起

Snmp MRTG将CPU和内存放在一起,snmp,router,mrtg,Snmp,Router,Mrtg,所以,我有一个Adtran路由器,我想在一个图表中同时监控CPU和内存的利用率。不幸的是,Adtran没有像CPU利用率那样提供内存利用率百分比。它确实提供了两个OID:一个以字节为单位提供可用内存,另一个以字节为单位提供总内存 我想在我的MRTG配置中创建一个cpu_内存目标,进行必要的计算,但我看不到一种方法。理想情况下,它的工作原理如下: # CPU Utilization OID: .1.3.6.1.4.1.664.5.53.1.4.1.0 # Total Memory OID: .1.

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

我想在我的MRTG配置中创建一个cpu_内存目标,进行必要的计算,但我看不到一种方法。理想情况下,它的工作原理如下:

# 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
Target[cpumem]: `myscript.sh community router`

这可能吗?或者,我必须为内存创建一个单独的图形吗?

这实际上不可能在单个本机目标中实现,因为计算适用于这两个值。虽然可以使用pseudoZero和pseudoOne部分地解决这个问题,但您不能以这种方式管理它

我建议您为CPU设置一个目标,为内存计算设置一个单独的目标,这会使计算更简单。然后,您可以在内存目标上使用'dorelpercent'选项,并让它将used和total提取到单独的值中

然而,如果你真的,真的,必须在同一个目标中,有一个笨拙的方法来混淆它——自定义数据转换函数

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

sub topercent {
  my $value = shift;
  return ($1 * 100) if( $value =~ /([01]\.\d*)/ and ($1<=1));
  return $value;
}
这将导致in=cpuppercent,Out=memusedpercent

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

另一种方法是编写执行检索和处理的自定义集合脚本,并按如下方式定义:

# 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
Target[cpumem]: `myscript.sh community router`

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

您可以使用
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

您使用什么来收集/存储数据和构建MRTG图?我将创建一个分别存储3个值的rrd,然后在生成图形时在
CDEF
中计算百分比。我不知道您可以为目标调用脚本!这改变了一切:D非常感谢你的帮助。