File server (RAID5 w/LUKS) の iowait がなんだかひどいので,MRTG で monitoringしようとして悩む.
OID (object identifier) は .1.3.6.1.4.1.2021.11 付近の以下を monitoring.
- .1.3.6.1.4.1.2021.11.50 ssCpuRawUser
- .1.3.6.1.4.1.2021.11.52 ssCpuRawSystem
- .1.3.6.1.4.1.2021.11.53 ssCpuRawIdle
- .1.3.6.1.4.1.2021.11.54 ssCpuRawWait
mrtg.cfg は http://net-snmp.sourceforge.net/tutorial/tutorial-5/mrtg/ にある通りに書けば良いらしい.なお,Debian GNU/Linux の場合の UCD-SNMP-MIB.txt の PATH は /usr/share/snmp/mibs/UCD-SNMP-MIB.txt
で,これは libsnmp-base package に含まれている.ちなみに LoadMIBs に複数の MIB file を記載するには comma (,) 区切りで書く
ここで問題なのはMaxBytes
で,上記URLの例ではMaxBytes[...]: 100
のようになっているが,これだと ssCpuRawIdle がうまく測れない(もともと iowait を monitor しようという企画なのだが...).
ssCpuRawIdle の仕様をいろいろあたってみたのだが,/usr/share/snmp/mibs/UCD-SNMP-MIB.txt
によると以下のとおり.
ssCpuRawIdle OBJECT-TYPE
SYNTAX Counter32
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"The number of 'ticks' (typically 1/100s) spent
idle.
On a multi-processor system, the 'ssCpuRaw*'
counters are cumulative over all CPUs, so their
sum will typically be N*100 (for N processors)."
::= { systemStats 53 }
つまり MaxBytes
が 100 だと invalid な数値だとして .rrd file (←私の環境ではRRDを利用している)にそもそも値が保存されない様子.ということで,monitor 対象の計算機毎に個別に設定してやる必要がある.当然ここでの CPU の数は論理プロセッサの数(コア数ではなく).たぶん上記 DESCRIPTION
のとおり他の ssCpuRaw*
についても同様だが,Idle は常に最大値付近の値をとるので,この問題がより顕在化しやすい.