2013年10月3日木曜日

監視したい。とても。

監視したいんですよ。PCを。
なぜかって?
さあ。

本来PCを監視するっちゅうのは、たとえば無応答の端末にカツを入れたりレバーをすりつぶしたり手羽先をこんがり揚げちゃったりするのが目的。
でももう、肉が胃にもたれるお年頃の四十肩のわたくしにはそんなのどうでもいいわけです。
KFCは28日になると買いに行きたくなりますけど。(肉が減ってクリスピー増えましたね...)

で、まあ、業務用のをいろいろ作ってきた覚えはありますが、はっきり言ってあんなもんいらねえ。
確かに我が家にはサーバやらPCやらがゴロゴロしていますが、死ぬときは音もするしニオイもわかる。
その場にいなくてもアクセスして無応答ならすぐわかりますわな。
(ああ、あのコンデンサの破裂した時のかぐわしさといったら。)

だから、監視対象は死活確認とかそういうんじゃないわな。

グラフ化できるなにか
これだね。見て楽しむ。

原則放置プレイな*nix系OSにはいろいろあるんだけど、windowsが対象となると途端にだるくなる。
そらそーだよね。
ふつう、PCって放置プレイで運用するもんじゃないもんね。私はしているけど。
もっとも、最近じゃMRTGとかもwindows版があるみたいね。

でも核心は
グラフ化できるなにか
コレ。

windowsでもって一番お手軽なソレはタスクマネージャ。
でもこれ1分なんだよねえ。
パフォーマンスモニタ?
うーん。あれもねぇ。。。

せめて1年は記録を参照できないとツマンナイんだなあ。

と、いうわけで、そーゆーツールがrrdtool。こいつはただのデータベースじゃない。
そんなんだったらmysqlでもpostgresqlでもsqliteでもcsvでもいいわけよね。
それに別にround robinじゃなくたって、私が死ぬまでに毎秒記録していても使い切れない広大な二次記憶スペースが手に入る昨今、どおってこたあない。

何がスゴいか。
グラフ化できるなにか。なにか:=rrdtool
DBだけじゃないってことかな。しょうがないにゃあ。

データの管理と可視化を同時に行ってくれる、まさに夢のようなツールなわけです。
そいつにデータをストアしておいて、見たい時にグラフ化されてりゃいいってことになるわけですね。

ま、それのパッケージがMRTGなんですけどね。作者も同じですし。

でも、まあ、私の場合はHotSaNICでもって自宅サーバの監視を長年行ってきていたので(思えば21世紀初頭ですよ奥さん)、そいつに相乗りさせようということで前置きが終わります。

でもって、rrdtoolをHotSaNICからつかうんダヨネとか決定してみたわけですが、これはこれまで通り。ただデータ収集先が1つ増え、windowsになるということです。
HotSaNICそのものはデータを集めてきてrrdtoolに記録をお願いしたり、定期的にグラフを表示するためのホームページ用のグラフをrrdtoolにお願いして作っていただいたりしている(perlの!)デーモンなわけです。

ということは、windowsを監視したいンですけど。というときにすべきなのはwindowsからいかにして情報をせしめるか、というだけの話になるわけです。
収集した後は既存のフレークワークに従ってHotSaNICにお任せすればrrdtoolラッパも作る必要がなくなってみんな幸せになれるわけです。

そこで、PCにはそのサーバへのデータ蓄積・送信機能があれば、サーバがそのデータを収集しに来たタイミングで返事をすればいいという作りにしておけばいいということになります。

ここで、グラフ化したら見栄えがいいデータの選定を行います。

まず温度。CPUとかHDD、GPUなんかの。これは見栄えがいいですよ奥さん。
CPUクロックなんかもいいかもしれませんね。
あと起動時間やメモリ使用状況なんかも見てくれがいいでしょう。

そこで、それらを収集することにします。

とはいえ、CPU温度・・・いきなり難問ですね。
OSはそういったことには関心がないようで、パフォーマンスモニタでも収集できません。

では、ということで外部ツールを探してみると、どれもこれも・・・と思ってvista導入時はやめちゃったんでした、わたくしは。
2007年のことでした。
しかし、今回は違いました。

http://openhardwaremonitor.org/
Open Hardware Monitor

このようなツールが見つかりました。
これのなにがスバラシイか。
それは、先ほど列挙した「グラフ化したい」項目について常に簡単に取得できる仕組みが整っていたのです。
具体的には、WMI(Windows Management Instrumentation)という仕組みを通じて、このアプリケーションが収集したデータを取得できる、という点において、キラキラ光っているわけです。
というのは、WMIを通して、ネットワークトラフィックやCPU利用率、DISKIOなどのデータは取得できることはわかっていたからです。
つまり、問い合わせ先を統一できるということです。

BMI?標準体重?

いやいや、違います。
select文一発でなんだかよくわかんねえデータをとれちゃうんだぜ、という仕組み(WMI)がもともとwindowsにはあって、そこにCPU温度などのデータを公開してくれるヤツなんです。

このアプリさえ起動しておけば、あとはWMI経由で情報を取得して問い合わせ先に教えてあげるツールがあればそれで目的は達せられるというわけです。なんてスバラシイ.

しかし、残念ながらわたくしの環境ではHDDの温度がこのツールでは収集できませんでした。
そこらへんに転がっている文献ではWMI経由でSMART情報が取得できるとありますが、できませんでした。
一番壊れやすいHDDの温度管理情報は、グラフ化するだけでもかなり有用な情報です。
それが取得できないのはどういうことなのか。
 じゃあ、ってんで、speedfanやら類似のツールを試してみても、やはり取得できていません。
OpenHardwareMonitorでも取得できていません。
 
そこで、OpenSourceのありがたさ。
OpenHardwareMonitorのソースをとりよせて眺めてみると、アラC#。
四十肩にはツライよ。
ほとんどこの言語を使ったことがなかったのですが、眺めていると、なんてこたあない、普通にDeviceIoControl()で取得していました。しかも、ド定番な方法。

まさかとは思うけど、C#だとおかしいのかな?と思って自分でCで書いて実行すると同じように取れない。うーん。

でもソースがあるんだから、と、よくよく眺めてみると、ド定番な方法のほかの方法を試していません。
たとえばATA PASS THROUGHとか、SCSI_PASS_THROUGHとか。

もしかして、、、とおもって、そこまでやっていそうなsmartmontoolsをダウンロードして実行してみると、見事取得に成功しました。

結局、これもまたsmartmontoolsがopen sourceなのでコードを追ってみると、まさにATA_PASS_THROUGHな時に成功してSMART情報が読めていたのでした。
さすがだぜ!smartmontools!!

ここで一つの選択肢ができました。
OpenHardwareMonitorを改造して運用するか、smartmontoolsとOpenHardwareMonitorを併用して行くか、という選択肢です。

結果から言うと、サーバからの問い合わせに回答するプログラムを作り、その中で問い合わせ先を振り分ける、という実装にすることにしました。
というのは、いつOpenHardwareMonitorやOSそのものが対応するかもわからないし、改造版を動かすというのは改造元のアプリがアップデートされた場合のキャッチアップがだりぃということが理由でした。動いてんだからキャッチアップする理由もねぇんだけどな。気分だわな。

ということで。ここでSNMPを利用してWMIを参照する、とかいうだるい手法を採用する目がつまれました。
SNMPなみなさんは汎用性を目指すあまり重いしね。

やるこたあ一緒なんだけどね。エージェントが今回作るつもりのプログラムで、マネージャがHotSaNICなだけだけだからね。

つづく。

0 件のコメント:

コメントを投稿