Pocket

Net-SNMP

  • add this entry to hatena bookmark

Net-SNMPのインストールと設定、使い方について記載しています。

インストール&起動

yumを使って、net-snmpをインストールし、起動/停止の確認を行います。

# yum install net-snmp
# yum install net-snmp-utils
# rpm -qa | grep snmp
net-snmp-5.5-41.el6.x86_64
net-snmp-libs-5.5-41.el6.x86_64
#
# /etc/init.d/snmpd start
# /etc/init.d/snmpd stop

次は、snmpエージェントの設定ファイルである「/etc/snmp/snmpd.conf」の設定を行います。

snmp基本設定

まず「/etc/snmp/snmpd.conf」にて、snmpエージェントの基本となる設定を行います。

以下4つの設定項目は、snmp設定に関する基本設定となります。

No 項目 説明
1 com2sec セキュリティ名に対応するネットワーク範囲、コミュニティ名を設定します。
2 group セキュリティ名をグループ名とSNMPバージョンにマッピングします。
3 view SNMPで取得を許可するOID範囲を設定します。
4 access グループに対するアクセス許可設定を行います。

上記載に関する必要最低限の設定例は以下になります。詳細説明は割愛しますが、内容としては、ローカルホストからのsnmpアクセス(v2c)だけ許可をする、というものです。

com2sec local  localhost  CommunityNameRO
group local_group v2c local
view    view_all      included   .1                 80
access  local_group   ""      any       noauth    exact  view_all  none none

環境に合わせてこれらの値を設定してください。設定後には、snmpdの再起動を行い、設定を反映させてください。

この時点で設定が有効になっているかどうかを確認する為に、以下のコマンドで値が帰ってくるかどうかを確認する事をお勧めします。

snmpwalk -v 2c localhost -c CommunityNameRO .1.3.6.1.2.1.1.1

「SNMPv2-MIB::sysDescr.0」の値として、unameコマンドの結果が帰ってくれば問題なく設定が機能しています。

次に、snmpエージェントで設定できる個別設定を行っていきます。

snmp個別設定(ロケーション等)

次に、snmpエージェントの個別設定を行います。

デフォルトで有効になっている以下の項目は適当に設定してください。

syslocation 該当マシンがあるロケーション情報を設定する個所です。利用環境によっては有効活用する事ができます。
syscontact 該当マシンに対する連絡先を設定する個所です。利用環境によっては有効活用する事ができます。
dontLogTCPWrappersConnects ログ出力を制御する事が出来ます。

この辺りの設定は、面白みがあまりないですが、環境に合わせて設定してください。

snmpを用いた監視設定

以下にNet-SNMPを用いて設定可能な監視項目について記載します。

項目 説明 設定例
proc プロセスの起動状態について監視する際に設定する項目です。 proc httpd 10 4
disk ディスクの使用状況を監視する際に設定する項目です。 disk / 100000
load ロードアベレージを監視する際に設定する項目です。 load 10 5 5

上記以外にも「exec(snmpエージェントに起動させたいプログラムを設定し、応答を確認できる項目)」や「pass」などの項目もありますが、ここでは割愛します。

以下に、上記載で設定した「proc」「disk」「load」について、snmpwalk実行による取得結果例を記載します。

「proc」設定の結果

# snmpwalk -v 2c localhost -c CommunityNameRO .1.3.6.1.4.1.2021.2
UCD-SNMP-MIB::prIndex.1 = INTEGER: 1
UCD-SNMP-MIB::prNames.1 = STRING: httpd
UCD-SNMP-MIB::prMin.1 = INTEGER: 4
UCD-SNMP-MIB::prMax.1 = INTEGER: 10
UCD-SNMP-MIB::prCount.1 = INTEGER: 5
UCD-SNMP-MIB::prErrorFlag.1 = INTEGER: noError(0)
UCD-SNMP-MIB::prErrMessage.1 = STRING:
UCD-SNMP-MIB::prErrFix.1 = INTEGER: noError(0)
UCD-SNMP-MIB::prErrFixCmd.1 = STRING:
#

「disk」設定の結果

# snmpwalk -v 2c localhost -c CommunityNameRO .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/mapper/VolGroup-lv_root
UCD-SNMP-MIB::dskMinimum.1 = INTEGER: 100000
UCD-SNMP-MIB::dskMinPercent.1 = INTEGER: -1
UCD-SNMP-MIB::dskTotal.1 = INTEGER: 18102140
UCD-SNMP-MIB::dskAvail.1 = INTEGER: 14263428
UCD-SNMP-MIB::dskUsed.1 = INTEGER: 2919160
UCD-SNMP-MIB::dskPercent.1 = INTEGER: 17
UCD-SNMP-MIB::dskPercentNode.1 = INTEGER: 6
UCD-SNMP-MIB::dskTotalLow.1 = Gauge32: 18102140
UCD-SNMP-MIB::dskTotalHigh.1 = Gauge32: 0
UCD-SNMP-MIB::dskAvailLow.1 = Gauge32: 14263428
UCD-SNMP-MIB::dskAvailHigh.1 = Gauge32: 0
UCD-SNMP-MIB::dskUsedLow.1 = Gauge32: 2919160
UCD-SNMP-MIB::dskUsedHigh.1 = Gauge32: 0
UCD-SNMP-MIB::dskErrorFlag.1 = INTEGER: noError(0)
UCD-SNMP-MIB::dskErrorMsg.1 = STRING:
#

「load」設定の結果

# snmpwalk -v 2c localhost -c CommunityNameRO .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.20
UCD-SNMP-MIB::laLoad.2 = STRING: 0.14
UCD-SNMP-MIB::laLoad.3 = STRING: 0.07
UCD-SNMP-MIB::laConfig.1 = STRING: 10.00
UCD-SNMP-MIB::laConfig.2 = STRING: 5.00
UCD-SNMP-MIB::laConfig.3 = STRING: 5.00
UCD-SNMP-MIB::laLoadInt.1 = INTEGER: 20
UCD-SNMP-MIB::laLoadInt.2 = INTEGER: 14
UCD-SNMP-MIB::laLoadInt.3 = INTEGER: 7
UCD-SNMP-MIB::laLoadFloat.1 = Opaque: Float: 0.200000
UCD-SNMP-MIB::laLoadFloat.2 = Opaque: Float: 0.140000
UCD-SNMP-MIB::laLoadFloat.3 = Opaque: Float: 0.070000
UCD-SNMP-MIB::laErrorFlag.1 = INTEGER: noError(0)
UCD-SNMP-MIB::laErrorFlag.2 = INTEGER: noError(0)
UCD-SNMP-MIB::laErrorFlag.3 = INTEGER: noError(0)
UCD-SNMP-MIB::laErrMessage.1 = STRING:
UCD-SNMP-MIB::laErrMessage.2 = STRING:
UCD-SNMP-MIB::laErrMessage.3 = STRING:
#

ここまでで、Net-SNMPを用いて、プロセス状況やディスク利用状況、ロードアベレージ(CPU稼働負荷状態)に関するデータを取得できる事が確認できました。

SNMPマネージャ機能

Net-SNMPには、SNMPエージェントから値を取得する為のSNMPマネージャ機能が付属しています。既に上記載したとおり、snmpwalkコマンドなどが該当します。

以下に、Net-SNMPで利用できるSNMPマネージャコマンド(snmpエージェントから値を取得できるコマンド)を紹介します。

snmpwalk 指定したOID配下の値を全て取得します。
snmpget 指定したOIDの値を取得します。
snmpgetnext 指定したOIDの次の値を取得します。
snmptranslate 指定したOIDのMIB名称を取得します。その逆も可能。また、OIDの詳細説明や、ツリー表示なども可能。

以下に、snmpwalkと、snmpget、snmpgetnextのそれぞれの出力結果を記載しますので、各コマンドの関係を見ていただければと思います。

# snmpwalk -v 2c localhost -c CommunityNameRO .1.3.6.1.4.1.2021.10.1.2
UCD-SNMP-MIB::laNames.1 = STRING: Load-1
UCD-SNMP-MIB::laNames.2 = STRING: Load-5
UCD-SNMP-MIB::laNames.3 = STRING: Load-15
# snmpget -v 2c localhost -c CommunityNameRO .1.3.6.1.4.1.2021.10.1.2.1
UCD-SNMP-MIB::laNames.1 = STRING: Load-1
# snmpgetnext -v 2c localhost -c CommunityNameRO .1.3.6.1.4.1.2021.10.1.2.1
UCD-SNMP-MIB::laNames.2 = STRING: Load-5
#

snmptranslate の実行結果を以下に記載します。snmptranslate はコマンド実行ノード上だけで完結するコマンドであり、「このOIDのMIB名称は何だっけ?」という時に有用なコマンドだと思います。

# snmptranslate .1.3.6.1.4.1.2021.10.1.3
UCD-SNMP-MIB::laLoad
# snmptranslate -On UCD-SNMP-MIB::laLoad
.1.3.6.1.4.1.2021.10.1.3
#

また、snmptranslateコマンドのTRANSOPTS(-T)」オプションを利用すると、様々な情報を表示する事が可能です。例えば、「-Td」オプションを付けると、OIDの詳細説明を表示する事が可能です。

# snmptranslate -Td UCD-SNMP-MIB::laLoad
UCD-SNMP-MIB::laLoad
laLoad OBJECT-TYPE
  -- FROM       UCD-SNMP-MIB
  -- TEXTUAL CONVENTION DisplayString
  SYNTAX        OCTET STRING (0..255)
  DISPLAY-HINT  "255a"
  MAX-ACCESS    read-only
  STATUS        current
  DESCRIPTION   "The 1,5 and 15 minute load averages (one per row)."
::= { iso(1) org(3) dod(6) internet(1) private(4) enterprises(1) ucdavis(2021) laTable(10) laEntry(1) 3 }
#

「-Tp」オプションでは、ツリーフォーマットを表示する事が可能です。

# snmptranslate -Tp (OIDを指定)

関連する投稿
Pocket

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


*

チェックサイト RSS Feed読者登録はいかがでしょうか?RSS配信中です。