24時間コンソールの前に張りつくなど勘弁だ。サーバ管理者が知っておくべきhttpのモニタリングと、自動復帰のためのノウハウを紹介しよう。
オンライン・ムックPlus「SNMPによるネットワークモニタリング“第2版”」では、Net-SNMPを使ってサーバやネットワーク機器を監視するための方法を紹介している。SNMPとは何か? という基本概要から、5年前の特集記事を刷新する最新情報の掲載まで、回を重ねることで充実させていく予定だ。
Net-SNMPでは、SNMP経由でオブジェクトに値を設定したときに、特定のコマンドを実行できる機能がある。この記事では、デーモンhttpdのプロセスを監視し、プロセスが途絶えた場合に「/sbin/service httpd restart」のコマンド実行でhttpdを再起動する例を見ていこう。
基本的な設定は、リスト1のようになる。
この設定を行うと、SNMP経由から値を書き込むことで「/sbin/service httpd restart」というコマンドを実行できる。そのため、コミュニティー名やユーザー認証、接続元IPアドレスなどを十分に確かめておく必要がある。第三者がSNMP経由で書き込めないことを確認した上で設定確認を行ってほしい。
proc httpd
procfix httpd /sbin/service httpd start
snmpd.confで設定するのはprocディレクティブとprocfixディレクティブの2つだ。
procでは監視するプロセス名を指定する。このプロセス名は「ps -e」で取得できる名称である。ここでは「httpd」を指定する。
proc [プロセス名] [最小値] [最大値]
この設定をすると、該当プロセスが、「最小値を下回ったとき」または「最大値を上回ったとき」に、エラーがあったとみなされ、「procErrorFlag.インデックス番号」のOIDをもつオブジェクトの値が「1」になる。
ここでの「インデックス番号」は、procを指定した順に「1」「2」…と割り当てられる連番だ。すぐあとに説明するが、リスト1では1つしかprocを指定していないので、インデックス番号は「1」となる。
「最小値」や「最大値」は省略できる。省略したときには、それぞれ「1」と「無限大」がデフォルト値になる。すなわち「1つ以上起動していないとエラー」という意味になる。
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
となり、「エラーがある」ことが判別できる。
Copyright © ITmedia, Inc. All Rights Reserved.