1. ツール「MomPone」の要件を定義します。
2. 出力するメールの内容も、次のように、最新のアラートの概要を一覧する内容にします。
メール内容
|
件名
|
MOM <日時> |
本文
|
サーバー名 発生日時 アラート レベル アラート概要 |
<table border="0" cellpadding="0" cellspacing="0" style="margin-bottom:12px;" width="100%">
<tr>
<td colspan="2" style="border:solid 1px #ccc; background-color:#999999; color:#fff; padding:5px;">
<strong>メール例</strong>
</td>
</tr>
<tr>
<td style="border-bottom:solid 1px #ccc; border-left:solid 1px #ccc; border-right:solid #ccc 1px; padding:5px; background-color:#f0f0f0;" valign="top">
<strong>件名</strong>
</td>
<td style="border-bottom:solid 1px #ccc; border-right:solid #ccc 1px; padding:5px;">MOM 11/01 10:05</td>
</tr>
<tr>
<td style="border-bottom:solid 1px #ccc; border-left:solid 1px #ccc; border-right:solid #ccc 1px; padding:5px; background-color:#f0f0f0;" valign="top">
<strong>本文</strong>
</td>
<td style="border-bottom:solid 1px #ccc; border-right:solid #ccc 1px; padding:5px;">SRV01 11/02 10:15<br /> サービスは利用できません<br /> MOM Agent heartbeat failure<br /> ~<br /> MOM01 11/02 09:37<br /> エラー<br /> Mail didn't reach some or all the recipients<br /> ~</td>
</tr>
</table>
<p>
<img alt="" src="https://msdn.microsoft.com/ja-jp/gg618058.mom_com_arrow(ja-jp,MSDN.10).gif" title="" />
</p>
</div>
<p>3. これを実現するため、Visual Studio .NET 2005 では、コマンドライン プログラムとして、次の機能を実装します。</p>
<div style="padding-left:20px;">
<table border="0" cellpadding="0" cellspacing="0" style="margin-bottom:12px;" width="100%">
<tr>
<td colspan="2" style="border:solid 1px #ccc; background-color:#999999; color:#fff; padding:5px;">
<strong>メソッド</strong>
</td>
</tr>
<tr>
<td style="border-bottom:solid 1px #ccc; border-left:solid 1px #ccc; border-right:solid #ccc 1px; padding:5px; background-color:#f0f0f0;" valign="top">
<strong>GetData()</strong>
</td>
<td style="border-bottom:solid 1px #ccc; border-right:solid #ccc 1px; padding:5px;">MOM サーバーからデータを取り出し、データ セットにする</td>
</tr>
<tr>
<td style="border-bottom:solid 1px #ccc; border-left:solid 1px #ccc; border-right:solid #ccc 1px; padding:5px; background-color:#f0f0f0;" valign="top">
<strong>SendMail()</strong>
</td>
<td style="border-bottom:solid 1px #ccc; border-right:solid #ccc 1px; padding:5px;">データ セットをメール形式に組み立て、送信する</td>
</tr>
</table>
<p>
<img alt="" src="https://msdn.microsoft.com/ja-jp/gg618058.mom_com_arrow(ja-jp,MSDN.10).gif" title="" />
</p>
</div>
<p>4. まず、MOM サーバーからアラート状況を取り出す GetData () メソッドは次のようになります。</p>
<p style="padding-left:20px; margin-bottom:24px;">
<strong>メソッド GetData()</strong>
</p>
</div>
<pre xmlns="">
<code>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 に対して中継を許可しておきます。
図 5: SMTP サーバーの中継アクセスを 127.0.0.1 に許可しておきます。
8. 最後に、MomPone は、定期的にアラート状況を携帯電話にメールします。MOM サーバーのコントロール パネルの「タスク」に MomPone を登録します。
タスクの「実行するアカウント」には、MOM データベースに対してアクセス権のあるユーザーを指定しておきます。
以上で、「MomPone」が完成しました。
筆者は、MomPone を 6 時間ごとに実行する設定にしてサーバーの監視に使っています。
ページのトップへ