ページへ戻る

− Links

 印刷 

Gentoo Linuxな生活​/SNMPで悩む :: Nest Of Hawk

xpwiki:Gentoo Linuxな生活/SNMPで悩む

ページ内コンテンツ
  • サーバをうまくリモート監視できる手段はないものか
  • インストール
  • 設定
  • カスタマイズ
    • CPU温度が取れるようにしてみる
    • HDD温度を取れるようにしてみる

サーバをうまくリモート監視できる手段はないものか anchor.png[1]

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

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

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

Page Top

インストール anchor.png[2]

これは簡単ですわ。

# emerge net-snmp
Page Top

設定 anchor.png[3]

これには、/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
                                     .
                                     .
                                     .
Page Top

カスタマイズ anchor.png[4]

Page Top

CPU温度が取れるようにしてみる anchor.png[5]

まず、lm_sensorsとかをインストールして、サーバの情報が取れるようにしてみてね。ここ[6]参照。で、さらにfileCPU温度取得するシェル[7]をつくってみます。ここまで良いでしょうかね。 このシェルを実行してみると、まんま温度が表示されます。さて、ここで、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:

ね。なかなか面白いでしょう。

Page Top

HDD温度を取れるようにしてみる anchor.png[8]

今度は、smartmontoolをインストールして、サーバの情報が取れるようにしてみてね。ここ[9]参照。さらにfileHDD温度取得するシェル[10]をつくってみます。このシェルに、引数として、温度を取得したい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の設定値を超えたらアラームなど、いろいろと機能があります。必要に応じて設定してみてくださいね~


*1 Simple Node Management Protocol

Last-modified: 2010-11-26 (金) 01:41:50 (JST) (4893d) by maruo