Amazon Web Services ブログ

データベースの状態がオフラインまたはオンラインに変わったときに Amazon RDS for SQL Server に関する SNS 通知を受け取る

監視はあらゆるリレーショナルデータベース管理システム (RDBMS) にとって重要な側面です。監視設定が適切であればデータベース設定の可視性と制御性が向上します。AWS のお客様の多くは、Amazon CloudWatch メトリクスと Amazon Relational Database Service (Amazon RDS) のイベント通知を使用して、さまざまなメトリクスやイベントをモニタリングしています。

Amazon RDS イベントサブスクリプションは、Amazon RDS for SQL Server のインスタンスレベルのモニタリングとアラートを提供します。ただし、データベースがオフラインになったり、オンラインに戻ったりしたときにアラートを出す直接的なメカニズムはありません。この記事では、RDS for SQL Server インスタンスがオンラインまたはオフラインになったときに Amazon Simple Notification Service (Amazon SNS) の通知を受け取る方法を説明します。

ソリューション概要

このソリューションでは、エラーログを Amazon CloudWatch ログに発行するように Amazon RDS for SQL Server を設定し、データベースの状態がオフラインまたはオンラインのときはいつでも Amazon SNS によるアラートを生成できるようにフィルタを設定します。

次の図は、ソリューションのアーキテクチャを示しています。

このソリューションの大まかな手順は次のとおりです。

  1. Amazon RDS for SQL Server のエラーログを CloudWatch に公開します。
  2. オフラインデータベースまたはオンラインデータベース用のフィルタパターンを作成します。
  3. フィルターされたメトリクスのアラームを作成します。

前提条件

前提条件として、Amazon RDS for SQL Server をセットアップし、CloudWatch と Amazon SNS にアクセスできる必要があります。

Amazon RDS for SQL Server のエラーログを CloudWatch に公開

Amazon RDS for SQL Server のエラーログを CloudWatch に公開するには、DB インスタンスを変更する必要があります。以下のステップを完了してください。

このソリューションのコストについては、Amazon RDS for SQL ServerAmazon CloudWatchAmazon SNS の料金ページを参照してください。

  1. Amazon RDS コンソールのナビゲーションペインで [データベース] を選択し、変更する必要がある DB インスタンスを選択します。
  2. [変更] を選択します。
  3. ログのエクスポート」セクションで、CloudWatch への公開を開始するログを選択します。
  4. [エラーログ] を選択します。
  5. (オプション) [すぐに適用] を選択すると、変更がすぐに適用されます。
  6. 確認ページで、変更内容を確認します。内容が正しければ、[DB インスタンスを変更] を選択して変更を保存します。または、[戻る] を選択して変更を編集するか、[キャンセル] を選択して変更をキャンセルします。

オフラインまたはオンラインのデータベース用のフィルターパターンを作成

Amazon RDS for SQL Server のエラーログを CloudWatch に公開したので、次のステップはフィルターパターンを作成することです。以下のステップを完了してください。

  1. CloudWatch console を開き、ナビゲーションペインの「ログ」セクションからロググループを選択します。お使いの DB インスタンスの Amazon RDS for SQL Server エラーログ (この記事では /aws/rds/instance/sql-database-ee/error) を選択します。
  2. [アクション] で [メトリクスフィルターを作成] を選択します。
  3. フィルターパターンに「OFFLINE」と入力します。
  4. (オプション) 次の手順を使用してパターンをテストできます。
    • 「パターンをテスト」セクションの「テストするログデータを選択」ドロップダウンからテストするログデータを選択します (この場合は sql-database-ee.node2)
    • [パターンをテスト] をクリックします。


    [パターンをテスト] は、データベースの1つが OFFLINE 状態で、対応するエントリがエラーログにある場合にのみ機能します。

  5. [Next] をクリックします。
  6. フィルター名メトリクス名前空間メトリクス名に「OFFLINE Database(s)」と入力します。
  7. メトリクス値に「1」を入力します。
  8. [Next] をクリックします。
  9. [メトリクスフィルターを作成] をクリックします。
  10. 同じ手順に従って、ONLINE データベース用のメトリクスフィルターを作成します。 フィルターパターン、フィルター名、メトリクス名前空間、メトリクス名を適宜変更します。

ユースケースに応じて、フィルター名、メトリクス名前空間、メトリクス名をカスタマイズできます。

フィルターされたメトリクスのアラームを作成

フィルターされたメトリクスのアラームを作成するには、次の手順を実行します。

  1. OFFLINE Database(s) のフィルターを選択し、[アラームを作成] をクリックします。
  2. メトリクス名を入力します(この投稿では OFFLINE Database(s))。
  3. 統計で [最小] を選択し、期間を [30 秒] またはユースケースに応じて適切な値に設定します。
  4. しきい値の種類で [静的] を選択します。
  5. [より大きい] を選択し、「0」を入力します。
  6. [次へ] をクリックします。
  7. アラーム状態トリガーには [アラーム状態] を選択します。
  8. 次の SNS トピックに通知を送信で [新しいトピックの作成] を選択し、トピック名を入力します。(既存のトピックを使用することもできます)。
  9. 通知を受信するための有効なメールアドレスを入力してください。
  10. [トピックの作成] をクリックして、[次へ] をクリックします。
  11. アラーム名に名前を入力します。
  12. 設定を確認して、[アラームの作成] をクリックします。
  13. SNS トピックが作成されたので、メールの Confirm subscription リンクをクリックしてサブスクリプションを確認してください。
  14. 同じ手順を繰り返してオンラインデータベースのアラームを作成し、それに応じて条件を調整します。

ソリューションのテスト

ここで、SQL Server Management Studio (SSMS) を使用して Amazon RDS for SQL Server インスタンスに接続します。

次のスクリーンショットに示すように、データベース DemoDB を使用します。

Alter Database Set コマンドを使用して DemoDB データベースをオフラインにします。

次のスクリーンショットに示すように、SSMS でデータベースの状態を確認できます。
Alter Database Set コマンドを使用して DemoDB データベースをオフラインにします。

また、サブスクライブした E メール ID に通知メールが届きます。

次に、rdsadmin.dbo.rds_set_database_online を使用して DemoDB をオンラインにします。Alter Database db_name Set Online は Amazon RDS for SQL Server では機能しないため、このコマンドを実行すると次のエラーが表示されることに注意してください。

ただし、rdsadmin.dbo.rds_set_database_online は正常に動作します。詳細については、「Microsoft SQL Server データベースをオフラインからオンラインに切り替える」を参照してください。

SSMS を使用してデータベースのステータスを確認できます。

また、データベースがオンラインであることを知らせるメールアラートも届きます。

主な考慮事項

シングル AZ の Amazon RDS for SQL Server を使用してこのソリューションを実演しました。インスタンスを再起動しても、オンラインまたはオフラインのデータベース通知は届かないことに注意することが重要です。これは、SQL Server が再起動後にデータベースの回復プロセスが実行されるためです。そのため、通知を受け取りたい場合は、Starting up database または Recovery is complete というフィルターパターンを使用してユースケースに応じたメトリクスフィルターを作成する必要があります。

SQL Server エラーログの抜粋を次に示します。

2023-04-13 05:17:19.570 spid29s Starting up database 'DemoDB'.
.......
2023-04-13 05:17:21.050 spid9s Recovery is complete. This is an informational message only. No user action is required.

後片付け

料金が発生しないようにこのソリューションを環境内でテスト目的で使用していた場合は、Amazon RDS for SQL Server インスタンスと CloudWatch ログをクリーンアップしてください。

CloudWatch ログを削除するには、次の手順を実行します。

  1. Amazon CloudWatch コンソールに移動します。
  2. 左側のナビゲーションペインで、「ログ」セクションからロググループを選択します。
  3. ロググループの検索フィールドにデータベース名を入力します (例 : sql-database-ee)。
  4. ロググループをクリックします。
  5. [アクション] メニューから [ロググループの削除] を選択します。

DB インスタンスを削除するには、AWS マネジメントコンソールAWS CLI、または Amazon RDS API を使用します。RDS インスタンスを削除するのに必要な時間は、削除するデータ量、バックアップ保持期間 (削除するバックアップの数、最終スナップショットを取る必要があるかどうか) によって変わります。

Amazon RDS for SQL Server DB インスタンスを削除するには、下記のステップに従う必要があります。

  1. Amazon RDS コンソールにアクセスしてください。削除保護が有効になっている場合はチェックを外し、次のステップに進む前にデータベースインスタンスを変更してください。有効になっていない場合は次のステップに進みます。

  2. ナビゲーションペインで [データベース] を選択し、削除する DB インスタンスを選択します。
  3. [アクション] メニューで [削除] を選択し、
  4. [最終スナップショットを作成] を選択して、DB インスタンスの最終的な DB スナップショットを作成します。
  5. 最終スナップショットを作成する場合は、最終スナップショット名に名前を入力します。
  6. 自動バックアップを保持するには、[自動バックアップを保持] を選択します。
  7. テキストフィールドに delete me と入力します。
  8. [削除] をクリックします。

最後に、SNS トピックとサブスクリプションを削除します

結論

この記事では、Amazon RDS for SQL Server のエラーログを CloudWatch に発行する方法、データベースがオフラインまたはオンラインのときに使用するメトリクスフィルタを作成する方法、SNS 通知と CloudWatch アラームを使用して E メールアラートを送信する方法について説明しました。このソリューションはこの記事で説明した内容に限定されません。メトリクスフィルタを使用して Amazon RDS for SQL Server のエラーログをスキャンして必要に応じてアラートを設定することができます。

Amazon RDS for SQL Server の詳細については、Amazon RDS for Microsoft SQL Server を参照してください。この投稿についてコメントや質問がある場合は、コメントセクションに送信してください。


著者について

Kanchan Bhattacharyya は、アマゾンウェブサービスのシニアデータベーススペシャリストテクニカルアカウントマネージャーです。彼は企業のお客様と連携して、データベースの運用パフォーマンスに関する技術支援を提供したり、データベースのベストプラクティスを共有したりしています。Amazon RDS for SQL Server、Amazon RDS for PostgreSQL、Amazon RDS for MySQL、Amazon を専門としています。

 

 

翻訳はソリューションアーキテクトの Yoshinori Sawada が担当しました。原文はこちらです。