snmpを利用して対象サーバのメモリ使用率(バッファやキャッシュは含まず)を監視するプラグインをPerlで作成してみました。結果値は少数第二位を切り捨てにしています。またPNPグラフに対応するためにその分も結果に出力してます。
そのままOSのsnmpwalkコマンドを利用して値を取得、分解して使用率を算出する単純な仕組みです。
プラグインへの引数は下記となります。
- SNMPコミュニティ名
- 対象サーバのIPアドレス
- Warning閾値
- Critical閾値
実際のプラグインのソースは下記。
はい。Perlダメダメなので適当で申し訳ありません…。
#!/usr/bin/perl ######################################################################## # Nagios Plugin for Mem-used for SNMP. ## ### Argument Community / HostIP / Warning / Critical #### Create 2014.8.25 ##### ####################################################################### # 引数を取得 if( @ARGV != 4 ){ print "Argument is not enough.(".@ARGV.")"; exit(3); } my $community = $ARGV[0]; my $hostip = $ARGV[1]; my $warning = $ARGV[2]; my $critical = $ARGV[3]; # メモリ搭載容量を取得 $resultline = `snmpwalk -v 1 -c $community $hostip UCD-SNMP-MIB::memTotalReal.0`; @temp1 = split( /INTEGER: /, $resultline ); $memTotal = $temp1[1]; # メモリ空き容量を取得 $resultline = `snmpwalk -v 1 -c $community $hostip UCD-SNMP-MIB::memAvailReal.0`; @temp1 = split( /INTEGER: /, $resultline ); $memAvail = $temp1[1]; # 対象のメモリ使用率を算出 (小数点第二位以下を切り捨て) $temp1 = ($memTotal - $memAvail ) / $memTotal * 1000; $memusedper = int($temp1) / 10; # 閾値に応じて結果を出力 print "Mem Used ".$memusedper."% | Used=".$memusedper; if( $memusedper >= $critical ){ exit(2); }elsif( $memusedper >= $warning ){ exit(1); }else{ exit(0); }
標準のnagios pluginにメモリ使用率の監視プラグインを含んでてくれると助かるんですが… ないってことは需要がないんですかね?
とりあえずこれでメモリ使用率の監視ができるようになります。