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

サーバの稼働状態ってのは、離れていても気になるもの。出来ることならば、動作履歴などをとっておいて、どんな具合で動いていたかを見ておきたいもんですよね。ちなみに、世間一般的には、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

これは簡単ですわ。

# emerge net-snmp
Page Top

設定 anchor.png

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

Page Top

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

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

今度は、smartmontoolをインストールして、サーバの情報が取れるようにしてみてね。ここ参照。さらにfileHDD温度取得するシェルをつくってみます。このシェルに、引数として、温度を取得したい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

Front page   Freeze Diff Backup Copy Rename ReloadPrint View   New Page Page list Search Recent changes   Help   RSS of recent changes (RSS 1.0) RSS of recent changes (RSS 2.0) RSS of recent changes (RSS Atom) Powered by xpWiki
Counter: 8441, today: 1, yesterday: 1
Princeps date: 2010-11-26 (Fri) 00:52:50
Last-modified: 2010-11-26 (Fri) 01:41:50 (JST) (5066d) by maruo
ページ内検索

ログイン

ユーザー名:


パスワード:





パスワード紛失

メインメニュー

サブメニュー
自宅鯖計画

Gentoo Linuxな生活

玄箱HGにGentoo格闘記

航空ショーへ行こう

モータースポーツな世界

奥深き写真の世界への誘い

我思う ゆえに我あり



携帯用QRコード