Reading Time: 2 minutes

SNMP(Simple Network Management Protocol)は、UDP/IPベースのネットワーク監視、ネットワーク管理を行うためのプロトコルです。ルーター、スイッチなどのネットワーク機器、WindowsやUNIXサーバーなどの状態監視、リソース監視、パフォーマンス監視、トラフィック監視を行うために使用します。一般的に、サーバーに対しては、CPU使用率、メモリ使用率、ディスク使用率、プロセス監視、Windowsイベントログ監視、Syslog監視を行います。ネットワーク機器に対しては、各ポート上で送受信されたパケット数、エラーパケット数、ポートの状態(up/down)、およびCPU使用率、メモリ使用率などを監視します。ベンダによっては機器固有の管理項目を公開しているものがあり、きめ細かい監視が可能です。

アジェンダ

SNMPのバージョン

SNMPには、v1/v2c/v3という3つのバージョンが定義されています。

  • SNMPv1 [RFC 1155, RFC 1157] : Get / GetNext / Set / GetResponse / Trapの5つのコマンドが定義されています。
  • SNMPv2c [RFC 1901, RFC 1905, RFC 1906] : コマンドのフォーマット(PDU: Protocol Data Unit)が拡張されており、GetBulk, INFORM request, Reportが追加されました。セキュリティレベルとしては、コミュニティベースとなっており、SNMPv1と同等です。
  • SNMPv3 [RFC 2576, RFC 3410, RFC 3411, RFC 3412, RFC 3413, RFC 3414, RFC 3415, RFC 3416, RFC 3417, RFC 3418, RFC 3584, RFC 3826] : セキュリティ機能が強化されており、PDUの暗号化が可能です。

SNMPのアーキテクチャ

SNMPは、SNMPマネージャとSNMPエージェント間での通信プロトコルです。SNMPマネージャは、SNMPエージェントから送られた管理情報を分かりやすく表示するソフトウェアで、SNMPエージェントは監視される機器上で動作するソフトウェアで管理情報をSNMPマネージャに送信します。SNMPマネージャは、SNMPコマンド(Get/GetNext/GetBulk/Set)を送信します。このコマンドは、管理情報の識別子(OID:Object Identifier)を含んでおり、この識別子で管理情報を一意に識別します。SNMPエージェントはこの識別子に対応した管理情報をSNMPマネージャにGetResponseコマンドで応答します。

  • Get Request : 指定した識別子(OID)の管理情報をSNMPエージェントから取得
  • GetNext Request : 指定した識別子(OID)の次の管理情報をSNMPエージェントから取得
  • Set Request : SNMPエージェントの制御
  • Trap : SNMPエージェントからの状態通知

SNMPコマンドシーケンス

管理情報

管理情報は、MIB(Management Information Base)として定義されています。MIBは、ASN.1(Abstract Syntax Notation One:抽象構文記法1)という記法を使用して定義されています。一般的なSNMPエージェントは、RFC 1213に定義されたRFC1213-MIBを管理情報として実装しています。このMIBには、システム情報、インターフェース情報、ARPキャッシュ情報、ICMP/IP/TCP/UDP/SNMPプロトコルに関係する管理情報が定義されています。また、HOST-RESOURCES-MIBでは、ネットワーク機器、サーバーのリソース情報(CPU/メモリ/ディスク/プロセス/インストールされているソフトウェアなど)の監視項目が定義されています。MIBは、プレーンテキストで記載されていますが、MIB Browserというツールを使用することでグラフィカルに表示することが可能です(下図参照)。

MIB BrowserによるMIBツリー

SNMP PDUフォーマット

SNMPマネージャは、SNMPコマンド(Get/GetNext/GetBulk/Set)をSNMPエージェントに送信します。SNMPエージェントは、受信したコマンドに対する応答としてGet Responseコマンドを送信します。また、SNMPエージェントは、SNMPマネージャに管理情報に変化があった場合、障害通知を行うためにSNMPトラップ(Trap)を使用しアラームなどの通知を行えます。SNMPv1,SNMPv2cでは、コマンドフォーマットが異なっています。

SNMPv1

SNMPv2

フィールド名 説明
SNMP Version SNMPプロトコルバージョン( v1=0, v2c=1, v3=3 )
Community エージェントに設定されている認証文字列。マネージャは、エージェントに設定されたコミュニティを指定する必要があり、異なる文字列を指定した場合は、SNMPエージェントは応答せずに、予め指定されたIPアドレスにAuthentication Failure Trap(Generic Trap : 7)を送信
PDU TYPE SNMPコマンドタイプ( Get=a0, GetNext=a1, GetResponse=a2, Set=a3, GetBulk=a5, InfromRequest=a6, SNMPv2-Trap=a7, Report=a8)
Request ID コマンドシーケンス番号。SNMPエージェントは、受信したSNMPコマンドに対するGetResponseに同一のReqest IDを設定。
Error Status コマンドでは、”0″が設定され、SNMPエージェント上でエラーが発生した場合は、GetResponseにそのエラー番号を設定
Error Index コマンドでは”0″が設定され、SNMPエージェント上でエラーが発生した場合は、その発生したVariable Bindingsの位置を設定
Variable Bindings Object IDとその値を設定

SNMP v2 Trapでは、ヘッダのフォーマットがv1 Trapから変更されています。ヘッダは、Get/GetNext/Set コマンドと同一になり、Variable Bindingsフィールドの最初の2つに、sysUpTime(SNMPエージェント起動後経過時間)とsnmpTrapOID(トラップOID)が設定されます。

Error Status一覧:

Error Status 説明
No Error エラー無し
No Such Name 指定したOIDに対する値が存在しない
Bad Value 指定した値が正しくない
Read Only ReadOnlyオブジェクトに対して、Setリクエストにて設定を行った場合に発生
Gen Error その他のエラー

トラップ番号一覧:

Generic Type 説明
Cold Start エージェントを再起動
システム内の設定値が変更される可能性あり
Warm Start エージェントを再起動
システム内の設定値は変更されない
Link Down 通信インターフェースが停止
Link Up 通信インターフェースが復旧
Authentication Failure コミュニティ名が異なるコマンドを受信。
egpNeighborLoss EGP(Exterior Gateway Protocol)隣接装置がダウン
Enterprise Specific ベンダ定義のトラップ

SNMPパケットのエンコーディングルール

SNMPコマンド(Get/GetNext/GetBulk/Set)は、BER(Basic Encoding Rule)によりエンコードし、PDUとしてネットワークを介してSNMPエージェントに送付されます。 RFC1213-MIBに定義されているsysDescr(OID : .1.3.6.1.2.1.1.1.0)を取得するためにGet Requestを送信した場合、SNMPマネージャでは以下のようなデータの送受信が行われます。

SNMPマネージャ

世の中には数多くのSNMPマネージャが存在します。Googleトレンドなどからも国内でもっとも人気があることがわかるオープンソースソフトウェア(OSS)が「Zabbix」です。OSSには他にも「hinemos」や「Nagios」、「MRTG」、「Munin」などがあります。

また、ミックITリポート2018年2月号「中規模・小規模向けサーバー・ネットワーク統合監視ソフトウェア市場動向」で新規出荷台数がもっとも多いパッケージソフトウェアがManageEngineが提供するSNMPマネージャ「OpManager」です。無料版も提供されているので、小規模のネットワーク環境であれば今すぐ簡単に監視をはじめることができます。スイッチ監視、ルーター監視、CPU監視、メモリ監視、ポート監視、アプリケーション監視、イベントログ監視機能などが、Webベースのわかりやすい画面で管理できます。ネットワーク監視に関する知識がない方でも操作が可能で、容易に運用できるのが特徴です。

SNMPエージェント

Windowsでは、サービスとしてSNMPエージェントをインストールすることが可能です。Linuxでは、OSSの「Net SNMP」を動作させることが可能です。なお、OSのインストール直後は、SNMPエージェントはインストールされていないため、 ユーザがインストール作業を行う必要があります。前述のOSSのSNMPマネージャはエージェント型のものが多く、その作業が発生します。一方、パッケージソフトウェアのOpManagerの場合、SNMPポーリング、SNMPトラップでSNMPマネージャ側が能動的に情報を収集するため、監視対象機器にエージェントをインストールする必要がなく、短期間で監視をはじめられます。

また、安定して運用できているネットワークの複数の機器にエージェントをインストールする行為はリスクを伴います。そういった観点から、エージェントレス型のSNMPマネージャを選択するケースは少なくありません。
監視ツールを選定する際は、複数の選択肢から要件にあったツールを選定することをおすすめします。

まとめ:SNMPを活用して簡単にネットワーク監視を実現するには?

SNMPは、ネットワークの状態を把握するのに役立つプロトコルです。難しいと考えられがちなネットワーク監視を、名前の通り、シンプルに実現し、例えば、障害発生時にすばやく切り分けできるようになります。SNMPの活用にはSNMPマネージャと言われる監視ツールの導入が不可欠です。選定するツールによって難易度や監視をはじめられるまでの準備期間、画面のわかりやすさは千差万別です。

ManageEngineは、比較的簡単に導入・運用できるOpManagerを提供しています。是非この機会に、製品の概要をご確認ください。

OpManager

サーバー・ネットワークの統合監視ソフト。通知設定が簡単で、グラフやマップ表示で瞬時に状況を把握できます。
製品概要無料版ダウンロード

 

お役立ちホワイトペーパー

ユースケースごとにOpManagerの活用方法を解説した資料をご用意しています。


フィードバックフォーム

当サイトで検証してほしいこと、記事にしてほしい題材などありましたら、以下のフィードバックフォームよりお気軽にお知らせください。