以前『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 <root@localhost> (configure /etc/snmp/snmp.local.conf) <修正後> #syslocation Unknown (edit /etc/snmp/snmpd.conf) #syscontact Root <root@localhost> (configure /etc/snmp/snmp.local.conf) syslocation centos6.4 syscontact root@localhost </root@localhost></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 チェック |
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 |
Nagiosの監視画面の確認
Nagiosのサービス監視画面の確認を行う。
ステータス情報とパフォーマンス情報がきちんと取れていれば問題ない。
Categories: CentOS ,Nagios ,Nagios Plugins ,SNMP