vmWare上のDebianにSNMP仕込んでMRTGで速度計測

Cloudn上のVMにSNMPD

vmWareなのか、何を利用しているか分からないけど、クラウド上で動いているバーチャルマシンにMRTGを仕込みます。

Ubuntu使ってます

Debian にMRTGを追加してみる。

Jessieになって、SNMPはv3を使うのが標準なのか、v2,v1でなんとか設定しようとおもってもうまくいかず。
snmpwalk -v 1 localhost -c hoge

解説

snmpwalk -v 1 [ターゲットIP Address] -c [コミュニティ名]

で、ちゃんとsnmpにアクセスできるか確認できる

 

クライアント(エージェント側)

apt-get install snmpd snmp

 

vi /etc/snmp/snmpd.conf

 

rocommunity コミュニティ名 許可するアドレス

rocommunity hogehoge 192.168.0.0/24とか

※注意 ここで許可するIPアドレス間違うとこんな感じにで接続できない

ログの場所

/var/log/syslog

Jul  5 16:36:09 sakura02 snmpd[4361]: message repeated 5 times: [ Connection from UDP: [*.*.*.*]:41809->[*.*.*.*]:161]
Jul  5 16:36:25 sakura02 ntpd[629]: Soliciting pool server 2001:67c:1560:8003::c8
Jul  5 16:37:09 sakura02 snmpd[4361]: Connection from UDP: [127.0.0.1]:37962->[127.0.0.1]:161
Jul  5 16:37:14 sakura02 snmpd[4361]: message repeated 5 times: [ Connection from UDP: [127.0.0.1]:37962->[127.0.0.1]:161]

やっとできた。ここのつづりを間違っていたのか、それとも localhostも試そうとしていたから頭がこんがらがっていたのか。アクセスさせたい特定のホストからアクセスできるようになる。

#  Listen for connections from the local system only
#agentAddress  udp:127.0.0.1:161
#  Listen for connections on all interfaces (both IPv4 *and* IPv6)
agentAddress udp:161,udp6:[::1]:161

/etc/init.d/snmpd restart

うゎーここだー!
注意 /etc/init.d/snmpd reload
して設定を読み込ませ直ししてたけど、外部ホストからはどうもrefuseされちゃう。

確認したら、

/etc/snmp# netstat -an |egrep :161
udp 0 0 127.0.0.1:161 0.0.0.0:*

 

あれれ、ローカルしか受け付けてない(ローカルからもうまくいかなくって参ったんだけど)

/etc/init.d/snmpd restartしたら

/etc/snmp# netstat -an |egrep :161
udp 0 0 0.0.0.0:161 0.0.0.0:*

 

となったよ、、、。どのアドレスからも受付状態。

vi /etc/hosts.allow
snmpd: IPアドレス

Cloudnファイヤーウォールに穴開け

Cloudnは、元々ファイヤーウォール機能をもっていて、許可を書いておかないとアクセスできないので注意。Linuxサーバの手前にファイヤーウォールが来るから、そこに穴をあけて利用するところまでは良かった。

他のクラウドサービスなどでも参考になるかな?何しろサーバポートにアクセスできなければ利用はできない。

MRTGの設定(サーバ側)

/etc# cfgmaker hoge@[target IP Address] >>mrtg.cfg

書式 cfgmaker コミュニティ名@サーバ名 >>設定ファイル名(最後尾に追加)

通常ならこれでいいのだけど、vmWareなど、

/etc#indexmaker mrtg.cfg > /var/www/mrtg/index.html
# cat /etc/cron.d/mrtg
*/5 *   * * *   root    if [ -x /usr/bin/mrtg ] && [ -r /etc/mrtg.cfg ] && [ -d "$(grep '^[[:space:]]*[^#]*[[:space:]]*WorkDir' /etc/mrtg.cfg | awk '{ print $NF }')" ]; then mkdir -p /var/log/mrtg ; env LANG=C /usr/bin/mrtg /etc/mrtg.cfg 2>&1 | tee -a /var/log/mrtg/mrtg.log ; fi

ちゃんとグラフできてるか確認

通常cronを待つと5分経過しないとmrtgが実行されませんが、強制的にこんな感じで実行してやると少しグラフが出てくるのでうまくいっているか分かります。

LANG=C /usr/bin/mrtg /etc/mrtgcfg/mrtg.cfg

クラウド上のサーバからMRTGで速度計測のコツ

クラウド上のサーバって、みんなでnicを共有化しているせいかコマンドに値を返さないものがあるようです。ifSpeedとifHighSpeedで0を返すものはMRTG上計測できないとするようですが、

ゼロを報告するすべてのインターフェイスを100Mbpsに設定

-zero-speed = 100000000

をしてやると、MRTGで値が取得できるNICとして登録できるようです。(推定形なのはちょっと確信がないから。とりあえずこうやったらできたという報告として捉えてください。)

書式 cfgmaker -zero-speed = 100000000 コミュニティ名@サーバ名 >>設定ファイル名(最後尾に追加)