24時間稼働のために――サーバ管理者が知っておくべき自動復帰ノウハウSNMPによるネットワークモニタリング「第2版」(1/2 ページ)

24時間コンソールの前に張りつくなど勘弁だ。サーバ管理者が知っておくべきhttpのモニタリングと、自動復帰のためのノウハウを紹介しよう。

» 2007年05月23日 07時00分 公開
[大澤文孝,ITmedia]

 オンライン・ムックPlus「SNMPによるネットワークモニタリング“第2版”」では、Net-SNMPを使ってサーバやネットワーク機器を監視するための方法を紹介している。SNMPとは何か? という基本概要から、5年前の特集記事を刷新する最新情報の掲載まで、回を重ねることで充実させていく予定だ。

 Net-SNMPでは、SNMP経由でオブジェクトに値を設定したときに、特定のコマンドを実行できる機能がある。この記事では、デーモンhttpdのプロセスを監視し、プロセスが途絶えた場合に「/sbin/service httpd restart」のコマンド実行でhttpdを再起動する例を見ていこう。

 基本的な設定は、リスト1のようになる。

 この設定を行うと、SNMP経由から値を書き込むことで「/sbin/service httpd restart」というコマンドを実行できる。そのため、コミュニティー名やユーザー認証、接続元IPアドレスなどを十分に確かめておく必要がある。第三者がSNMP経由で書き込めないことを確認した上で設定確認を行ってほしい。

リスト1■snmpd.confに含める構文例

proc httpd
procfix httpd /sbin/service httpd start

 snmpd.confで設定するのはprocディレクティブとprocfixディレクティブの2つだ。

  • procディレクティブ

 procでは監視するプロセス名を指定する。このプロセス名は「ps -e」で取得できる名称である。ここでは「httpd」を指定する。


proc [プロセス名] [最小値] [最大値]

 この設定をすると、該当プロセスが、「最小値を下回ったとき」または「最大値を上回ったとき」に、エラーがあったとみなされ、「procErrorFlag.インデックス番号」のOIDをもつオブジェクトの値が「1」になる。

 ここでの「インデックス番号」は、procを指定した順に「1」「2」…と割り当てられる連番だ。すぐあとに説明するが、リスト1では1つしかprocを指定していないので、インデックス番号は「1」となる。

 「最小値」や「最大値」は省略できる。省略したときには、それぞれ「1」と「無限大」がデフォルト値になる。すなわち「1つ以上起動していないとエラー」という意味になる。

  • procfixディレクティブ

 procfixディレクティブでは、「プロセス名」と「SNMP経由で値が設定されたときに呼び出したいコマンド」を記述する。プロセス名は、procディレクティブに記述したのと同じ名前でなければならない。


procfix [プロセス名] [コマンド] [引数]

  • 動作の確認

 設定が終わったら、snmpdを再起動しよう。

 httpdプロセスが起動しているときに、snmpwalkコマンドでprTable以下を調べると、次のようになる。ここでは、SNMPv1でsnmpwalkというコミュニティー名を指定している。実際に試すときには「-c」オプションを適時変更してほしい。


$ snmpwalk -c hogeprivate -v 1 localhost prTable
UCD-SNMP-MIB::prIndex.1 = INTEGER: 1
UCD-SNMP-MIB::prNames.1 = STRING: httpd
UCD-SNMP-MIB::prMin.1 = INTEGER: 0
UCD-SNMP-MIB::prMax.1 = INTEGER: 0
UCD-SNMP-MIB::prCount.1 = INTEGER: 9
UCD-SNMP-MIB::prErrorFlag.1 = INTEGER: 0
UCD-SNMP-MIB::prErrMessage.1 = STRING: 
UCD-SNMP-MIB::prErrFix.1 = INTEGER: 0
UCD-SNMP-MIB::prErrFixCmd.1 = STRING: /sbin/service httpd start

 ここで


UCD-SNMP-MIB::prErrorFlag.1 = INTEGER: 0

の個所に着目しておいてほしい。これは「エラーがない」ことを示すものだ。次に、httpdプロセスを停止した状態で同じく実行すると、


UCD-SNMP-MIB::prErrorFlag.1 = INTEGER: 1

となり、「エラーがある」ことが判別できる。

       1|2 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.