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 プロセス監視設定Raw Code(S)Raw Code(T)
# 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 がセットされます。

各プロセスの監視状態確認 その1Raw Code(S)Raw Code(T)
# 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
・・・

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

各プロセスの監視状態確認 その2Raw Code(S)Raw Code(T)
# 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 ディスク容量監視設定Raw Code(S)Raw Code(T)
# cat /etc/snmp/snmpd.conf | egrep -v "(^#|^$)" | grep "^disk"
disk / 95%

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

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

ディスク容量の監視状態確認Raw Code(S)Raw Code(T)
# 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 を超えたらアラートが上がるように設定した時の例です。

動作確認のため、短い値 load 1 1 1 を設定しています。

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

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

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

ロードアベレージの監視状態確認Raw Code(S)Raw Code(T)
# 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 プロセス、ロードアベレージ、ディスク使用率の監視状態確認 でした。