Ab.の日記: Windows でも munin-node で S.M.A.R.T.
ある日 threshold を割って警告が出たとしても、じりじり落ちたのかスコーンと落ちたのかで対応の仕方も違うしね!
という事でまずは munin node for windows を Windows 機に仕込みます。
ほかには cygwin で smartmontools を入れて、あと python も入れておきましょう。
python は cygwin ので大丈夫かどうかはチェックしてません。
M/B の温度なんかをモニタしたい人は Munin node for windows が speed fan の xAP に対応しているので設定しましょう。
次は FreeBSD にインストールされた munin-node のスクリプト smart_ を拾ってきて windows で動くようにちょっと書き換えます。
--- smart_ 2008-10-22 15:04:02.000000000 +0900
+++ smart_.py 2008-10-22 18:12:48.551591400 +0900
@@ -82,7 +82,7 @@
verbose=False
# Modify to your needs:
-statefiledir='/usr/local/var/munin/plugin-state/'
+statefiledir='c:/Program Files/Munin Node for Windows/plugin-state/'
def verboselog(s):
@@ -187,6 +187,9 @@
def get_hard_drive_name() :
try :
hard_drive=[plugin_name[string.rindex(plugin_name,'_')+1:]]
+ if os.getenv('smartdevice') :
+ verboselog('smartdevice = ' + os.getenv('smartdevice'))
+ return [ os.getenv('smartdevice') ]
if os.uname()[0]=="SunOS" :
try :
# if hard_drive name starts with "rdsk" or "rmt", try to reconstruct the path
@@ -309,7 +312,8 @@
smart_values={}
model=''
plugin_name=list(os.path.split(sys.argv[0]))[1]
-verboselog('plugins\' UID: '+str(os.geteuid())+' / plugins\' GID: '+str(os.getegid()))
+if 'geteuid' in os.__dict__.keys():
+ verboselog('plugins\' UID: '+str(os.geteuid())+' / plugins\' GID: '+str(os.getegid()))
# Parse arguments
if len(sys.argv)>1 :
getuid() が os モジュールに入っているかのチェックは適当に見つけ出したので Python のお作法に則っているかはわかりません。もっと正しい方法があったら教えて偉い人。
そして statefiledir に指定したところにはディレクトリを掘っておきます。
あ、smart は on にしておかないとステータスが読み取れないので smartctl -s on -S on -o on あたりで on にしておきます。
次にこの smart_.py を呼び出すバッチファイル smart_hda.bat を書いて munin node for windows のディレクトリに置きます。
@echo off
C:
cd "C:\Program Files\Munin Node for Windows"
set smartdevice=hda
set cygwin=C:\cygwin
set smartpath=%cygwin%\usr\sbin\smartctl.exe
set python=C:\python25\python.exe
if "%1"X == "name"X (
%cygwin%\bin\echo -n "smart_%smartdevice%"
goto end
)
%python% .\smart_.py "%1" | %cygwin%\bin\tr -d "\r"
echo .| %cygwin%\bin\tr -d "\r"
:end
smart_hda name とか smart_hda config とか smart_hda とか打って動作を確認してください。
よくわからなかったら smart_.py を verbose=True にするとちょっとヒントが出るかもしれません。
最後に munin-node.ini の ExternalPlugin セクションに plug in として設定を追加します。Plugin セクションに External=1 も確認しておきます。
SmartHda=C:\Program Files\Munin Node for Windows\smart_hda.bat
ドライブが複数あるときは smart_hda.bat を smart_hdb.bat とかにコピーして smartdevice= を書き換えれば多分OKです。
Windows でも munin-node で S.M.A.R.T. More ログイン