これからの暑い季節、おうちのルーターになってるマシンの温度が気になるわけで。家に帰って部屋に入ると、すんげー音でファンが回っててガクガク。てなわけでモニタリングをしてみようかと。
1. xmbmon
とりあえずインスコは sysutils/xmbmon からportinstall。どうせルーターましんでXなんて使うはずもないので WITHOUT_X11=yes。
マザーに乗ってるハードウェアモニタのチップを調べる(各マザーのマニュアルにあるはず)。私のマザーに乗っかってたのはITE IT8721F。M/Bやchipの温度が狂ってるがCPUの温度だけ見れればいいやと無視。-12V/-5Vの値がおかしいのはハード的な問題なのでこれも気にしない。
% mbmon -d -I
Using ISA-IO access method!!
* Int.Tec.Exp. Chip IT8705F/IT8712F or SIS950 found.
% mbmon -I -c 1
Temp.= 127.0, 41.0, 127.0; Rot.= 2556, 4218, 0
Vcore = 1.33, 1.47; Volt. = 3.36, 4.92, 11.19, -3.50, -6.14
ということで測定ができる状態に。
2. snmpd
mbmonの出力を加工して、snmpで取得できるように埋め込む。まずは加工。とはいってもmbmon -rで1行1ステータスにしたものから値だけ抜き出すだけ。マイナス数値は後でcactiに埋め込むときの利便性から絶対値にしておく(後述)。私は以下のようなshell scriptを書いたけど、snmpdはアクセスの度にshellを起動するので、3回も起動させるのどうよとか想う人は全部まとめてsnmpdに埋め込めばいい。
#!/bin/sh
cmd_mbmon='/usr/local/bin/mbmon -I -c 1'
cmd_awk='/usr/bin/awk'
cmd_sed='/usr/bin/sed'
case "$1" in
temp)
# temp <MB, CPU, chip>
$cmd_mbmon -T 7
;;
fan)
# FAN <FAN0, FAN1, FAN2>
$cmd_mbmon -r | $cmd_awk '/^FAN[0-3]/{print $3}'
;;
volt)
# Volt <CPU VCore0, CPU VCore1, 3.3, 5, 12, -12, -5>
$cmd_mbmon -r | $cmd_awk '/^V[C135]/{print $3}' | $cmd_sed 's/[+-]//'
;;
*)
echo "Usage: `basename $0` {temp|fan|volt}" >&2
exit 64
;;
esac
exit 0
んでこれ(getmbmon.shというファイル名にした)をsnmpdで呼ぶために、snmpd.confへ追加。execは出力の最初の一行以降は無視されるけど、extendを使えばmulti-lineな出力も順に入れてくれるので活用。というか、今のnet-snmp5は起動時にexecは古いからextendに以降汁と言われると想う。
extend mb1 /usr/local/share/snmp/getmbmon.sh temp
extend mb2 /usr/local/share/snmp/getmbmon.sh fan
extend mb3 /usr/local/share/snmp/getmbmon.sh volt
埋め込んだ値は、snmpで NET-SNMP-EXTEND-MIB::nsExtendOutLine をみれば取得できるので確認。
# snmpwalk -v 1 -c public localhost NET-SNMP-EXTEND-MIB::nsExtendOutLine
NET-SNMP-EXTEND-MIB::nsExtendOutLine."mb1".1 = STRING: 127.0
NET-SNMP-EXTEND-MIB::nsExtendOutLine."mb1".2 = STRING: 41.0
NET-SNMP-EXTEND-MIB::nsExtendOutLine."mb1".3 = STRING: 127.0
NET-SNMP-EXTEND-MIB::nsExtendOutLine."mb2".1 = STRING: 2556
<snip>
実際はOIDをcactiのconfigに入れると想うので、snmpwalkするとき-Onとかするとよいかも
3. cacti
これは正直説明するのまんどい。おおまかには
- Data TemplatesでGet SNMP Dataにして各値のテンプレを作る
- Graph Templatesで作ったデータテンプレを利用したグラフテンプレを作る
- Devices で該当のhostに作ったグラフテンプレ追加。後は New Graphs でグラフを作成する。
注意点は、データテンプレのData Source TypeをGAUGEにすると、マイナスの値をよろしく処理してくれないので、予め絶対値で出しておいた電圧のマイナス値を、グラフテンプレのItemにあるCDEF Function
でMake Stack Negativeにする。分かんなければメニューの英語全部訳汁。雰囲気つかめるんじゃないかすら。
extendで各OIDのIndexが出ればcacti側でIndexed使ってまとめて美しそうなんだけど、snmpdの設定読んでも分からなくて詰まった。mibみたらそれっぽいのはあるんだけどなぁ。のでtemp/FAN/Voltを分けて作った。誰か教えてplz
cactiの天麩羅くれとかは知らん。苦労して作ってYO!
« 戻す