LoginSignup
27
26

More than 5 years have passed since last update.

良く分かるSNMPポーリング

Posted at

概要

SNMPはSimple Network Management Protocolの略で、コンピュータネットワーク上のノードを管理するためのプロトコルです。管理と言っても様々なものがあります。SNMPを利用して具体的にどのような管理をするのか見てみましょう。

監視サーバが1台とCiscoスイッチが1台あり、監視サーバからSNMPを使ってスイッチのインターフェース状態を監視したいとします。SNMPの世界では管理する側を「SNMPマネージャ」、管理される側を「SNMPエージェント」と呼びます。通信の流れは以下のようになります。
image
このように、SNMPマネージャ側から情報を取りに行くの動作を「SNMPポーリング」、SNMPエージェント側から自発的に情報を送る動作を「SNMPトラップ」と呼びます。今回は「SNMPポーリング」に絞って解説をします。

SNMPポーリングで取得できる情報は多岐に渡ります。先ほどのインターフェースの状態を一つとってもスイッチは多数のインターフェースを持っていますし、Link状態以外にも通過したパケット数やCPUの温度など、様々な情報を取得することができます。SNMPマネージャが何の情報を求めてポーリングをしているか、マネージャとエージェントで共通の規格を持つ必要があります。この為に使われるのが、OID (Object IDentifier)になります。OIDは以下のように、数字[0-9]とドット[.]の組み合わせで表現されます。
image

この例では.1.3.6.1.2.1.2.2.1.8がifOperStatusと言ってインターフェースのリンク状態を格納している場所、最後の.10001がFa1/0/1を指定する値になります。OIDは無数にあるため、覚える必要はありません。どのOIDが何の値を格納しているかについては、OID repositoryで検索することができます。
http://oid-info.com/get/1.3.6.1.2.1.2.2.1.8

コマンドで確かめてみる

使用した環境は下記の通りです。実際にはデスクトップPC側はVirtualBoxでCentOS7を動かしているためゲストOSのIPが振られていますが、本筋とは関係ないため割愛します。
image

まずはインターフェース設定です。L2スイッチ扱いなのでVlanインターフェースにIPアドレスを振るだけで完了します。簡単ですね。

C3750
Switch#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
Switch(config)#int vlan 1
Switch(config-if)#ip add 192.168.1.1 255.255.255.0
Switch(config-if)#no shut
Switch(config-if)#end
Switch#

設定したらLANケーブルを繋いでサーバからPingで確認しましょう。

Bash
[root@localhost ~]# ping 192.168.1.1
PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.
64 bytes from 192.168.1.1: icmp_seq=1 ttl=254 time=5.65 ms

できました。

続いて、スイッチ上でsnmpエージェントを動作する設定です。Catalystスイッチはデフォルトではsnmpエージェントが動作していません。

C3750
Switch#show snmp
%SNMP agent not enabled

snmp関連のコマンドを何か一つでも入れることでエージェントが起動します。今回はsnmpポーリングを受けるエージェントを起動させるため、snmp-server communityコマンドを設定します。設定するパラメータはコミュニティ名だけです。今回はqiitaにしましょう。

C3750
Switch#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
Switch(config)#snmp-server community qiita
Switch(config)#end
Switch#show snmp
Chassis: CAT0949Z0E1
6883 SNMP packets input
    0 Bad SNMP version errors
(途中省略)
SNMP global trap: disabled

SNMP logging: disabled
SNMP agent enabled

できました。

いよいよサーバからSNMPポーリングをしてみます。比較のため、スイッチのshow int statusコマンドを先に叩いておきましょうか。

C3750
Switch#sh int status | i Fa1/0/1 |Fa1/0/2
Fa1/0/1                      connected    1          a-full  a-100 10/100BaseTX
Fa1/0/2                      notconnect   1            auto   auto 10/100BaseTX

Fa1/0/1はup、1/0/2はdownになっていますね。インターフェースのリンク状態に対応するOIDは.1.3.6.1.2.1.2.2.1.8ですが、個別のインターフェースの指定はどうやって確認するのでしょうか。これはCiscoスイッチ上からshow snmp mib ifmib ifindexコマンドで見ることができます。

C3750
Switch#show snmp mib ifmib ifindex | i 1/0/1: |1/0/2:
FastEthernet1/0/1: Ifindex = 10001
FastEthernet1/0/2: Ifindex = 10002

それぞれ10001と10002でした。従って、確認したいOIDは.1.3.6.1.2.1.2.2.1.8.10001と.1.3.6.1.2.1.2.2.1.8.10002になります。(長い。。。)

サーバからSNMPポーリングを行うコマンドはsnmpgetコマンドになります。-vオプションと-cオプションで、バージョンとコミュニティ名を指定しましょう。

Bash
[root@localhost ~]# snmpget -v2c -c qiita 192.168.1.1 .1.3.6.1.2.1.2.2.1.8.10001
IF-MIB::ifOperStatus.10001 = INTEGER: up(1)
[root@localhost ~]# snmpget -v2c -c qiita 192.168.1.1 .1.3.6.1.2.1.2.2.1.8.10002
IF-MIB::ifOperStatus.10002 = INTEGER: down(2)

できました!

おわりに

ネットワーク機器の監視で使われているSNMP、実際にどのような動きをしているのか、少しでも理解が深まると幸いです。

27
26
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
27
26