【解説】SNMPとは何かを分かりやすく解説します

はじめに

ネットワーク機器やサーバの状態を把握し、障害を素早く見つけたい。そんなときに活躍するのがSNMPです。

SNMPはSimple Network Management Protocolの略称で、世界中の機器に広く実装されている監視と管理のための標準プロトコルです。

本記事では、初めての方にも分かりやすいように、SNMPの基本から、よく使うコマンド、トラップのしくみ、運用のコツまで丁寧語で解説します。

SNMPの基本概念

SNMPが解決する課題

SNMPは、遠隔にある多数の機器の状態を統一的な方法で収集し、必要に応じて設定の変更まで行える枠組みを提供します。個別のベンダーごとに異なるやり方を覚える必要がなく、共通のやり方でポーリングや通知を扱える点が最大のメリットです。

【ポーリングとは】
特定の状態や情報を定期的に問い合わせること

管理者とエージェント

SNMPの世界には主に二者が登場します。監視サーバ側にある管理ソフトウェアをマネージャ監視される側の機器に動作するプロセスをエージェントと言います。マネージャは定期的にデータを取りに行き、エージェントは要求に応じて値を返します。また、エージェントからマネージャへ能動的に通知を送る仕組みがトラップです。

MIBとOID

SNMPで扱う情報はMIBという辞書で定義され、各項目はOIDという数値のパスで識別されます。例えば、機器名は1.3.6.1.2.1.1.5というOIDで参照できます。MIBは人体の設計図のようなもので、どの情報がどこにあるかを体系的に並べた目録だと考えると理解しやすいでしょう。

バージョンの違い

SNMPには大きくv1、v2c、v3の三つのバージョンがあります。v1は最初の標準で機能は最小限、v2cは高速化や拡張が図られましたが認証はコミュニティ文字列のみです。v3ではユーザー名ベースの認証と暗号化が導入され、実運用では基本的にv3の利用が推奨されます。

SNMPの動作原理

PDUと基本操作

SNMPでやり取りされるメッセージをPDUと呼びます。代表的な操作はGet(単一値の取得)、GetNext(次の項目の取得)、GetBulk(大量取得の効率化)、Set(設定変更)、Response(応答)、Trap(通知)、Inform(通知の受領確認あり)です。マネージャは主にGetやGetBulkで状態を取得し、必要があればSetで設定を書き換えます。

ポーリングとトラップ

運用の現場では、定期的に情報を取りに行くポーリングと、異常時に機器から能動的に送られてくるトラップの二本柱で監視を組み立てます。ポーリングは取りこぼしが少なく履歴も残しやすい一方、間隔の設定が粗いと変化を見逃すことがあります。トラップは変化に即応できますが、ネットワーク障害で届かないリスクもあるため、両者を併用するのが実践的です。

MIBを読み解くコツ

標準MIBとベンダーMIB

MIBには共通で使える標準MIB(RFCで規定)と、装置固有の機能を拡張するベンダーMIBがあります。CPU使用率やインターフェースの入出力といった基本情報は標準MIBで取得でき、独自機能や詳細な統計はベンダーMIBで補うイメージです。

OIDの構造と例

OIDはドットで区切られた数値の階層です。上位ほど大きな分類、下位ほど具体的な項目になります。snmptranslateなどのツールを使うと、数値のOIDを人に読みやすい名前(sysName.0 など)に変換できます。表形式のデータ(インターフェース一覧など)はindexを持つテーブルとして表現され、GetNextやGetBulkを使って順にたどるのがコツです。

よく使うコマンドとツール

Net-SNMPの概要

実務で最も広く使われるのがNet-SNMPというオープンソース実装です。LinuxやmacOSで標準的に利用でき、Windowsでも導入できます。ここではnetの語を含むこのツール群を使い、よく使うコマンドの書式と実例を紹介します。なお、Windowsのnet コマンドとは別物です。

snmpgetとsnmpwalk

単一のOIDを読むときはsnmpget、大量の項目をまとめて取りたいときはsnmpwalk(walkという語が示す通り木構造を歩いて列挙する動作)を使います。v3を使う場合はユーザー、認証方式、暗号方式を指定します。v2cの場合はコミュニティ文字列を指定します。

# 例1: v2cで機器名を取得
snmpget -v2c -c public 192.0.2.10 sysName.0

# 例2: v3でwalkを実行(認証あり暗号あり)
snmpwalk -v3 -l authPriv -u monitor -a SHA -A 'authpass' -x AES -X 'privpass' 192.0.2.10 1.3.6.1.2.1.2

# 例3: インターフェース統計を効率よく取得(bulkwalk)
snmpbulkwalk -v2c -c public 192.0.2.10 IF-MIB::ifTable

snmpsetとsnmptrap

設定を書き換えるときはsnmpsetを使います。値の型(整数、文字列、カウンタ等)を明示し、影響範囲を理解した上で慎重に実施します。通知をテストしたいときはsnmptrapで任意のトラップを送出できます。

# 例4: v3で説明文を設定
snmpset -v3 -l authPriv -u admin -a SHA -A 'authpass' -x AES -X 'privpass' 192.0.2.10 sysContact.0 s 'NOC Team'

# 例5: テスト用のトラップを送信
snmptrap -v2c -c public 198.51.100.20 '' NET-SNMP-EXAMPLES-MIB::netSnmpExampleHeartbeatNotification

セキュリティの要点

v1・v2cとコミュニティ文字列

v1とv2cはコミュニティ文字列という共有の合言葉でアクセスを制御します。読み取り専用と書き込み可能を分け、推測されにくい文字列を使い、到達元のIPをフィルタするのが基本です。インターネット越しの通信は避け、必要ならVPNで保護します。

v3の認証と暗号

v3はUser-based Security Modelを採用し、認証なし、認証のみ、認証+暗号の三段階から選べます。実運用ではauthPriv(認証+暗号)が推奨され、ユーザー、認証方式(SHAなど)、暗号方式(AESなど)とそのパスフレーズを設定します。時刻同期が取れていないとv3は失敗しやすい点にも注意が必要です。

設計と運用の実践ノウハウ

監視頻度と履歴

CPU、メモリ、インターフェーストラフィックなどは1から5分程度の間隔でポーリングし、履歴をグラフ化すると傾向がつかめます。急激な変化を検知したい場合は短めの間隔にし、装置負荷やネットワーク帯域とバランスを取ります。

トラップの活用

トラップはリンクダウン、温度異常、電源障害など即時性が重要なイベントの検知に向きます。マネージャ側では受信したトラップをルールで分類し、重大度に応じて通知チャネルを使い分けます。届かない可能性を考慮し、重要な項目はポーリングでも監視して二重化する設計が安心です。

アラート設計

単発の閾値超過だけでなく、継続時間や回数を条件に含めるとノイズが減ります。例えば「5分連続でインターフェースエラーが増え続けたら通知」といった条件にすることで、一過性のスパイクを避けられます。

トラブルシューティングの手順

まずはネットワーク到達性の確認、次にUDP 161と162が開いているか、そしてエージェント設定(コミュニティ、ユーザー、ビュー、アクセスリスト)を確認します。最後にMIBとOIDの対応を見直し、意図したインデックスを引けているかを検証します。現場ではsnmpgetで単体を確認してからsnmpwalkに進む流れが確実です。

SNMPと他方式の比較

収集方式の違い

SNMPはPull型が基本で、柔軟に任意の項目を取得できます。一方、ストリーミングテレメトリやgNMIはPush型で高頻度データや構造化スキーマに強みがあります。APIベースの監視は表現力が高い反面、装置ごとの作り込みが必要です。成熟度、導入の容易さ、マルチベンダー対応という観点ではSNMPはいまも有力です。

パフォーマンスの考え方

大量の機器を監視する場合は、GetBulkや並列化、MIBビューの最適化で負荷を抑えます。インターフェースが多い装置では、必要な列だけを取得するようOIDを絞ると効率が高まります。

具体的な構成例

小規模オフィス

数台のスイッチとルータであれば、v3のauthPrivで統一し、マネージャはオープンソースの監視ソフトを採用します。CPU、メモリ、ifInOctets/ifOutOctets、温度、電源状態を基本セットとし、リンクイベントはトラップで即時検知します。

データセンター

数百台規模になると、監視サーバを冗長化し、取得間隔を項目ごとに分けます。例えばリンク状態は30秒、帯域は1分、ハードウェアイベントはトラップ重視など、重要度と変化速度に応じてチューニングします。

よくある質問

SNMPは古い技術ではありませんか

登場は古いものの、多くのベンダーが今も最新機種に実装しており、標準化された監視インターフェースとして現役です。新方式と組み合わせれば、コストと効果のバランスに優れた解を作れます。

どのバージョンを使うべきですか

セキュリティと運用の両面から、基本はv3を選びます。やむを得ずv2cを使う場合は、到達元制限やVPNなどで守りを固めてください。

snmpwalkで値が取れないときは

エージェントのビュー設定で該当するOIDが許可されていない、時刻ずれでv3が失敗している、もしくはMIBの読み込みに失敗して名前解決できない、といった原因が多いです。数値のOIDでのwalkやsnmpgetでの単発確認が有効です。

導入時のチェックリスト

  1. 目的を決めます。容量予測か障害検知かで収集するOIDと頻度が変わります。
  2. バージョンは原則v3にします。v2cを使う場合は到達元制限とVPNを必須にします。
  3. 到達性と時刻同期を確認します。NTPで時計合わせ、UDP 161と162の疎通を検証します。
  4. 資格情報を管理します。コミュニティやv3ユーザーを台帳化し、退役時は速やかに破棄します。
  5. コマンドを試します。snmpgetとsnmpwalkで取得、snmptrapでトラップ受信を一度は検証します。
  6. 可視化と手順書を用意します。グラフ化と手順の明文化が安定運用の近道です。

まとめ

SNMPは、機器の状態を広く深く把握し、必要に応じて設定まで行える強力な標準プロトコルです。MIBとOIDの仕組みを理解し、snmpgetやsnmpwalkといったコマンドを正しく使い分け、ポーリングとトラップを組み合わせれば、堅牢で拡張性のある監視基盤を構築できます。

まずは小さな対象から始め、取得項目やアラート条件を段階的に磨き上げていきましょう。理解が進むほど、SNMPはあなたの運用を静かに、しかし確実に支えてくれるはずです。