障害を検知したら、次は携帯電話やスマートフォンに通知メールを送信しよう。これなら外出中でも受け取りやすい。ここでは自動化するために、コマンドラインからメールを送信できる「SMAIL」という無償で利用できるツールを使ってみる。
SMAILをセットアップするには、まず「◆バージョン履歴・ダウンロード」の枠から最新版インストーラのZIPファイル(smail-v<バージョン番号>.zip)をダウンロードする。そこから実行ファイルの「smail.exe」だけを、実行パスに含まれるフォルダに解凍する。
次にオプションを指定せずにsmail.exeを起動すると初期設定画面が表示されるので、送信先のメール・サーバに合わせて「■SMTPサーバ」の設定を行う。具体的には、SMTP認証のためのIDとパスワードの指定、暗号化プロトコルの選択などが必要だ。メール・サーバによって設定内容が異なるので、SMAILのアーカイブに含まれる「SMAIL設定参考資料.pdf」を参照して設定する。社内メール・サーバなら、担当の管理者に確認しよう。
 SMAILの初期設定画面
SMAILの初期設定画面設定後、[保存]ボタンと[終了]ボタンをクリックすれば初期設定は完了だ。さっそくテスト・メールを送信してみよう。あらかじめメール本文のテキストをhonmon.txtというファイルに保存してから、次のコマンドラインを実行すると、送信者「xxxxxxx@gmail.com」から受信者「xxxxxxx@willcom.com」にテスト・メールが届くはずだ。
   C:¥temp>smail -hsmtp.gmail.com -fxxxxxxx@gmail.com -s"テスト・メール" -Fhonmon.txt xxxxxxx@willcom.com -i ……「xxxxxxx@gmail.com」は送信者アドレス、「xxxxxxx@willcom.com」は受信者アドレス
#---------------------- SMAIL 4.17 Information By Eva ------------------- ……以下は送信時の各種設定一覧
#設定ファイル          : [C:¥bin¥smail.ini]
#POP before SMTP    : 使わない
#APOP               : 使わない
#SMTP認証              : 使う AUTH PLAINを利用
#SMTPアカウント     : xxxxxxx@gmail.com
#SMTPS (SMTP over SSL) : 使う[OpenSSL 1.0.1e]
#SSL方式               : v2/v3
#STARTTLS              : 使わない
#本文ファイル          :honmon.txt [19 bytes]
#添付ファイル          :なし
#メールサーバ     :smtp.gmail.com
#メール送り元     :xxxxxxx@gmail.com
#メール送り先     :xxxxxxx@willcom.com
#サブジェクト内容   :テスト・メール
#キャラクターセット  :ISO-2022-JP
#エンコーディング   :7bit
#//メールヘッダー送信完了  (1.62sec)....
#//メール本文送信中     ....
#//メール本文送信完了    (1.78sec)....
C:¥temp>
コマンドライン・オプションの意味は次の通りだ。
| オプション | 意味 | 
|---|---|
| -h<メール・サーバのFQDNまたはIPアドレス> | 【必須】SMTPで送信するメール・サーバの指定 | 
| -f<送信者アドレス> | 送信者のメール・アドレスの指定 | 
| -s<サブジェクト> | サブジェクト(表題)の指定 | 
| -F<本文ファイル名> | 本文を記したテキスト・ファイルの指定 | 
| <受信者アドレス1>,CC:<受信者アドレス2>,BCC:<受信者アドレス3> | 【必須】受信者のメール・アドレスの指定。アドレスの前に「CC:」「BCC:」を付けると、それぞれCc/Bccで送信される。複数の場合は半角カンマで区切る | 
| -i | 送信時の各種設定を一覧表示する | 
| -d | デバッグ表示モード。SMAILとメール・サーバ間のSMTPでのやり取りを確認できる | 
| -a<添付ファイル名> | 添付ファイルの指定。複数の場合は半角カンマで区切る | 
| SMAILの主要なコマンドライン・オプション 半角スペースや「<」「>」を含むパラメータを指定する場合は、「-f"Shimada mobile <xxxxxx@willcom.com>"」のようにダブルクォートでくくる。ほかのオプションについては「smail -?」で表示されるオプション一覧や同梱のreadme.txtを参照していただきたい。 | |
障害通知メールを送る際には、状況を素早く把握するためにサブジェクトに監視対象URL、メール本文にWget実行時のメッセージ(標準エラー出力)をそれぞれ記入してみよう。それには以下のようにバッチ・ファイル内で環境変数とリダイレクトを組み合わせれば実現できる。
   set TargetURL=http://locationsmart.org/index.php
set SMTPServer=smtp.gmail.com
set MailFrom="Shimada Gmail <xxxxxxx@gmail.com>" ……「<」「>」が含まれるのでダブルクォートでくくる
set MailTo="xxxxxxx@willcom.com"
set MailSubject=【死活監視】 %TargetURL% で障害発生を検知しました ……監視対象URLをサブジェクトに挿入
set MailBody=honmon.txt
set SMAILOpt=-i
echo こちらは死活監視プログラムです。> %MailBody% ……リダイレクトを利用してメール本文を生成
echo %TargetURL% で障害の発生を検知したのでお伝えします。>> %MailBody%
echo.>> %MailBody%
echo ----- 以下はwgetの標準エラー出力です ----->> %MailBody%
type wget.stderr.log>> %MailBody% ……Wget実行時の標準エラー出力をメール本文に挿入
echo ----->> %MailBody%
smail %SMAILOpt% -h%SMTPServer% -f%MailFrom% -s"%MailSubject%" -F"%MailBody%" %MailTo%
以上で死活監視に必要な機能は揃った。エラー処理も加えたバッチ・ファイルは以下からダウンロードできる。
複数のWebサイトを一度に監視できるように、監視対象URLは上記のバッチ・ファイルと同じフォルダにある「list-url.txt」から取得するようにしてある。このテキスト・ファイルを新規作成し、次のように1行ずつ<監視対象URL>と<対象ページの文字コードに対応したnkfのオプション>、<検索文字列>をタブで区切って記しておくと、上記のバッチ・ファイルが1つずつWgetでアクセスしていくという仕組みだ。
   http://locationsmart.org/index.php     -W     >新着マップなど、最新情報発信中!</p>
http://bbs.hotfix.jp/     -S     HotFix Report
↑それぞれタブ1文字で区切って記述する
<対象ページの文字コードに対応したnkfのオプション>には、下表を参考にnkfのオプションを記述する。
| 文字コード | nkfのオプション | 
|---|---|
| UTF-8 | -W8 | 
| JISまたはISO-2022-JP | -J | 
| EUC-JP | -E | 
| Shift_JIS | -S | 
| ダウンロードされるHTMLファイルの文字コードと、list-url.txtで2カラム目に指定するnkfのオプションとの対応 あらかじめ監視対象URLからダウンロードされるHTMLファイルの文字コードを調べておき、それに対応するnkfのオプションをlist-url.txtの2カラム目に記述する。このオプションは必ず大文字で指定すること。 | |
また、バッチ・ファイル内の「SMAILの設定」にあるSMTPサーバのアドレスと送信者メール・アドレス、受信者メール・アドレスもあらかじめ指定しておいていただきたい。
あとは、常時稼働しているWindowsマシン上で、このバッチ・ファイルを5分ぐらいの間隔で自動実行すればいい。それにはまず、次のTIPSを参考にしてタスク・スケジューラで1日1回バッチ・ファイルを起動するタスクを作成する。
なお、タスクを起動する時刻は何時でもよい。
 1日1回起動するタスクの作成
1日1回起動するタスクの作成 バッチ・ファイルを実行するための設定
バッチ・ファイルを実行するための設定次に、タスクのトリガーを編集して「1日中」「5分間隔」でタスクを繰り返し実行するように変更する。それには次のTIPSを参考にして設定する。
 5分おきにタスクを起動するためのトリガー設定
5分おきにタスクを起動するためのトリガー設定さらに対話的ログオンをしていなくても実行できるように、タスクの[全般]タブの「セキュリティ オプション」−[ユーザーがログオンしているかどうかにかかわらず実行する]ラジオボタンを選択する(詳細は次のTIPS参照)。
 対話的ログオンをしていなくてもタスクを起動するための設定
対話的ログオンをしていなくてもタスクを起動するための設定以上でタスク・スケジューラの設定は完了だ。
このタスクが繰り返し実行されている最中でも、対象のWebサイトが正常にアクセスできる限り、通知メールは届かない。もしWebサイトが停止すると、次回のタスク実行時から復旧するまで、次のようなメールが繰り返し届くはずだ。
本稿では無償のコマンドライン・ツールとバッチ・ファイルを組み合わせて、Webサイトの死活監視プログラムを自作してみた。決して本格的かつ網羅的な監視ができるわけではないが、それでもWebサーバのダウンなど致命的なトラブルは速やかに検知できる。またカスタマイズができるというメリットもある。例えば、Wgetの代わりにデータベースやDNSなどのサービスにアクセスできるコマンドライン・ツールを用いれば、バッチ・ファイルを大幅に書き換えることなく、ほかのサービスの死活監視にも応用できる。
「もっと簡単な方法がある」「この監視サービスの方が便利だ」といったご意見・提案などがあれば、ぜひ本ページのツイート・ボタンでつぶやくか、本誌のFacebookページに書き込みをお願いしたい。
「運用」
Copyright© Digital Advantage Corp. All Rights Reserved.