hana_shinのLinux技術ブログ

Linuxの技術情報を掲載しています。特にネットワークをメインに掲載していきます。

snmpget/snmpwalkコマンドの使い方



1 はじめに

snmpget/snmpwalkコマンドで各種情報を取得してみます。デフォルトの設定では、systemサブツリー(No.1)のMIBしか参照できません。本記事では、設定変更をして、No.2~No.10のMIBも参照してみます。

No サブツリー OID 概要 備考
1 system .1.3.6.1.2.1.1 ホスト名等のシステムの情報 デフォルトの設定で参照可能
2 interfaces .1.3.6.1.2.1.2 ネットワークインタフェースに関する情報 設定変更で参照可能
3 at .1.3.6.1.2.1.3 ARPに関する情報 同上
4 ip .1.3.6.1.2.1.4 IPに関する情報 同上
5 icmp .1.3.6.1.2.1.5 ICMPに関する情報 同上
6 tcp .1.3.6.1.2.1.6 TCPに関する情報 同上
7 udp .1.3.6.1.2.1.7 UDPに関する情報 同上
8 ucdavis .1.3.6.1.4.1.2021 NET-SNMP有機能。システム管理に必要な情報 同上
9 ucdavis .1.3.6.1.4.1.2021.9 DISK使用率等 同上
10 ucdavis .1.3.6.1.4.1.2021.10 ロードアベレージ 同上

なお、セキュリティについては一切考慮していません。

2 検証環境

2.1 ネットワーク構成

サーバとクライアントの2台構成です。図中のens33はNICの名前です。

                               192.168.2.0/24
manager(ens33) ------------------------------------------(ens33) agent
        .105                                           .100

2.2 版数

CentOS版数は、エージェント、マネージャーともに下記版数です。

[root@agent ~]# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)

カーネル版数は以下のとおりです。

[root@agent ~]# uname -r
3.10.0-1160.el7.x86_64

3 事前準備

3.1 パッケージのインストール

エージェントにnet-snmpパッケージをインストールします。

[root@agent ~]# yum -y install net-snmp

版数を確認します。

[root@agent ~]# snmpd -v

NET-SNMP version:  5.7.2
Web:               http://www.net-snmp.org/
Email:             net-snmp-coders@lists.sourceforge.net

マネージャーにnet-snmp-utilsパッケージをインストールします。

[root@manager ~]# yum -y install net-snmp-utils

版数を確認します。

[root@manager ~]# snmpget -V
NET-SNMP version: 5.7.2

3.2 ポート番号の開放

snmpdが使用するUDPの161番ポートを開放します。firewall-cmdコマンドの使い方は、firewall-cmdの使い方 - hana_shinのLinux技術ブログを参照してください。

[root@agent ~]# firewall-cmd --add-port=161/udp
success

解放したポート番号を確認します。UDPの161番ポートが開放されたことがわかります。

[root@agent ~]# firewall-cmd --list-ports
161/udp

3.3 設定ファイルの編集

設定ファイル(snmpd.conf)を変更します。まず、原本のバックアップをします。

[root@agent ~]# cp /etc/snmp/snmpd.conf /etc/snmp/snmpd.conf.org

設定ファイルを編集します。

[root@agent ~]# vi /etc/snmp/snmpd.conf

変更した部分は、以下のとおりです。

[root@agent ~]# diff -Nur /etc/snmp/snmpd.conf.org /etc/snmp/snmpd.conf
--- /etc/snmp/snmpd.conf.org    2022-02-17 16:32:15.205218846 +0900
+++ /etc/snmp/snmpd.conf        2022-02-17 16:35:06.697152929 +0900
@@ -38,7 +38,7 @@
 # First, map the community name "public" into a "security name"

 #       sec.name  source          community
-com2sec notConfigUser  default       public
+com2sec notConfigUser  192.168.2.105       test

 ####
 # Second, map the security name into a group name:
@@ -55,6 +55,14 @@
 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.2
+view    systemview    included   .1.3.6.1.2.1.3
+view    systemview    included   .1.3.6.1.2.1.4
+view    systemview    included   .1.3.6.1.2.1.5
+view    systemview    included   .1.3.6.1.2.1.6
+view    systemview    included   .1.3.6.1.2.1.7
+view    systemview    included   .1.3.6.1.4.1.2021
+
 ####
 # Finally, grant the group read-only access to the systemview view.

@@ -320,7 +328,7 @@

 # Check the / partition and make sure it contains at least 10 megs.

-#disk / 10000
+disk / 10000

 # % snmpwalk -v 1 localhost -c public .1.3.6.1.4.1.2021.9
 # enterprises.ucdavis.diskTable.dskEntry.diskIndex.1 = 0
@@ -349,7 +357,7 @@
 # 15MAX:  Similar, but for 15 min average.

 # Check for loads:
-#load 12 14 14
+load 12 14 14

 # % snmpwalk -v 1 localhost -c public .1.3.6.1.4.1.2021.10
 # enterprises.ucdavis.loadTable.laEntry.loadaveIndex.1 = 1

3.4 snmpdの起動

snmpdを起動します。

[root@agent ~]# systemctl start snmpd

snmpdが使用しているポート番号を確認します。snmpdは、UDPの161番ポートでマネージャからのアクセスを待っています。lsofコマンドの使い方は、lsofコマンドの使い方 - hana_shinのLinux技術ブログを参照してください。

[root@agent ~]# lsof -c snmpd -a -i -a -P
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
snmpd   8411 root    7u  IPv4 101997      0t0  UDP *:161
snmpd   8411 root    8u  IPv4 101998      0t0  TCP localhost:199 (LISTEN)

4 snmpwalkコマンドの使い方

snmpwalkコマンドを使って、各種サブツリーのMIBを確認してみます。snmpwalkコマンドを使うと、サブツリー配下の全MIBを一括で読み出すことができます。

4.1 基本的な使い方

ここでは、下記書式にしたがってコマンドを実行してみます。

snmpwalk -v1 -c <コミュニティ名> <エージェントのIPアドレス> <OID>

コミュニティ名は、デフォルトのpublicからtestに変更したので、testを指定します。また、エージェントのIPアドレスは、192.168.2.100を指定します。

systemサブツリーは、デフォルトの設定ファイルで定義されています。

[root@manager ~]# snmpwalk -v1 -c test 192.168.2.100 .1.3.6.1.2.1.1
SNMPv2-MIB::sysDescr.0 = STRING: Linux agent 3.10.0-1160.el7.x86_64 #1 SMP Mon Oct 19 16:18:59 UTC 2020 x86_64
SNMPv2-MIB::sysObjectID.0 = OID: NET-SNMP-MIB::netSnmpAgentOIDs.10
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (48250) 0:08:02.50
SNMPv2-MIB::sysContact.0 = STRING: Root <root@localhost> (configure /etc/snmp/snmp.local.conf)
SNMPv2-MIB::sysName.0 = STRING: agent
SNMPv2-MIB::sysLocation.0 = STRING: Unknown (edit /etc/snmp/snmpd.conf)
-snip-

interfacesサブツリー配下のMIBを確認してみます。

[root@manager ~]# snmpwalk -v1 -c test 192.168.2.100 .1.3.6.1.2.1.2
IF-MIB::ifNumber.0 = INTEGER: 4
IF-MIB::ifIndex.1 = INTEGER: 1
IF-MIB::ifIndex.2 = INTEGER: 2
IF-MIB::ifIndex.3 = INTEGER: 3
IF-MIB::ifIndex.4 = INTEGER: 4
IF-MIB::ifDescr.1 = STRING: lo
IF-MIB::ifDescr.2 = STRING: ens33
IF-MIB::ifDescr.3 = STRING: virbr0
IF-MIB::ifDescr.4 = STRING: virbr0-nic
-snip-

ipサブツリー配下のMIBを確認してみます。

[root@manager ~]# snmpwalk -v1 -c test 192.168.2.100  .1.3.6.1.2.1.4
IP-MIB::ipForwarding.0 = INTEGER: forwarding(1)
IP-MIB::ipDefaultTTL.0 = INTEGER: 64
IP-MIB::ipInReceives.0 = Counter32: 14733
IP-MIB::ipInHdrErrors.0 = Counter32: 0
-snip-

4.2 OIDを表示する方法(-On)

ipサブツリーのOIDとIPアドレスを表示してみます。

[root@manager ~]# snmpwalk -On -v1 192.168.2.100 -c test ip
-snip-
.1.3.6.1.2.1.4.20.1.1.127.0.0.1 = IpAddress: 127.0.0.1
.1.3.6.1.2.1.4.20.1.1.192.168.2.36 = IpAddress: 192.168.2.36
.1.3.6.1.2.1.4.20.1.1.192.168.2.100 = IpAddress: 192.168.2.100
-snip

4.3 MIDシンボルで表示する方法(-Os)

[root@manager ~]# snmpwalk -Os -v1 192.168.2.100 -c test ip
-snip-
ipAdEntAddr.127.0.0.1 = IpAddress: 127.0.0.1
ipAdEntAddr.192.168.2.36 = IpAddress: 192.168.2.36
ipAdEntAddr.192.168.2.100 = IpAddress: 192.168.2.100
-snip-

5 snmpgetコマンドの使い方

snmpgetコマンドは、単一のMIBを読み出すときに使います。ここでは、ipForwardingの値を読み出してみます。エージェントでip_forwardの値を確認します。ip_forwardの値は有効(1)であることがわかります。

[root@agent ~]# cat /proc/sys/net/ipv4/ip_forward
1

マネージャからエージェントのip_forwardの値を読み出してみます。ip_forwardが有効であることがわかります。

[root@manager ~]#
[root@manager ~]# snmpget -v1 192.168.2.100 -c test .1.3.6.1.2.1.4.1.0
IP-MIB::ipForwarding.0 = INTEGER: forwarding(1)

エージェントでip_forwardの値を1から0に変更してみます。ちなみに、0はルーティング禁止を意味します。

[root@agent ~]# echo 0 > /proc/sys/net/ipv4/ip_forward

ip_forwardの値を確認します。ip_forwardの値が1から0に変更されたことがわかります。

[root@agent ~]# cat /proc/sys/net/ipv4/ip_forward
0

マネージャからエージェントのip_forwardの値を読み出してみます。ip_forwardが無効になったことがわかります。

[root@manager ~]# snmpget -v1 192.168.2.100 -c test .1.3.6.1.2.1.4.1.0
IP-MIB::ipForwarding.0 = INTEGER: notForwarding(2)

6 ucdavisサブツリーの参照方法

ucdavisは、Net-SNMP独自のツリーです。サーバの状態(ロードアベレージ、ディスク容量、プロセスの状態等)を参照することができます。

6.1 ロードアベレージの確認方法

stressコマンドを実行します。コマンドを実行すると、CPU使用率が100%程度になります。stressコマンドの使い方は、stressコマンドの使い方 - hana_shinのLinux技術ブログを参照してください。

[root@agent ~]# stress -c 1
stress: info: [8623] dispatching hogs: 1 cpu, 0 io, 0 vm, 0 hdd

ロードアベレージを確認してみます。1分,5分,15分のロードアベレージが0.81, 0.29, 0.14と表示されてています。

[root@agent ~]# uptime
 17:00:47 up  9:07,  2 users,  load average: 0.81, 0.29, 0.14

次に、snmpwalkを使ってロードアベレージを確認してみます。エージェント側で確認したロードアベレージ(★部分)とほぼ一致していることがわかります。

[root@manager ~]# snmpwalk -v1 -c test 192.168.2.100 .1.3.6.1.4.1.2021.10
UCD-SNMP-MIB::laIndex.1 = INTEGER: 1
UCD-SNMP-MIB::laIndex.2 = INTEGER: 2
UCD-SNMP-MIB::laIndex.3 = INTEGER: 3
UCD-SNMP-MIB::laNames.1 = STRING: Load-1
UCD-SNMP-MIB::laNames.2 = STRING: Load-5
UCD-SNMP-MIB::laNames.3 = STRING: Load-15
UCD-SNMP-MIB::laLoad.1 = STRING: 0.83 ★
UCD-SNMP-MIB::laLoad.2 = STRING: 0.31 ★
UCD-SNMP-MIB::laLoad.3 = STRING: 0.15 ★
-snip-

6.2 ディスクの情報を取得する方法

agentのファイルシステムの情報を取得してみます。

[root@agent ~]# df -h -t xfs
ファイルシス   サイズ  使用  残り 使用% マウント位置
/dev/sda3         30G   17G   14G   56% /
/dev/sda1        253M  141M  113M   56% /boot

次に、snmpwalkを使ってディスクの情報を確認してみます。デバイスの名前(/dev/sda3)、容量(31047876)、使用量(13732484)等を確認することができます。

[root@manager ~]#  snmpwalk -v1 -c test 192.168.2.100 .1.3.6.1.4.1.2021.9
UCD-SNMP-MIB::dskIndex.1 = INTEGER: 1
UCD-SNMP-MIB::dskPath.1 = STRING: /
UCD-SNMP-MIB::dskDevice.1 = STRING: /dev/sda3
UCD-SNMP-MIB::dskMinimum.1 = INTEGER: 10000
UCD-SNMP-MIB::dskMinPercent.1 = INTEGER: -1
UCD-SNMP-MIB::dskTotal.1 = INTEGER: 31047876
UCD-SNMP-MIB::dskAvail.1 = INTEGER: 13732484
UCD-SNMP-MIB::dskUsed.1 = INTEGER: 17315392
-snip-

Z 参考情報

私が業務や記事執筆で参考にした書籍を以下のページに記載します。
Linux技術のスキルアップをしよう! - hana_shinのLinux技術ブログ