proc、load、disk の監視情報は、ucdavis サブツリーを見れば分かる

SNMP を構築する際に、定番と言ってもいいくらいよく設定する snmpd.conf の監視項目として、以下があります。

  • proc NAME MAX MIN
  • disk PATH [MINSPACE | MINPERCENT%]
  • load MAX1 MAX5 MAX15

上記の プロセスディスク容量ロードアベレージ の監視情報・監視ステータスは、UCD-SNMP-MIB (.1.3.6.1.4.1.2021) 内に定義されている ucdavis サブツリー (MIB オブジェクト) の下に存在します。

また、プロセス情報は prTable、 ディスク情報は dskTable、 ロードアベレージ情報は laTable にそれぞれ入っています。

ですが、OID とか テーブル名とかをあまり気にせずに、snmpd.conf に設定した各監視項目のステータスをぱぱっと確認したい時には、snmpwalk コマンドで .1.3.6.1.4.1.2021grep すれば一目瞭然で分かりやすいです。

proc、load、disk の監視状態確認

各プロセスの監視状態確認

まず、プロセスに関しては、以下の 6つのプロセスを監視するとします。

SNMP プロセス監視設定
# cat /etc/snmp/snmpd.conf | egrep -v "(^#|^$)" | grep "^proc"
proc cron 1 1
proc ntpd 1 1
proc sshd 10 1
proc snmpd 1 1
proc rsyslogd 1 1
proc sendmail 10 1

各プロセスが今どんな状態か確認するためには、::pr で grep すれば一通り確認できます。

各プロセスのステータスは、snmpd.conf に設定した順番通りにインデックス化されています。

この例では、以下の結果を想定しています。

  • 1,3,6 番目のプロセスで監視異常を検知
  • Index 1 : cron プロセスが動いていない
  • Index 3 : sshd プロセスが指定値以上動いている
  • Index 6 : sendmail プロセスが動いていない

また、異常が検知された場合には、prErrorFlag1 がセットされます。

各プロセスの監視状態確認 その1
# snmpwalk -v2c -cPublic_Community localhost .1.3.6.1.4.1.2021 | fgrep '::pr'
UCD-SNMP-MIB::prIndex.1 = INTEGER: 1
UCD-SNMP-MIB::prIndex.2 = INTEGER: 2
UCD-SNMP-MIB::prIndex.3 = INTEGER: 3
UCD-SNMP-MIB::prIndex.4 = INTEGER: 4
UCD-SNMP-MIB::prIndex.5 = INTEGER: 5
UCD-SNMP-MIB::prIndex.6 = INTEGER: 6
UCD-SNMP-MIB::prNames.1 = STRING: cron
UCD-SNMP-MIB::prNames.2 = STRING: ntpd
UCD-SNMP-MIB::prNames.3 = STRING: sshd
UCD-SNMP-MIB::prNames.4 = STRING: snmpd
UCD-SNMP-MIB::prNames.5 = STRING: rsyslogd
UCD-SNMP-MIB::prNames.6 = STRING: sendmail
UCD-SNMP-MIB::prMin.1 = INTEGER: 1
UCD-SNMP-MIB::prMin.2 = INTEGER: 1
UCD-SNMP-MIB::prMin.3 = INTEGER: 1
UCD-SNMP-MIB::prMin.4 = INTEGER: 1
UCD-SNMP-MIB::prMin.5 = INTEGER: 1
UCD-SNMP-MIB::prMin.6 = INTEGER: 1
UCD-SNMP-MIB::prMax.1 = INTEGER: 1
UCD-SNMP-MIB::prMax.2 = INTEGER: 1
UCD-SNMP-MIB::prMax.3 = INTEGER: 10
UCD-SNMP-MIB::prMax.4 = INTEGER: 1
UCD-SNMP-MIB::prMax.5 = INTEGER: 1
UCD-SNMP-MIB::prMax.6 = INTEGER: 10
UCD-SNMP-MIB::prCount.1 = INTEGER: 0
UCD-SNMP-MIB::prCount.2 = INTEGER: 1
UCD-SNMP-MIB::prCount.3 = INTEGER: 11
UCD-SNMP-MIB::prCount.4 = INTEGER: 1
UCD-SNMP-MIB::prCount.5 = INTEGER: 1
UCD-SNMP-MIB::prCount.6 = INTEGER: 0
UCD-SNMP-MIB::prErrorFlag.1 = INTEGER: error(1)
UCD-SNMP-MIB::prErrorFlag.2 = INTEGER: noError(0)
UCD-SNMP-MIB::prErrorFlag.3 = INTEGER: error(1)
UCD-SNMP-MIB::prErrorFlag.4 = INTEGER: noError(0)
UCD-SNMP-MIB::prErrorFlag.5 = INTEGER: noError(0)
UCD-SNMP-MIB::prErrorFlag.6 = INTEGER: error(1)
UCD-SNMP-MIB::prErrMessage.1 = STRING: No cron process running
UCD-SNMP-MIB::prErrMessage.2 = STRING:
UCD-SNMP-MIB::prErrMessage.3 = STRING: Too many sshd running (# = 11)
UCD-SNMP-MIB::prErrMessage.4 = STRING:
UCD-SNMP-MIB::prErrMessage.5 = STRING:
UCD-SNMP-MIB::prErrMessage.6 = STRING: No sendmail process running
・・・

もっとシンプルに正常か異常かだけ確認したい時には、こんな感じで。

各プロセスの監視状態確認 その2
# snmpwalk -v2c -cPublic_Community localhost .1.3.6.1.4.1.2021 | egrep "(prNames|prCount|prErrorFlag|prErrMessage)"
UCD-SNMP-MIB::prNames.1 = STRING: cron
UCD-SNMP-MIB::prNames.2 = STRING: ntpd
UCD-SNMP-MIB::prNames.3 = STRING: sshd
UCD-SNMP-MIB::prNames.4 = STRING: snmpd
UCD-SNMP-MIB::prNames.5 = STRING: rsyslogd
UCD-SNMP-MIB::prNames.6 = STRING: sendmail
UCD-SNMP-MIB::prCount.1 = INTEGER: 0
UCD-SNMP-MIB::prCount.2 = INTEGER: 1
UCD-SNMP-MIB::prCount.3 = INTEGER: 11
UCD-SNMP-MIB::prCount.4 = INTEGER: 1
UCD-SNMP-MIB::prCount.5 = INTEGER: 1
UCD-SNMP-MIB::prCount.6 = INTEGER: 0
UCD-SNMP-MIB::prErrorFlag.1 = INTEGER: error(1)
UCD-SNMP-MIB::prErrorFlag.2 = INTEGER: noError(0)
UCD-SNMP-MIB::prErrorFlag.3 = INTEGER: error(1)
UCD-SNMP-MIB::prErrorFlag.4 = INTEGER: noError(0)
UCD-SNMP-MIB::prErrorFlag.5 = INTEGER: noError(0)
UCD-SNMP-MIB::prErrorFlag.6 = INTEGER: error(1)
UCD-SNMP-MIB::prErrMessage.1 = STRING: No cron process running
UCD-SNMP-MIB::prErrMessage.2 = STRING:
UCD-SNMP-MIB::prErrMessage.3 = STRING: Too many sshd running (# = 11)
UCD-SNMP-MIB::prErrMessage.4 = STRING:
UCD-SNMP-MIB::prErrMessage.5 = STRING:
UCD-SNMP-MIB::prErrMessage.6 = STRING: No sendmail process running

ディスク容量の監視状態確認

以下は、「/」 パーティション の残りのディスク容量が 95% を切るとアラートが上がるように設定した時の例です。

動作確認のため、95% を設定していますが、実際にはこんなに高い値を設定することはありません。

SNMP ディスク容量監視設定
# cat /etc/snmp/snmpd.conf | egrep -v "(^#|^$)" | grep "^disk"
disk / 95%

現在のディスク容量の監視状態を確認するためには、先と同じやり方で ::dsk で grep します。

異常が検知された場合には、dskErrorFlag1 がセットされます。

ディスク容量の監視状態確認
# df
Filesystem                    1K-blocks    Used Available Use% Mounted on
/dev/mapper/ubuntu14--vg-root  39871076 2348576  35474092   7% /
・・・

# snmpwalk -v2c -cPublic_Community localhost .1.3.6.1.4.1.2021 | fgrep '::dsk'
UCD-SNMP-MIB::dskIndex.1 = INTEGER: 1
UCD-SNMP-MIB::dskPath.1 = STRING: /
UCD-SNMP-MIB::dskDevice.1 = STRING: /dev/mapper/ubuntu14--vg-root
UCD-SNMP-MIB::dskMinimum.1 = INTEGER: -1
UCD-SNMP-MIB::dskMinPercent.1 = INTEGER: 95
UCD-SNMP-MIB::dskTotal.1 = INTEGER: 39871076
UCD-SNMP-MIB::dskAvail.1 = INTEGER: 35474092
UCD-SNMP-MIB::dskUsed.1 = INTEGER: 2348576
UCD-SNMP-MIB::dskPercent.1 = INTEGER: 6
UCD-SNMP-MIB::dskPercentNode.1 = INTEGER: 5
UCD-SNMP-MIB::dskTotalLow.1 = Gauge32: 39871076
UCD-SNMP-MIB::dskTotalHigh.1 = Gauge32: 0
UCD-SNMP-MIB::dskAvailLow.1 = Gauge32: 35474092
UCD-SNMP-MIB::dskAvailHigh.1 = Gauge32: 0
UCD-SNMP-MIB::dskUsedLow.1 = Gauge32: 2348576
UCD-SNMP-MIB::dskUsedHigh.1 = Gauge32: 0
UCD-SNMP-MIB::dskErrorFlag.1 = INTEGER: error(1)
UCD-SNMP-MIB::dskErrorMsg.1 = STRING: /: less than 95% free (= 89%)

ロードアベレージの監視状態確認

以下は、ロードアベレージの値が 1分・5分・15分、それぞれ 1・1・1 を超えたらアラートが上がるように設定した時の例です。

SNMP ロードアベレージ監視設定
# cat /etc/snmp/snmpd.conf | egrep -v "(^#|^$)" | grep "^load"
load 1 1 1

現在のロードアベレージの監視状態を確認するためには、::la で grep します。

異常が検知された場合には、laErrorFlag1 がセットされます。

ロードアベレージの監視状態確認
# uptime
 10:48:44 up 25 days, 17:03,  1 user,  load average: 1.00, 1.01, 1.05

# snmpwalk -v2c -cPublic_Community localhost .1.3.6.1.4.1.2021 | fgrep '::la'
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: 1.00
UCD-SNMP-MIB::laLoad.2 = STRING: 1.01
UCD-SNMP-MIB::laLoad.3 = STRING: 1.05
UCD-SNMP-MIB::laConfig.1 = STRING: 1.00
UCD-SNMP-MIB::laConfig.2 = STRING: 1.00
UCD-SNMP-MIB::laConfig.3 = STRING: 1.00
UCD-SNMP-MIB::laLoadInt.1 = INTEGER: 100
UCD-SNMP-MIB::laLoadInt.2 = INTEGER: 101
UCD-SNMP-MIB::laLoadInt.3 = INTEGER: 105
UCD-SNMP-MIB::laLoadFloat.1 = Opaque: Float: 1.000000
UCD-SNMP-MIB::laLoadFloat.2 = Opaque: Float: 1.010000
UCD-SNMP-MIB::laLoadFloat.3 = Opaque: Float: 1.050000
UCD-SNMP-MIB::laErrorFlag.1 = INTEGER: error(1)
UCD-SNMP-MIB::laErrorFlag.2 = INTEGER: error(1)
UCD-SNMP-MIB::laErrorFlag.3 = INTEGER: error(1)
UCD-SNMP-MIB::laErrMessage.1 = STRING: 1 min Load Average too high (= 1.00)
UCD-SNMP-MIB::laErrMessage.2 = STRING: 5 min Load Average too high (= 1.01)
UCD-SNMP-MIB::laErrMessage.3 = STRING: 15 min Load Average too high (= 1.05)

特に、snmpd.conf 設定後にちゃんと値が取れてるかどうか確認する時には、有効に使えるかなと思います。

以上、SNMP プロセス、ロードアベレージ、ディスク使用率の監視状態確認 でした。