我が家で稼動している統合ストレージである、MSA1000にはネットワークポートがありません。
通常は、hpサーバにIMA(Insight Management Agent)を導入し、そのエージェント経由で監視すると言うことをするのですが、実は我が家の環境においてはhpサーバはたったの1台しかなく、しかもそれはVMware ESXiが導入されている(しかもhpカスタマイズではない)ため、監視用途に使えません。
そこで今回、シリアルコンソールから拾うメッセージを手がかりに監視が行えないかを考えることにしました。
最初にひらめいたのがTeratermマクロ。というわけで、今回生まれて初めてマクロというものを触って見ることにしました。
まずはメッセージの抽出。以下はMSAのCLIにおける「show globals」コマンドの実行結果。赤文字の箇所を参考にしてみようかなということで、作業着手。
CLI-2> show globals
Global Parameters:
System Name: ASO
Rebuild Priority: low
Expand Priority: low
Surface Delay: 3.0 secondsTotal Cache: 512MB
50% Read Cache: 256MB
50% Write Cache: 256MBTemperature:
EMU: 33 Celsius, 91 Fahrenheit
PS1: 42 Celsius, 107 Fahrenheit
PS2: 44 Celsius, 111 Fahrenheit
FIBRE BAY: 45 Celsius, 113 FahrenheitCLI-2>
作成したマクロはこんな感じ。
;=====================================================================
; Filename : out-templog_msa1000.ttl
; Description : output temparature log for msa1000
; Author : localYouser
; Created : 2013/06/18
; modified :
;=====================================================================
;; 変数初期化・ログ日付時刻取得
COMMAND = ”
CMD_CHOUSA = ‘show globals’
MAX_TEMP = ’60’
TMP_LOG = ‘C:\logs\msa1000_temparature.log’
gettime s “%Y-%m-%d_%H:%M:%S”;; 接続ポート・速度の指定
COM_PORT = ‘2’
BAUDRATE = ‘19200’
;=====================================================================
;; メッセージの初期化
OKMESSAGE = ”
NGMESSAGE = ”;; MSA1000のシリアルコンソールに接続する。
COMMAND = ‘/I /C=’
strconcat COMMAND COM_PORT
strconcat COMMAND ‘ /BAUD=’
strconcat COMMAND BAUDRATE;; 接続文字列の作成
connect COMMAND;; コマンドを送信し、EMUの温度を取得する。EMUの行が来るまで処理は待機。
sendln CMD_CHOUSA
wait ‘EMU:’;; セルシウス温度を示す文字列を取得する。
recvln
strmatch inputstr ‘ EMU: (\d+) Celsius, (\d+) Fahrenheit’
TEMP = groupmatchstr1;; 取得した温度文字列を数値化する。
str2int TEMP_INT TEMP;; ログファイルを開く。追記型で。
fileopen fhandle TMP_LOG 1;; 取得した温度が60度を超えてるか超えてないか判断をする
if TEMP_INT>60 then
;; 失敗メッセージを作成する
NGMESSAGE = s
strconcat NGMESSAGE ‘ [Error] Storage Temparature is Overheat. Now Temparature is ‘
strconcat NGMESSAGE TEMP
strconcat NGMESSAGE ‘.’
;; 失敗メッセージをログファイルに書き込む
filewriteln fhandle NGMESSAGE
else
;; 成功メッセージを作成する
OKMESSAGE = s
strconcat OKMESSAGE ‘ [Info] Storage Temparature is not Overheat. Now Temparature is ‘
strconcat OKMESSAGE TEMP
strconcat OKMESSAGE ‘.’
;; 成功メッセージをログファイルに書き込む
filewriteln fhandle OKMESSAGE
endif;; ファイルを閉じる
fileclose fhandle;; TERA TERMを終了する
closett;; スクリプト終了
end
これを、タスクスケジューラで以下のように実装します。
- 上記のマクロを「out-templog_msa1000.ttl」という名前で、C:\Program Files (x86)\teraterm配下に保存
- 以下のようなバッチを作成する。これをC:\batch\out-templog_msa1000.batという形で保存
- “C:\Program Files (x86)\teraterm\ttpmacro.exe” out-templog_msa1000.ttl /V
- タスクスケジューラにこのバッチ起動指示を仕込む
こんな感じでログが出てくれました。でめたしでめたし。ちなみに、何故かWindows Server 2012だとちゃんとタスクスケジューラに仕込んでもちゃんと動いてくれませんでした。不思議とWindows Server 2008 R2に同じものを仕込むと、普通に動作したのでありまして・・いやはや、わかりませんなー。
2013-06-18_21:43:18 [Info] Storage Temparature is not Overheat. Now Temparature is 33.
2013-06-18_21:44:07 [Info] Storage Temparature is not Overheat. Now Temparature is 33.
2013-06-18_21:47:31 [Info] Storage Temparature is not Overheat. Now Temparature is 33.
2013-06-18_21:47:36 [Info] Storage Temparature is not Overheat. Now Temparature is 33.
2013-06-18_21:50:36 [Info] Storage Temparature is not Overheat. Now Temparature is 33.
2013-06-18_21:52:10 [Info] Storage Temparature is not Overheat. Now Temparature is 33.
2013-06-18_21:54:57 [Info] Storage Temparature is not Overheat. Now Temparature is 33.
2013-06-18_22:15:42 [Info] Storage Temparature is not Overheat. Now Temparature is 33.
2013-06-18_22:16:28 [Info] Storage Temparature is not Overheat. Now Temparature is 33.
2013-06-18_22:16:55 [Info] Storage Temparature is not Overheat. Now Temparature is 33.
2013-06-18_22:18:57 [Info] Storage Temparature is not Overheat. Now Temparature is 33.
2013-06-18_22:19:08 [Info] Storage Temparature is not Overheat. Now Temparature is 33.
2013-06-18_22:23:17 [Info] Storage Temparature is not Overheat. Now Temparature is 33.
2013-06-18_22:25:48 [Info] Storage Temparature is not Overheat. Now Temparature is 33.
2013-06-18_22:33:38 [Info] Storage Temparature is not Overheat. Now Temparature is 33.
2013-06-18_22:40:59 [Info] Storage Temparature is not Overheat. Now Temparature is 33.
2013-06-18_22:44:20 [Info] Storage Temparature is not Overheat. Now Temparature is 33.
2013-06-18_22:44:50 [Info] Storage Temparature is not Overheat. Now Temparature is 33.
2013-06-18_22:47:26 [Info] Storage Temparature is not Overheat. Now Temparature is 33.
2013-06-18_22:57:30 [Info] Storage Temparature is not Overheat. Now Temparature is 33.
まだOverheatしてないのでInfoログしか出ていませんが、実は先日2度ほどオーバーヒートを起こしまして。今は室内の窓エアコンを全開で稼動させており、それで冷えているんですよね。ま、その内何か出てくるでしょう。
それまでにログ監視設定でも仕込んでおけば、メール通知とかできるのかなーとか思っています。・・・・と、気づいたのですが、もしかしてArray Configuration UtilityのCLI版使って出力させればよかったってオチだったりしますかね^^;
No responses yet