パスワードを忘れた? アカウント作成
38443 journal

Ab.の日記: Windows でも munin-node で S.M.A.R.T.

日記 by Ab.
Windows 機の S.M.A.R.T. も(FreeBSD機の) munin でグラフにしたくなったのでちょっと挑戦。
ある日 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です。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
typodupeerror

一つのことを行い、またそれをうまくやるプログラムを書け -- Malcolm Douglas McIlroy

読み込み中...