2014 7月 20

以前『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		チェック

図1:check_snmpのコマンド設定

図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サービス監視設定

図2:SNMPサービス監視設定

Nagiosの監視画面の確認

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

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

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

図4:Nagiosのサービス監視画面(2)

Categories: CentOS ,Nagios ,Nagios Plugins ,SNMP


Leave a Reply