Net-SNMP
Red Hat Enterprise Linux 7 には、SNMP エージェントを含む Net-SNMP
ソフトウェアスイートが含まれている。このエージェントと関連ユーティリティーを使用すると、多くのシステムからのパフォーマンスデータを SNMP プロトコルによるポーリングに対応する各種ツールに提供することができる。
Net-SNMP のインストール
Net-SNMP 関連のパッケージは以下がある。
net-snmp
- SNMP Agent Daemon とドキュメント。このパッケージは、パフォーマンスデータをエクスポートするために必要
net-snmp-libs
- netsnmp ライブラリと、同梱の MIB。このパッケージは、パフォーマンスデータをエクスポートするために必要
net-snmp-utils
- snmpget や snmpwalk などの SNMP クライアント。このパッケージは、SNMP によりシステムのパフォーマンスデータをクエリするために必要
net-snmp-perl
- mib2c ユーティリティおよび NetSNMP Perl モジュール。このパッケージは Optional チャンネルにより提供されることに注意
net-snmp-python
- Python 向け SNMP クライアントライブラリ。このパッケージは Optional チャンネルにより提供されることに注意
net-snmp、net-snmp-libs、net-snmp-utils をインストールする場合は以下コマンドを実行する。
yum install net-snmp net-snmp-libs net-snmp-utils
Net-SNMP Daemon の起動
net-snmp パッケージには、SNMP Agent Daemon である snmpd
が含まれている。
■サービス起動と停止
#サービス起動
systemctl start snmpd.service
#サービス停止
systemctl stop snmpd.service
■サービス有効化(自動起動設定)と無効化
#サービス有効化
systemctl enable snmpd.service
#サービス無効化
systemctl disable snmpd.service
■サービス再起動と設定の再読み込み
#サービス再起動
systemctl restart snmpd.service
#設定の再読み込み
systemctl reload snmpd.service
Net-SNMP の設定
Net-SNMP Agent Daemon の設定を変更するには /etc/snmp/snmpd.conf
設定ファイルを編集する。
アクセス制御の設定
アクセス制御設定は以下を材料に設定する。
- グループの定義
- セキュリティの定義を材料にする
- ビューの定義
そのため上の各定義を先に作成してから、アクセス制御設定を行う。
セキュリティの定義
ホストとコミュニティの組の定義。次項のグループの定義で使用する。
com2sec NAME SOURCE COMMUNITY
- NAME はセキュリティの識別名
- SOURCE は許可対象となるホスト名、サブネット、または default を指定
- default は任意のネットワーク (0.0.0.0) の意味
- COMMUNITY はコミュニティ名
com2sec notConfigUser default public
グループの定義
SNMP バージョンとセキュリティの組。後述のアクセス許可の設定で使用する。
group NAME MODEL SECURITY
- NAME はグループの識別名
- MODEL は SNMP バージョンを指定
- v1
- v2c
- usm ← v3 の意味
- SECURITY は前項で定義したセキュリティの名前
group notConfigGroup v1 notConfigUser
group notConfigGroup v2c notConfigUser
アクセス範囲(ビュー)の定義
次項のアクセス許可の設定で使用する。
view NAME TYPE SUBTREE [MASK]
- NAME はビューの識別名
- TYPE は included または excluded を指定
- SUBTREE は MIB のオブジェクト ID を指定
- MASK は 16 進数で指定。デフォルトは ff
view systemview included .1.3.6.1.2.1.1
view systemview included .1.3.6.1.2.1.25.1.1
アクセス許可の設定
access NAME CONTEXT MODEL LEVEL PREFX READ WRITE NOTIFY
- NAME は定義済みのグループの識別名を指定
- CONTEXT は v1 または、v2c のアクセスの場合は空文字列(“”)を指定
- MODEL は any、v1、v2c、または usm を指定
- LEVEL は noauth、auth、または priv を指定
- v1 または v2c アクセスの場合は noauth を指定
- PREFX は exact または prefix を指定
- READ は定義済みのビューの識別名を指定
- WRITE は定義済みのビューの識別名を指定
- NOTIFY は定義済みのビューの識別名を指定
access notConfigGroup "" any noauth exact systemview none none
システム情報の設定
snmpwalk コマンドでデフォルト状態の system ツリーを表示すると以下のようになる。
# snmpwalk -v2c -c public localhost system
SNMPv2-MIB::sysDescr.0 = STRING: Linux localhost.localdomain 3.10.0-123.el7.x86_64 #1 SMP Mon May 5 11:16:57 EDT 2014 x86_64
SNMPv2-MIB::sysObjectID.0 = OID: NET-SNMP-MIB::netSnmpAgentOIDs.10
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (464) 0:00:04.64
SNMPv2-MIB::sysContact.0 = STRING: Root <root@localhost> (configure /etc/snmp/snmp.local.conf)[出力は省略されています]
- sysName(システム名)の設定
sysname system-name
- デフォルトはホスト名
- sysLocation(システムの場所)の設定
syslocation system-location
- sysContact(システムの連絡先)の設定
syscontact system-contact
例:
syslocation Datacenter, Row 4, Rack 3
syscontact UNIX Admin <admin@example.com>
上の変更後、設定を再読み込みした後の snmpwalk コマンドの実行結果は以下の通り。
# systemctl reload snmp.service
# snmpwalk -v2c -c public localhost system
SNMPv2-MIB::sysDescr.0 = STRING: Linux localhost.localdomain 3.10.0-123.el7.x86_64 #1 SMP Mon May 5 11:16:57 EDT 2014 x86_64
SNMPv2-MIB::sysObjectID.0 = OID: NET-SNMP-MIB::netSnmpAgentOIDs.10
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (35424) 0:05:54.24
SNMPv2-MIB::sysContact.0 = STRING: UNIX Admin <admin@example.com>
SNMPv2-MIB::sysName.0 = STRING: localhost.localdomain
SNMPv2-MIB::sysLocation.0 = STRING: Datacenter, Row 4, Rack 3[出力は省略されています]
SNMP コミュニティの設定
先述のアクセス制御設定の代わりの方法として、以下の方法で SNMP v1/v2c コミュニティの設定を行うことができる。
SNMP のコミュニティを設定するには、/etc/snmp/snmpd.conf
設定ファイルで rocommunity
または rwcommunity
ディレクティブを使用する。
rocommunity community [source [OID]]
rwcommunity community [source [OID]]
- community は コミュニティ名
- source はクエリを許可するアクセス元 IP アドレスまたはサブネット
- OID は アクセスを提供する SNMP ツリー(アクセス許可範囲)
例:ローカルマシンに対して、コミュニティ名 「redhat」 を使用して system ツリーへの読み取り専用のアクセスを与える場合は以下の設定とする
rocommunity redhat 127.0.0.1 .1.3.6.1.2.1.1
SNMP トラップ送信設定
Net-SNMP で送信することができるトラップは以下の4種類。
- ColdStart
- SNMP エージェントが初期化され起動したとき
- LinkDown
- ネットワークインターフェースが Up から Down になったとき
- LinkUp
- ネットワークインターフェースが Down から Up になったとき
- AuthentificationFailure
- 認証違反を検出したとき
デフォルトではトラップを送信しない。トラップを送信させるためには以下設定が必要。
trapsink
ディレクティブでコミュニティと送信先の設定- 各種類のトラップに対応したディレクティブでトラップ送信を有効化する設定
- ColdStart については必ず送信される
■trapsink
ディレクティブ設定
trapsink destination-ip community-name [port]
- destination-ip はトラップ送信先 IP アドレス
- community-name はコミュニティ名
- port は送信先ポート番号。デフォルト 162/udp
■LinkDown / LinkUp
トラップ設定
LinkDown と LinkUp をまとめて有効化する場合は以下のように linkUpDownNotifications
ディレクティブを使用する。
linkUpDownNotifications yes
LinkDown と LinkUp それぞれを個別に設定する場合は、以下のように notificationEvent
ディレクティブと monitor
ディレクティブを使用する。
#LinkDown トラップ設定例
notificationEvent linkDownTrap linkDown ifIndex ifAdminStatus ifOperStatus
monitor -r 60 -e linkDownTrap "Generate linkDown" ifOperStatus == 2
#LinkUp トラップ設定例
notificationEvent linkUpTrap linkUp ifIndex ifAdminStatus ifOperStatus
monitor -r 60 -e linkUpTrap "Generate linkUp" ifOperStatus != 2
monitor
ディレクティブの-r 60
の部分で監視間隔 (秒) を設定している模様
設定の反映
設定ファイルの変更を反映させるには以下コマンドで設定の再読み込みを行う。
systemctl reload snmpd.service
MIB ツリーの確認
アクセス制御やコミュニティの設定で使用する OID を確認する方法として、snmptranslate -Tp
コマンドがあります。このコマンドで MIB ツリーを確認できます。
# snmptranslate -Tp
+--iso(1)
|
+--org(3)
|
+--dod(6)
|
+--internet(1)
|
+--directory(1)
|
+--mgmt(2)
| |
| +--mib-2(1)
| |
| +--system(1)
| | |
| | +-- -R-- String sysDescr(1)
| | | Textual Convention: DisplayString
| | | Size: 0..255
| | +-- -R-- ObjID sysObjectID(2)
| | +-- -R-- TimeTicks sysUpTime(3)
| | | |
| | | +--sysUpTimeInstance(0)
| | |
| | +-- -RW- String sysContact(4)
| | | Textual Convention: DisplayString
| | | Size: 0..255
| | +-- -RW- String sysName(5)
| | | Textual Convention: DisplayString
| | | Size: 0..255
| | +-- -RW- String sysLocation(6)
| | | Textual Convention: DisplayString
| | | Size: 0..255
| | +-- -R-- INTEGER sysServices(7)
| | | Range: 0..127
| | +-- -R-- TimeTicks sysORLastChange(8)
| | | Textual Convention: TimeStamp
| | |
| | +--sysORTable(9)
| | |
| | +--sysOREntry(1)
| | | Index: sysORIndex
| | |
| | +-- ---- INTEGER sysORIndex(1)
| | | Range: 1..2147483647
| | +-- -R-- ObjID sysORID(2)
| | +-- -R-- String sysORDescr(3)
| | | Textual Convention: DisplayString
| | | Size: 0..255
| | +-- -R-- TimeTicks sysORUpTime(4)
| | Textual Convention: TimeStamp
| |
| +--interfaces(2)
| | |
| | +-- -R-- Integer32 ifNumber(1)
| | |
| | +--ifTable(2)
| | |
| | +--ifEntry(1)
#(略)
参考資料



―――――――――――――