以前『NagiosでSNMPトラップの監視を行う方法』では、SNMPトラップをNagiosで受け取る方法を書いたが、今回はNagiosからサーバにSNMPでアクセスして監視を行う方法を紹介する。
サーバをSNMPで監視するためには、まず監視対象のサーバにSNMPエージェントをインストールする必要がある。
今回はサーバのNICのトラフィックを監視することを考える。
監視対象サーバへのnet-snmpのインストール
まず監視対象のサーバにSNMPエージェントをインストールする。
yumでnet-snmpをインストールしたら、chkconfigでsnmpサービスが登録されていることを確認する。
# yum install net-snmp
<省略>
Dependencies Resolved
=============================================================================================================
Package Arch Version Repository Size
=============================================================================================================
Installing:
net-snmp x86_64 1:5.5-49.el6_5.1 updates 306 k
Installing for dependencies:
lm_sensors-libs x86_64 3.1.1-17.el6 base 38 k
net-snmp-libs x86_64 1:5.5-49.el6_5.1 updates 1.5 M
Transaction Summary
=============================================================================================================
Install 3 Package(s)
Total download size: 1.9 M
Installed size: 6.3 M
Is this ok [y/N]: y
<省略>
Complete!
# chkconfig --list
auditd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
blk-availability 0:off 1:on 2:on 3:on 4:on 5:on 6:off
crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off
htcacheclean 0:off 1:off 2:off 3:off 4:off 5:off 6:off
httpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
ip6tables 0:off 1:off 2:off 3:off 4:off 5:off 6:off
iptables 0:off 1:off 2:off 3:off 4:off 5:off 6:off
lvm2-monitor 0:off 1:on 2:on 3:on 4:on 5:on 6:off
netconsole 0:off 1:off 2:off 3:off 4:off 5:off 6:off
netfs 0:off 1:off 2:off 3:on 4:on 5:on 6:off
network 0:off 1:off 2:on 3:on 4:on 5:on 6:off
nrpe 0:off 1:off 2:off 3:on 4:on 5:on 6:off
postfix 0:off 1:off 2:on 3:on 4:on 5:on 6:off
rdisc 0:off 1:off 2:off 3:off 4:off 5:off 6:off
restorecond 0:off 1:off 2:off 3:off 4:off 5:off 6:off
rsyslog 0:off 1:off 2:on 3:on 4:on 5:on 6:off
saslauthd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
snmpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
snmptrapd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
sshd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
udev-post 0:off 1:on 2:on 3:on 4:on 5:on 6:off
|
続いて、snmpコマンドをインストールする。
# yum install net-snmp-devel net-snmp-utils
<省略>
Dependencies Resolved
=============================================================================================================
Package Arch Version Repository Size
=============================================================================================================
Installing:
net-snmp-devel x86_64 1:5.5-49.el6_5.1 updates 303 k
net-snmp-utils x86_64 1:5.5-49.el6_5.1 updates 174 k
Installing for dependencies:
elfutils-devel x86_64 0.152-1.el6 base 68 k
elfutils-libelf-devel x86_64 0.152-1.el6 base 31 k
elfutils-libs x86_64 0.152-1.el6 base 181 k
file-devel x86_64 5.04-15.el6 base 25 k
lm_sensors-devel x86_64 3.1.1-17.el6 base 22 k
popt-devel x86_64 1.13-7.el6 base 21 k
rpm-devel x86_64 4.8.0-37.el6 base 93 k
tcp_wrappers-devel x86_64 7.6-57.el6 base 15 k
Updating for dependencies:
rpm x86_64 4.8.0-37.el6 base 901 k
rpm-libs x86_64 4.8.0-37.el6 base 313 k
rpm-python x86_64 4.8.0-37.el6 base 57 k
Transaction Summary
=============================================================================================================
Install 10 Package(s)
Upgrade 3 Package(s)
Total download size: 2.2 M
Is this ok [y/N]: y
<省略>
Complete!
|
snmpdの設定ファイル(/etc/snmp/snmpd.conf)の設定
①送信元ネットワークとコミュニティ名の設定
デフォルトでは、修正前の状態だが、送信元ネットワークがdefaultとなっている。
これは全てのネットワークを意味する。
<書式>
com2sec セキュリティ名 送信元ネットワーク コミュニティ名
<修正前>
com2sec notConfigUser default public
<修正後>
#com2sec notConfigUser default public
com2sec local localhost public
com2sec mynetwork 192.168.11.0/24 public
|
②セキュリティグループの設定
セキュリティモデルは、snmpのバージョンに対応している。
「v1」「v2」「usm」は、それぞれSNMPのバージョン「1」「2」「3」に対応する。
<書式>
group グループ名 セキュリティモデル セキュリティ名
<修正前>
group notConfigGroup v1 notConfigUser
group notConfigGroup v2c notConfigUser
<修正後>
#group notConfigGroup v1 notConfigUser
#group notConfigGroup v2c notConfigUser
group local_group v1 local
group local_group v2c local
group local_group usm local
group mynet_group v1 mynetwork
group mynet_group v2c mynetwork
group mynet_group usm mynetwork
|
③MIBの参照範囲の設定
範囲設定タイプは、「include(設定範囲のみ)」「exclude(設定範囲以外すべて)」のいずれかを選択。
マスクは、16進数で指定するが、オプションだ。
<書式>
view view名 範囲設定タイプ MIBオブジェクトID
<修正前>
view systemview included .1.3.6.1.2.1.1
view systemview included .1.3.6.1.2.1.25.1.1
<修正後>
#view systemview included .1.3.6.1.2.1.1
#view systemview included .1.3.6.1.2.1.25.1.1
view all_view included .1
view mib2_view included .1.3.6.1.2.1
|
④アクセス制限の設定
groupおよびviewを組み合わせて、アクセス制限を設定する。
セキュリティモデルには、「v1」「v2」「usm」「any」の4つがあり、「any」は全てを含むという意味だ。
<書式>
access グループ名 コンテキスト セキュリティモデル セキュリティレベル プレフィックス read権限 write権限 通知権限
<修正前>
access notConfigGroup "" any noauth exact systemview none none
<修正後>
#access notConfigGroup "" any noauth exact systemview none none
access local_group "" any noauth exact all_view none none
access mynet_group "" any noauth exact all_view none none
|
⑤SNMPエージェントの識別文字、管理者のメールアドレスを設定
SNMPエージェントの識別文字はホスト名でいいだろう。
管理者のメールアドレスはsyscontact で指定する。
<書式>
syslocation SNMPエージェントの識別文字
syscontact 管理者のメールアドレス
<修正前>
syslocation Unknown (edit /etc/snmp/snmpd.conf)
syscontact Root (configure /etc/snmp/snmp.local.conf)
<修正後>
#syslocation Unknown (edit /etc/snmp/snmpd.conf)
#syscontact Root (configure /etc/snmp/snmp.local.conf)
syslocation centos6.4
syscontact root@localhost
|
snmpdの自動起動設定とsnmpdの起動
snmpdの自動起動の設定を行い、snmpdを起動する。
# chkconfig snmpd on
# chkconfig --list snmpd
snmpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
# service snmpd start
snmpd を起動中: [ OK ]
|
snmpdの確認
snmpwalkコマンドでsnmpdの確認を行う。
以下のようなMIB情報が出力されれば問題ない。
IF-MIB::の部分がインターフェースに関する情報だ。
今回はインターフェースの監視なので、IF-MIB::の部分の値を監視することになる。
# snmpwalk -v 2c -c public localhost
SNMPv2-MIB::sysDescr.0 = STRING: Linux jumper-in1 2.6.32-358.el6.x86_64 #1 SMP Fri Feb 22 00:31:26 UTC 2013 x86_64
SNMPv2-MIB::sysObjectID.0 = OID: NET-SNMP-MIB::netSnmpAgentOIDs.10
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (1214147) 3:22:21.47
SNMPv2-MIB::sysContact.0 = STRING: root@localhost
SNMPv2-MIB::sysName.0 = STRING: jumper-in1
SNMPv2-MIB::sysLocation.0 = STRING: jumper-in1
SNMPv2-MIB::sysORLastChange.0 = Timeticks: (1) 0:00:00.01
SNMPv2-MIB::sysORID.1 = OID: SNMP-MPD-MIB::snmpMPDMIBObjects.3.1.1
SNMPv2-MIB::sysORID.2 = OID: SNMP-USER-BASED-SM-MIB::usmMIBCompliance
SNMPv2-MIB::sysORID.3 = OID: SNMP-FRAMEWORK-MIB::snmpFrameworkMIBCompliance
SNMPv2-MIB::sysORID.4 = OID: SNMPv2-MIB::snmpMIB
SNMPv2-MIB::sysORID.5 = OID: TCP-MIB::tcpMIB
SNMPv2-MIB::sysORID.6 = OID: IP-MIB::ip
SNMPv2-MIB::sysORID.7 = OID: UDP-MIB::udpMIB
SNMPv2-MIB::sysORID.8 = OID: SNMP-VIEW-BASED-ACM-MIB::vacmBasicGroup
SNMPv2-MIB::sysORDescr.1 = STRING: The MIB for Message Processing and Dispatching.
SNMPv2-MIB::sysORDescr.2 = STRING: The MIB for Message Processing and Dispatching.
SNMPv2-MIB::sysORDescr.3 = STRING: The SNMP Management Architecture MIB.
SNMPv2-MIB::sysORDescr.4 = STRING: The MIB module for SNMPv2 entities
SNMPv2-MIB::sysORDescr.5 = STRING: The MIB module for managing TCP implementations
SNMPv2-MIB::sysORDescr.6 = STRING: The MIB module for managing IP and ICMP implementations
SNMPv2-MIB::sysORDescr.7 = STRING: The MIB module for managing UDP implementations
SNMPv2-MIB::sysORDescr.8 = STRING: View-based Access Control Model for SNMP.
SNMPv2-MIB::sysORUpTime.1 = Timeticks: (1) 0:00:00.01
SNMPv2-MIB::sysORUpTime.2 = Timeticks: (1) 0:00:00.01
SNMPv2-MIB::sysORUpTime.3 = Timeticks: (1) 0:00:00.01
SNMPv2-MIB::sysORUpTime.4 = Timeticks: (1) 0:00:00.01
SNMPv2-MIB::sysORUpTime.5 = Timeticks: (1) 0:00:00.01
SNMPv2-MIB::sysORUpTime.6 = Timeticks: (1) 0:00:00.01
SNMPv2-MIB::sysORUpTime.7 = Timeticks: (1) 0:00:00.01
SNMPv2-MIB::sysORUpTime.8 = Timeticks: (1) 0:00:00.01
IF-MIB::ifNumber.0 = INTEGER: 2
IF-MIB::ifIndex.1 = INTEGER: 1
IF-MIB::ifIndex.2 = INTEGER: 2
IF-MIB::ifDescr.1 = STRING: lo
IF-MIB::ifDescr.2 = STRING: eth0
IF-MIB::ifType.1 = INTEGER: softwareLoopback(24)
IF-MIB::ifType.2 = INTEGER: ethernetCsmacd(6)
IF-MIB::ifMtu.1 = INTEGER: 16436
IF-MIB::ifMtu.2 = INTEGER: 1500
IF-MIB::ifSpeed.1 = Gauge32: 10000000
IF-MIB::ifSpeed.2 = Gauge32: 4294967295
IF-MIB::ifPhysAddress.1 = STRING:
IF-MIB::ifPhysAddress.2 = STRING: 0:c:29:28:b8:75
IF-MIB::ifAdminStatus.1 = INTEGER: up(1)
IF-MIB::ifAdminStatus.2 = INTEGER: up(1)
IF-MIB::ifOperStatus.1 = INTEGER: up(1)
IF-MIB::ifOperStatus.2 = INTEGER: up(1)
IF-MIB::ifLastChange.1 = Timeticks: (0) 0:00:00.00
IF-MIB::ifLastChange.2 = Timeticks: (0) 0:00:00.00
IF-MIB::ifInOctets.1 = Counter32: 1324055
IF-MIB::ifInOctets.2 = Counter32: 1065489312
IF-MIB::ifInUcastPkts.1 = Counter32: 16719
IF-MIB::ifInUcastPkts.2 = Counter32: 7312504
IF-MIB::ifInNUcastPkts.1 = Counter32: 0
IF-MIB::ifInNUcastPkts.2 = Counter32: 0
IF-MIB::ifInDiscards.1 = Counter32: 0
IF-MIB::ifInDiscards.2 = Counter32: 0
IF-MIB::ifInErrors.1 = Counter32: 0
IF-MIB::ifInErrors.2 = Counter32: 0
IF-MIB::ifInUnknownProtos.1 = Counter32: 0
IF-MIB::ifInUnknownProtos.2 = Counter32: 0
IF-MIB::ifOutOctets.1 = Counter32: 1324055
IF-MIB::ifOutOctets.2 = Counter32: 817877705
IF-MIB::ifOutUcastPkts.1 = Counter32: 16719
IF-MIB::ifOutUcastPkts.2 = Counter32: 4939993
IF-MIB::ifOutNUcastPkts.1 = Counter32: 0
IF-MIB::ifOutNUcastPkts.2 = Counter32: 0
IF-MIB::ifOutDiscards.1 = Counter32: 0
IF-MIB::ifOutDiscards.2 = Counter32: 0
IF-MIB::ifOutErrors.1 = Counter32: 0
IF-MIB::ifOutErrors.2 = Counter32: 0
IF-MIB::ifOutQLen.1 = Gauge32: 0
IF-MIB::ifOutQLen.2 = Gauge32: 0
IF-MIB::ifSpecific.1 = OID: SNMPv2-SMI::zeroDotZero
IF-MIB::ifSpecific.2 = OID: SNMPv2-SMI::zeroDotZero
(中略)
IF-MIB::ifName.1 = STRING: lo
IF-MIB::ifName.2 = STRING: eth0
IF-MIB::ifInMulticastPkts.1 = Counter32: 0
IF-MIB::ifInMulticastPkts.2 = Counter32: 0
IF-MIB::ifInBroadcastPkts.1 = Counter32: 0
IF-MIB::ifInBroadcastPkts.2 = Counter32: 0
IF-MIB::ifOutMulticastPkts.1 = Counter32: 0
IF-MIB::ifOutMulticastPkts.2 = Counter32: 0
IF-MIB::ifOutBroadcastPkts.1 = Counter32: 0
IF-MIB::ifOutBroadcastPkts.2 = Counter32: 0
IF-MIB::ifHCInOctets.1 = Counter64: 2047833
IF-MIB::ifHCInOctets.2 = Counter64: 1066297150
IF-MIB::ifHCInUcastPkts.1 = Counter64: 25907
IF-MIB::ifHCInUcastPkts.2 = Counter64: 7320766
IF-MIB::ifHCInMulticastPkts.1 = Counter64: 0
IF-MIB::ifHCInMulticastPkts.2 = Counter64: 0
IF-MIB::ifHCInBroadcastPkts.1 = Counter64: 0
IF-MIB::ifHCInBroadcastPkts.2 = Counter64: 0
IF-MIB::ifHCOutOctets.1 = Counter64: 2047833
IF-MIB::ifHCOutOctets.2 = Counter64: 818631515
IF-MIB::ifHCOutUcastPkts.1 = Counter64: 25907
IF-MIB::ifHCOutUcastPkts.2 = Counter64: 4944652
IF-MIB::ifHCOutMulticastPkts.1 = Counter64: 0
IF-MIB::ifHCOutMulticastPkts.2 = Counter64: 0
IF-MIB::ifHCOutBroadcastPkts.1 = Counter64: 0
IF-MIB::ifHCOutBroadcastPkts.2 = Counter64: 0
IF-MIB::ifHighSpeed.1 = Gauge32: 10
IF-MIB::ifHighSpeed.2 = Gauge32: 10000
IF-MIB::ifPromiscuousMode.1 = INTEGER: false(2)
IF-MIB::ifPromiscuousMode.2 = INTEGER: false(2)
IF-MIB::ifConnectorPresent.2 = INTEGER: true(1)
IF-MIB::ifAlias.1 = STRING:
IF-MIB::ifAlias.2 = STRING:
IF-MIB::ifCounterDiscontinuityTime.1 = Timeticks: (0) 0:00:00.00
IF-MIB::ifCounterDiscontinuityTime.2 = Timeticks: (0) 0:00:00.00
IF-MIB::ifTableLastChange.0 = Timeticks: (0) 0:00:00.00
(以下省略)
|
check_snmpでの確認
check_snmpでsnmpdをインストールしたサーバのインターフェースの確認を行う。
以下では、eth0のIN側のデータ受信量(オクテット数=バイト単位)を取得している。
また、以下の例では、約400バイト/sの通信があったことを示している。
# /usr/local/nagios/libexec/check_snmp -H 192.168.11.24 -C public -P 2c -o IF-MIB::ifHCInOctets.2 --rate
SNMP RATE OK - 400.5714286 | IF-MIB::ifHCInOctets.2=400.5714286
|
ここまで問題なければ、Nagiosから監視できる。
Nagiosの監視コマンドの設定
次は、Nagiosの監視コマンドの設定を行う。
Nagiosでcheck_snmpを使った監視を行うための設定だ。
NagiosQLを使って以下のように設定する。
Command system-check-snmp
Command line $USER1$/check_snmp -H $HOSTADDRESS$ -C public -P 2c -o $ARG1$ --rate
Command type check command
Access group Unrestricted access
Registered チェック
Active チェック
|

図1:check_snmpのコマンド設定
Nagiosのサービス監視設定
次は、Nagiosのサービス監視の設定を行う。
ホストの設定は終わっているものとする。
NagiosQLを使って以下のように設定する。
以下のポイント以外は自由に設定して構わない。
Config name 監視対象ホスト名
Hosts 監視対象ホスト
Service description TRAFFIC eth0 IN
Display name TRAFFIC eth0 IN
Registered チェック
Active チェック
Check command system-check-snmp
$ARG1$ IF-MIB::ifHCInOctets.2
|

図2:SNMPサービス監視設定
Nagiosの監視画面の確認
Nagiosのサービス監視画面の確認を行う。
ステータス情報とパフォーマンス情報がきちんと取れていれば問題ない。

図3:Nagiosのサービス監視画面(1)

図4:Nagiosのサービス監視画面(2)
Categories: CentOS ,Nagios ,Nagios Plugins ,SNMP