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
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技術ブログ