SDB Tools - S.M.A.R.T. D-B Tools | Version 0.99a edition #01 (BETA) | |
(C) Copyright 2006, taro | SDB Server Setup Manual - SDBサーバ セットアップ マニュアル |
ここではSDBサーバのセットアップ手順を説明します。
SDBサーバは使うためには別途、WebサーバApache、スクリプト言語PHP、データベースPostgreSQLが必要ですが、これらのソフトウェアのインストール方法等はここでは説明していません。
またバージョンによっては本説明で取り上げている内容とは操作や設定が異なる場合があります。既にWebサーバやデータベースを運用しているパソコンにSDBサーバをインストールする場合は、本説明で示しているディレクトリや名前がそのままでは使えないことがあるかもしれません。本説明のでのディレクトリやデータベース、ユーザの名前は例として挙げているだけですので、各自で変更・カスタマイズしてください。
SDBサーバはApache/PHP/PostgreSQLがあればWindwosでもLinuxでも動作します。ただし、HTMLやPHP用スクリプトの日本語コードはWindows環境で一般的なシフトJISではなくEUCを使っているので注意してください。
基本的なセットアップ手順は、
収録ファイルにはインストール作業行うスクリプト/バッチファイルを用意しています。Linuxではsetup-linux.shを(rootで実行してください)、Windwosではsetup-win.batを実行してください。パラメータにはインストール先のディレクリトを指定できます。インストール先を省略した場合、Linuxでは /usr/local/sdb/http 、Windwosではc:\sdb にインストールします。
これらのスクリプト/バッチファイルはファイルをコピーするだけです。Apache、PostgreSQL等の設定は手動で行います。
また、SDBクイラアント用のプログラムもインストールしてください。Windows用のsetup-win.batを実行した場合はSDBクライアント用プログラムもインストールされますが、そうでない場合は手動でインストールしてください。
Windows環境ではsdbctl.exe、sdbwatch.exe、sdb.def、libpq.dllの4つ、Linux環境ではsdbctl、sdbwatch、sdb.defの3つのファイルが必要です。
SDBクライアント用プログラム・ファイルの中にはSDBサーバには不要なものもありますが、SDBサーバにするパソコンでSDBクライアントを動かしてS.M.A.R.T.情報を取得・監視できますので、すべてインストールしておくことをお勧めします。
SDBクライアントのインストール・設定方法はSDB Toolsマニュアル(→sdbtools.htm)か、Windowsではクイックスタート マニュアル(→quickstart.htm)の中で説明しています。
PostgreSQLでS.M.A.R.T.情報を記録するデータベースを作成・設定します。
必要な設定は、sdb_userというユーザを追加して、そのパスワードを「sdb_pass」に設定します。また、「sdb」という名前でデータベースを作成して、ユーザsdb_userが操作できるように設定します。
設定・操作方法は色々と考えられますが、ここではデータベースsdbの、所有者をsdb_userにします。
以後の操作はPostgreSQLのスーパーユーザ(通常はpostgresかと思います)で行ってください。
PostgreSQLに「sdb_user」というユーザを追加します。パスワードは「sdb_pass」とします。
「psql sdb」でpsqlを実行して、CREATE USER を実行してください。
ユーザの作成
|
後からユーザのパスワードを変更したい場合は、次のようにします。
パスワードを変更
|
SDBクライアントはここで作成したsdb_userというアカウントでデータベースを操作するので、データベースやユーザの操作権限は最小限にしておいたほうがいいでしょう。
「sdb」という名前のデータベースを作成します。所有者は「sdb_user」とします。
psqlから、CREATE DATABASE を実行します。
データベース作成
|
後からデータベースの所有者をsdb_userに変更するときは次のようにします。
データベースの所有者を変更
|
公開SDBサーバのようにHTTPモードを使うなら必要ありませんが、SDBクライアントを実行する各パソコンが直接データベースを操作するためにはPostgreSQLのクライアント確証の設定が必要です。
LANにあるパソコンがデータベースに接続できるように、PostgreSQLのpg_hba.confとpostgresq.confを編集します。
pg_hba.confではクライアント確証方式を指定します。確証方式はcrypto/md5/password/trust等が選択できますが、通常は推奨されているmd5を選択するのがいいでしょう。trustは無条件に接続を許可する方式ですのでお勧めできません。PostgreSQLのバージョンによって形式が異なりますので、使用しているPostreSQLに合わせて設定してください。
たとえば、LANにあるパソコンのIPアドレスが192.168.1.1〜192.168.1.254、サブネットマスクが255.255.255.0として設定されているなら、次のような内容を追加します。
PostgreSQL 7.4:pg_hba.confの例
|
PostgreSQL 8.1:pg_hba.confの例
|
加えてpostgresql.confにある「listen_addresses」を設定しておく必要があります。デフォルトでは「#」でコメントアウトされていると思います。SDBサーバのIPアドレスが「192.168.1.35」なら次のように設定します。
postgresql.confの例
|
すべてのインターフェースから接続を受け付ける場合は次のように設定しておくこともできます。
postgresql.confの例
|
pg_hba.confやpostgresql.confの設定を変更した場合、PostgreSQLの構成のリロードか、サービスの再起動が必要です。
SDBクライアント用プログラムに含まれるsdb.defファイルと、Webサイト用のPHP用スクリプトsdbsite.incをユーザに環境に合わせて編集します。
sdb.defはSDBクライアントでも使用しますが、ここではSDBサーバの関係する項目を説明します。SDBクライアントの関係する箇所につしては、SDBクラアントの説明を見てください。
sdb.defファイルの内容例
|
[1]〜[5]はデータベースPostgreSQLに関する設定です。データベースやユーザの名前を本説明の例と同様に設定したなら変更は不要です。
[10]〜[13]は、S.M.A.R.T.情報を監視して異常を検出するための設定です。
異常を検出したときにメールで通知したい場合には、[11]〜[13]を設定してください。
PHP用のsdblib.incとsdbsite.incも編集しておく必要があります。これはHTMLファイルを格納したphplibディレクトリ(本説明と例と同じようにインストールした場合、Linuxでは/usr/local/sdb/http/phplib、Windowsではc:\sdb\http\phplib)にあります。
データベースやユーザの名前を本説明の例と同様に設定した場合、変更する必要はないと思いますが、念のために確認してください。
sdblib.inc(一部)
|
sdbsite.inc(一部)
|
重要なのは、sdbsite.inc中のSDBWATCH_PATHに指定している、sdbwatchコマンドのパスです。
公開SDBサーバはサーバの負荷低減のためグラフは1度に1種類しか表示しませんが、SDB_GRAPH_ALLをTRUEに指定しておくと全属性のグラフが表示できるようになります。
マクロ | 内容 |
SDB_GRAPH_IMGTYPE | グラフの画像形式(gif,png,jpeg) |
SDB_GRAPH_ALL | 全属性のグラフ表示を許可 |
SDB_GRAPH_OFFLINE_SEC | グラフ表示でオフライン(電源オフ)と認識する秒数 |
SDBWATCH_PATH | sdbwatchコマンドのパス |
SDB_HTTPPOST_DAY_MAX | HTTPモードで1日に記録できるデータ数 |
SDB_CFG_NOUSERPASS | Web操作で確証コードなしのデバイスの設定変更を許可 |
SDB_CFG_WEB_DELETE | Web操作でデータの削除を許可 |
SDB_GRAPH_OFFLINE_SECはグラフ表示でオフライン状態、つまり電源オフの状態を認識する秒数です。デフォルトでは3660秒(1時と1分)を指定しています。データの更新間隔が5分とか10分とか短い場合は、SDB_GRAPH_OFFLINE_SECを1800秒(30分)とか900秒(15分)にしてもいいでしょう。
SDB_HTTPPOST_DAY_MAXはHTTPモードで1日に記録できるデータ数の制限です。これは1デバイスあたりの制限です。デフォルトでは900個を指定しています。S.M.A.R.T.情報は最大で30個(属性IDは1〜255までありますが)ありますので、900の設定なら「900÷30=30」で1日に30回データが記録できます。
SDB_CFG_NOUSERPASSをTRUEにすると、確証コードが設定されていないデバイスをWeb操作で設定変更できます。
確証コードが設定されていないデバイスというのは、SDBクライアントで--httpオプションを指定しないでデータベースに追加したデバイスのことです。
sdbctl createdbコマンドを実行して、データベースを作成・初期化しておきます。
sdbctl createdb
|
収録ファイルのweb/httpディレクトリをWebページとして公開できるようにWebサーバApacheを設定します。また、拡張子.phpのファイルはPHPスクリプトとして実行できるように設定します。
通常はApacheの設定ファイルはhttpd.confに次のような内容を追加します。
httpd.confの例
|
日本語の文字が化けてしまって正しく表示できない場合には、php.iniや.htaccessでPHP関連の日本語コードを設定しておく必要があります。
.htaccessの例
|
S.M.A.R.T.情報の監視は「設定ファイルの編集」で説明したようにsdb.defを編集しておけば、基本的な機能は動作します。
あとは、監視のためsdbwatchコマンドをcronで定期的に実行するように設定しておきます。
sdbwatchには単純に属性値と閾値(Threshold)を比較だけのファストモードと、蓄積されたデータを元に将来の予測を行うロングモードがあります。指定がなければファストモードとして実行されますが、明示的に--fastオプションを指定することもできます。ロングモードを使う場合は--longオプションを指定します。
通常、ファストモードは1時間に1回程度、ロングモードは1日に1回程度の頻度で実行することを想定しています。ロングモードは解析に時間がかかるので、頻繁に実行するのは向いていません。ファストモードは短時間で実行できますが、管理するハードディスクの台数が多いと時間がかかるので、各自の環境に合わせて調整してください。
1時間毎にファストモードを、毎朝8時にロングモードでの監視を実行するなら、cronに次のように設定します。Windowsではタスク スケジュールを使ってください。
エラーや警告が出たときにメールで通知したい場合は--sendmailオプションも追加してください。また、メールでの通知機能を使うためには設定ファイルsdb.defに必要な設定を行っておく必要があります。
cronの設定
|
Windows用のSDBクライアント・プログラムsdbtaskは実行時にファストモードと同様のチェック(属性値と閾値の単純な比較)を行っていますので、SDBサーバでの監視頻度は低くてもデスクトップを利用しているユーザは異常に気がつくでしょう。
ユーザが警告内容を変更したい場合は、データベースsdbのwatテーブルに警告内容を設定しておく必要があります。これは、toolsディレクトリに収録してあるcreatewatch.phpを使って行います。sdbwatch.incに設定内容が記述されていますので、これを編集・変更した上で「php createwatch.php」として実行してください。
監視用テーブルの設定方法についてはSDB Toolsマニュアル「4-1 監視用テーブル設定」を参照してください。
S.M.A.R.T.情報を監視したいデバイスをSDBサーバに登録するには、Windowsでは「sdbctl add --dev disk0」、Linuxでは「sdbctl add --dev /dev/hda」とします。デバイスのdisk0や/dev/hdaの部分は実際のハードディスクに合わせて変更してください。
デバイス登録したらWebブラウザで表示したSDB ToolsのWebページに戻ってください。「モデル」の「シリアル」は空欄でかまわないので「デバイスの検索・表示」ボタンをクリックして、先ほど登録したデバイスが表示されれば正常に動作しています。
デバイスを登録しただけでは、S.M.A.R.T.情報は記録されていません。S.M.A.R.T.情報を記録するには「sdbctl update --dev disk0」や「sdbctl update --dev /dev/hda」を実行してください。
S.M.A.R.T.情報は1属性につき最低38バイト使います。実際のファイルやメモリ消費量はプログラミング言語やシステムに影響されますが、圧縮しない限りこれより小さくなることはありません。
属性IDは255種類ありますが、1つのデバイスに使われているのは最大30種類です。これを1時間間隔で記録するとしたら、30種類×24時間で720個、365日記録するとデータ数は720個×365日で262,800個となり、データサイズは9,986,400バイト、約10Mバイトになります。
実際のデータ量はもっと大きいと思いますが、数倍になってもこの程度なら十分処理できるはずです。
しかし、S.M.A.R.T.情報の記録間隔で5〜10分になるとデータ量は6〜12倍になり、数百Mバイトから下手するとギガバイト単位になります。特に故障時期の予測は、過去に記録したすべてのデータを使うので、データベースの処理や分析に時間もメモリも使います。
十分なパソコンの性能があれば別ですが、5〜10分といった頻度で数ヶ月とか長期間記録するのは現実的ではありません。
5〜10分間隔といった高い頻度で記録している場合、過去のデータは1時間単位にデータをまとめるといいでしょう。そういった処理を行うメンテナンス用ツールadjust-smart.phpやcopy-smart.phpを用意しています。これらのツールについては次項で説明しています。
メンテナンス用ツール |
SDBサーバのメンテナンス用にいくつかツールを用意しています。
■ | adjust-smart.php |
adjust-smart.phpは、指定期間のS.M.A.R.T.情報を平均化して記録・更新するツールです。
5〜10分という比較的高い頻度で数ヶ月とか数年に渡って記録しているとデータ量が増加し、グラフ表示や分析に時間がかかるようになります。しかし、1ヶ月以上前の古いデータは5〜10分という頻度で記録していても将来予測には影響しないので、これらを1時間単位にまとめて記録しなおします。
たとえば、5分間隔で24時間30日記録すると、データ件数は属性1つにつき8640件となります。属性が最大の30種類あったら30日で25万9,200件になります。これを1時間単位で記録しなおすと、属性1種類につき720件と、12分の1にデータ量を減らすことができます。
次の書式で利用します。
adjust-smart.php [--db_host <アドレス>] [--db_name <データベース名>] [--db_pass <パスワード>] [--db_port <ポート>] [--db_user <ユーザ名>] [--dev_id <デバイスID>]・・・ [--end <日時>] [--interval <秒数>] [--start <日時>] |
■ | copy-smart.php |
copy-smart.phpは異なるデータベース間でS.M.A.R.T.情報をコピーするツールです。また、記録データは指定の間隔にまとめて(adjust-smart.phpと同様の処理)した上でコピーします。
5分間隔で記録しているS.M.A.R.T.情報を、別のSDBサーバやデータベースに1時間隔にまとめてコピーすることができます。
copy-smart.php <コピー元アドレス> [[--db_name <データベース名>] [--db_pass <パスワード>] [--db_port <ポート>] [--db_user <ユーザ名>]] <コピー先アドレス> [[--db_name <データベース名>] [--db_pass <パスワード>] [--db_port <ポート>] [--db_user <ユーザ名>]] [--dev_id <デバイスID>]・・・ [--end <日時>] [--interval <秒数>] [--start <日時>] |