ネットワーク機器のモニタリングは、運用における重要な課題の1つだ。現代では、アプリケーションレベルのモニタリングも重要視されつつあるが、従来からのハードウェア寄りな監視も全体把握の上で重要視しなければならない。
この記事は会員限定です。会員登録すると全てご覧いただけます。
第7回目「RRDtoolでグラフ化モニタリング」では、SNMPを使って統計情報を取得してグラフ化する方法について説明した。
統計情報に加えて、SNMPのもうひとつの主要な使い方が、「何か事が起きたときに、それを管理者へと伝える」というものだ。そのためには、オブジェクトの値を監視して、異常値になったときにSNMPトラップを発生させるという手法をとる。
今回は、その関連情報としてSNMPトラップを使って異常を通知する仕組みを解説していこう。
この記事の連載であるオンライン・ムックPlus「SNMPによるネットワークモニタリング“第2版”」は、2001年5月に公開した「SNMPによるネットワークモニタリング」を元に、6年以上の歳月を経て、枯れた情報を最新環境に合うよう刷新したものだ。
「第1回 サーバ監視にSNMPを使う理由」では、SNMPトラップの動きについて少しだけ説明した。
しかし概要に留めたので、ここで改めてより詳細に、SNMPトラップがどのようなものかについて説明しておきたい。なぜかといえば、SNMPトラップを適切に設定することでさまざまなイベントモニタリングが可能となるからだ。
SNMPトラップは、SNMPエージェント側からSNMPマネージャへと異常を通知する仕組みだ。SNMPトラップを受け取るSNMPマネージャは、一般にUDPポート162で待ち受けしている。
SNMPエージェントは、このSNMPマネージャに向けて、状態異常などの通知をUDPパケットとして送信する仕組みを持つ。
SNMPトラップは、大きく分けて「SNMPv1のSNMPトラップ」「SNMPv2以降のSNMP notification」「informリクエスト」の3種類に分けられる(「第3回 SNMPによるモニタリングセキュリティの実体」を参照)。このうちinformリクエスト以外は、到着確認を行わないという特徴もある。
すなわちSNMPエージェントに本当にその通知が届いたのかが分からないということだ。
それに対してinformリクエストでは相手に到着したかどうかを確認するという違いがある。Net-SNMPでは、SNMPトラップを次の主なプログラムでサポートする(図1)。
なお、Net-SNMPはSNMPトラップとinformリクエストの両者をサポートする。本稿では、「SNMPトラップ」としか記述しないが、これにはinformリクエストも含まれる表現であることを理解しておいてほしい。
1)snmpdデーモン
すでに、この連載で説明してきたsnmpdデーモンは、異常値を関知したときに、SNMPトラップを発生させる機能を持つ。どのようなときに、どのような種類のSNMPを発生させるのかは、snmpd.confで設定する(具体的な設定手順については、すぐあとに説明する)。
2)snmptrapdデーモン
SNMPトラップを受け取るためのデーモンだ。
このデーモンは、受け取ったSNMPトラップの内容をログや標準出力に書き出したり、プログラムを動かしたり、他のSNMPマネージャに転送したりする機能を持つ。
例えばsnmptrapdデーモンからメールを送信するプログラムを起動するように設定しておけば、何か異常を関知したときに、それを管理者へと伝えられるようになる。
実際、Net-SNMPには、そのような目的のためのtraptoemailというコマンドが付属している。
3)snmptrapコマンド
任意のSNMPトラップを送信するコマンドだ。このコマンドを使うと、好きなタイミングでSNMPトラップを発行できる。
ここで上記「3)」のsnmptrapコマンドに着目しよう。多くの場合、SNMPトラップはSNMPエージェントによって発生されるものだ。つまり、サーバやネットワーク機器の不具合を伝える目的で使われる。
しかしsnmptrapコマンドを使うと、好きなタイミングでSNMPトラップを発行できる。
そのため、例えば「あるデーモンの起動スクリプトや終了スクリプトにおいて、デーモンの起動や終了を伝えるSNMPトラップを発行する」、または「開発者が実装したWebアプリケーションにおいて何か致命的な問題が発生したら、それをSNMPトラップで伝える」といった使い方もでき、用途は、サーバやネットワーク機器の監視に限定されないものだ。
なお、本稿では説明しないが、WebアプリケーションからSNMPトラップを発行したいときには、snmptrapコマンドではなく、PerlやPHPのSNMPライブラリを利用するほうがよい。
Copyright © ITmedia, Inc. All Rights Reserved.