Skip to main content
評価してください: 

vol.6「レポートを携帯電話に送信してみよう」

Visual Studio .NET で専用ツールを開発

公開日: 2004 年 11 月 15 日

河端 善博

1. ツール「MomPone」の要件を定義します。

「MomPone」の要件

  • MOM の状態を携帯電話に連絡できる

  • 指定したスケジュールにて、繰り返し実行する

  • 状態は、SQL Server 上の MOM のデータベースから取得する

さらに、今回は実装をシンプルにするため、次の要件を追加します。

実装シンプル化のための追加要件

  • MomPone は、MOM サーバー上で動かす

  • メール送信は、IIS のメール サーバー機能を使う

  • メール サーバーは、MOM サーバー上で動かす

  • 定数は、ソース コード上に埋め込む

  • MomPone は、コマンドライン プログラムとする

2. 出力するメールの内容も、次のように、最新のアラートの概要を一覧する内容にします。

メール内容
件名MOM <日時>
本文サーバー名 発生日時
アラート レベル
アラート概要
メール例
件名MOM 11/01 10:05
本文SRV01 11/02 10:15
サービスは利用できません
MOM Agent heartbeat failure

MOM01 11/02 09:37
エラー
Mail didn't reach some or all the recipients

3. これを実現するため、Visual Studio .NET 2005 では、コマンドライン プログラムとして、次の機能を実装します。

メソッド
GetData()MOM サーバーからデータを取り出し、データ セットにする
SendMail()データ セットをメール形式に組み立て、送信する

4. まず、MOM サーバーからアラート状況を取り出す GetData () メソッドは次のようになります。

メソッド GetData()

private static DataSet GetData()
{
DataSet result = new DataSet();
// データベース接続を作成
using (SqlConnection c = new SqlConnection(cs))
{
c.Open();
// ストアド プロシージャを利用
using (SqlCommand cmd = new SqlCommand(query, c))
{
cmd.CommandType = CommandType.StoredProcedure;
// データ セットを取得
using (SqlDataAdapter a = new SqlDataAdapter(cmd))
{
a.Fill(result, "Result");
}
}
c.Close();
}
return result;
}

MOM のデータベース名は、「OnePoint」です。System.Data.SqlClient 名前空間の SqlConnection、SqlCommand、SqlDataAdapter を利用することにより、簡単にデータをデータ セットとして取り出すことができます。

5. 次に、データ セットを組み立ててメールを送信します。

メソッド SendMail()

private static void SendMail(DataSet ds)
{
// メールを作成
MailMessage message = new MailMessage();
message.To = to;
message.From = from;
message.Subject = String.Format(subject, DateTime.Now);
message.BodyFormat = MailFormat.Text;
message.BodyEncoding = Encoding.UTF8;
// メール本文を作成
StringBuilder sb = new StringBuilder();
foreach (DataRow r in ds.Tables["Result"].Rows)
{
sb.AppendFormat(bodyFormat, r.ItemArray);
}
message.Body = sb.ToString();
// メール送信
SmtpMail.SmtpServer = mailServer;
SmtpMail.Send(message);
}

メール送信は、System.Web.Mail 名前空間の MailMessage と SmtpMail を利用します。メール本文は、GetData() にて取得したデータ セットを元に組み立てます。以上を、コマンドライン プログラムとして、Visual Studio.NET 2003 で開発してビルドし、MOM サーバー上に「MomPone.exe」をコピーします。

6. 次に、ストアド プロシージャを開発します。SQL Server Enterprise Manager を利用して、MOM のデータベース サーバーに接続します。

データベース「OnePoint」に次のストアド プロシージャを追加します。

ストアドプロシージャ p_MomPoneAlertView

CREATE PROCEDURE p_MomPoneAlertView
AS
BEGIN
SELECT TOP 5
ComputerName AS ComputerName,
AlertLevel.Name AS AlertLevel,
SDKAlertView.Name AS AlertName,
DateAdd(hh, DateDiff(hh, GetUTCDate(), GetDate()), TimeRaised)
AS TimeRaised,
Description AS Description
FROM SDKAlertView, AlertLevel
WHERE (ResolutionState < 255) AND Severity = AlertLevel.Level
ORDER BY TimeRaised DESC
END

このストアド プロシージャは、MOM 2005 SDK のビュー「SDKAlertView」とテーブル「AlertLevel」を利用します。

ビュー「SDKAlertView」は、MOM が作成したアラートの履歴と属性を出力します。(ResolutionState < 255) により未解決のアラートにのみ絞り込んで表示しています。

7. MomPone を MOM サーバー上で実行して、テストします。

なお、MOM サーバー上に IIS の SMTP サーバーをセットアップし、127.0.0.1 に対して中継を許可しておきます。

SMTP サーバーの中継アクセスの設定例

図 5: SMTP サーバーの中継アクセスを 127.0.0.1 に許可しておきます。

8. 最後に、MomPone は、定期的にアラート状況を携帯電話にメールします。MOM サーバーのコントロール パネルの「タスク」に MomPone を登録します。

タスクの「実行するアカウント」には、MOM データベースに対してアクセス権のあるユーザーを指定しておきます。

以上で、「MomPone」が完成しました。

筆者は、MomPone を 6 時間ごとに実行する設定にしてサーバーの監視に使っています。

ページのトップへ


目次

著者

河端 善博河端 善博

有限会社 COZAX 代表取締役社長
PASSJ 理事
セキュリティ分科会ボードリーダ
INETA Japan リード
MVP for SQL Server