ページへ戻る

− Links

 印刷 

Gentoo Linuxな生活​/SNMPで悩む のソース :: Nest Of Hawk

xpwiki:Gentoo Linuxな生活/SNMPで悩むのソース

« Prev[3]  
*サーバをうまくリモート監視できる手段はないものか [#j920fb62]
サーバの稼働状態ってのは、離れていても気になるもの。出来ることならば、動作履歴などをとっておいて、どんな具合で動いていたかを見ておきたいもんですよね。ちなみに、世間一般的には、SNMP((Simple Node Management Protocol))なんてものがあったりします。これは、ある機器が、SNMPに対応していれば、ですが、MIBと呼ばれるオブジェクトを、SNMPプロトコルをつかって呼び出すと、そのマシンの状態を読むことができたり、設定を変更したりすることができるプロトコルです。で、機器側に乗っている、SNMPで問い合わせられる側をSNMPエージェント、SNMPで問い合せてくる側をSNMPマネージャといいます。

SNMPのMIBは、RFCなんかで定義されているので、普通はあるMIBオブジェクトは、こういう属性の数値が取れるMIB、てのが決まってます。この機器は、XX MIBに対応してるとしておけば、XX MIBの情報が必ず取れる。で、SNMPマネージャ側は、データを取得してなんらか加工した上で表示とかしてやればいいわけです。SNMPマネージャも、XX MIBに対応してます、というマネージャさえ使えば、どんなんでもOK。

さて、その前準備として、SNMPエージェント側の設定をしてまいります。

*インストール [#yfb0c6d2]
これは簡単ですわ。
 # emerge net-snmp

*設定 [#k55b7830]
これには、/etc/snmp/snmpd.confを編集いたします。snmpd.confの設定にはある段階があります。まず最低限の設定項目はこいつら。
:com2sec|SNMPでのアクセスを許可するホストとコミュニティ名(合言葉)
:group|com2secで定義したホストのアクセスプロトコル(SNMPv1/SNMPv2c/SNMPv3)
:view|上記グループにアクセス許可するMIBオブジェクト
:access|上記グループのアクセス許可属性(認証/読み書き等)
さて、こんなふうに設定します
 #            ラベル     ホスト名(IPアドレス)    コミュニティ名
 com2sec local     localhost                local
 #        グループ名     プロトコル(この例はSNMPv2c     ラベル
 group MyROGroup        v2c                             local
 # 全てのMIBにアクセス出来る設定
 view all    included  .1                               80
 #          グループ名    ??     ??          認証      ??      読み  書き     ??
 access MyROGroup ""      any       noauth    exact  all    none   none
 #どこにあるか識別名を書いておく
 syslocation anywhere
 #管理者名とかの識別名を書いておく
 syscontact foovar <foovar@anywhere.jp>

ここまで書いて
 # /etc/init.d/snmpd start
すると、Linuxで取得できるMIBがGet出来たりします。こんな感じ
 # snmpwalk -v 2c -c local localhost system
 SNMPv2-MIB::sysDescr.0 = STRING: Linux someHost 2.6.XX #1 XXXXXX
 SNMPv2-MIB::sysObjectID.0 = OID: NET-SNMP-MIB::netSnmpAgentOIDs.10
 DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (18562973) 2 days, 3:33:49.73
 SNMPv2-MIB::sysContact.0 = STRING: foovar <foovar@anywhere.jp>
 SNMPv2-MIB::sysName.0 = STRING: someHostname
 SNMPv2-MIB::sysLocation.0 = STRING: anywhere
                                      .
                                      .
                                      .

*カスタマイズ [#tdcbac53]
**CPU温度が取れるようにしてみる [#yea8c670]
まず、lm_sensorsとかをインストールして、サーバの情報が取れるようにしてみてね。[[ここ>GentooLinuxな生活/サーバー監視方法で悩む#f89d78bf]]参照。で、さらに{{cputemp.pl,CPU温度取得するシェル}}をつくってみます。ここまで良いでしょうかね。
このシェルを実行してみると、まんま温度が表示されます。さて、ここで、snmpd.confを編集します。
 exec cputemp /usr/local/bin/cputemp.pl
こんな行追加。でsnmpd再起動。そうすると…あるMIBをgetすると、このシェルを実行してくれるようになるのですよ。
 #  snmpwalk -v 2c -c local localhost .1.3.6.1.4.1.2021.8
 UCD-SNMP-MIB::extIndex.1 = INTEGER: 1
 UCD-SNMP-MIB::extNames.1 = STRING: cputemp
 UCD-SNMP-MIB::extCommand.1 = STRING: /usr/local/bin/cputemp.pl
 UCD-SNMP-MIB::extResult.1 = INTEGER: 0
 UCD-SNMP-MIB::extOutput.1 = STRING: 35        ←これが温度
 UCD-SNMP-MIB::extErrFix.1 = INTEGER: noError(0)
 UCD-SNMP-MIB::extErrFixCmd.1 = STRING:
ね。なかなか面白いでしょう。

**HDD温度を取れるようにしてみる [#y0fd8066]
今度は、smartmontoolをインストールして、サーバの情報が取れるようにしてみてね。[[ここ>GentooLinuxな生活/サーバー監視方法で悩む#b25ea45e]]参照。さらに{{hddtemp.pl,HDD温度取得するシェル}}をつくってみます。このシェルに、引数として、温度を取得したいHDDデバイス名(/dev/sdaとか)を指定すると、指定したHDDデバイスの温度が取得できます。
で、同じようにsnmpd.confに追加する。
 exec hddtemp /usr/local/bin/hddtemp.pl /dev/sda
で、snmpd再起動。するってと
 #  snmpwalk -v 2c -c local localhost .1.3.6.1.4.1.2021.8.1.101
 UCD-SNMP-MIB::extOutput.1 = STRING: 35   ←さっきのCPU温度
 UCD-SNMP-MIB::extOutput.2 = STRING: 39   ←追加したHDD温度

というようにHDDの温度も取得できましたね。

こんなふうに、外部コマンド実行もできます。また、HDDの容量がある設定値を超えたらアラームとか、指定したプロセスがいるかを監視するとか、loadaverageの設定値を超えたらアラームなど、いろいろと機能があります。必要に応じて設定してみてくださいね~

« Prev[3]