Amazon Web Services ブログ

Amazon RDS for MySQLとMariaDBのログをAmazon CloudWatchで監視出来るようになりました

Amazon RDSは、トラブルシューティングなどの目的にお使い頂けるように、DBインスタンスで生成されたログを表示およびダウンロードする機能を提供してきました。Amazon Relational Database Service(Amazon RDS) for MySQLとAmazon RDS for MariaDBでは、DBインスタンスのログイベントをAmazon CloudWatch Logsに直接保存出来るようになりました。これにより、AWSサービスを使用して、よりシームレスにDBインスタンスログを扱うことができます。

DBインスタンスログのニアリアルタイム分析

Amazon CloudWatch Logsを使用すると、アプリケーションの様々なコンポーネントからのログを集中的かつ永続的に保存できます。また、特定のフレーズ、値、パターン(メトリック)について、ニアリアルタイムでログを監視することもできます。さらに、設定した状態が発生したときに警告するアラームを設定することもできます。Amazon CloudWatchは他の様々なAWSサービスと統合することが可能です。これにより、以下のような幅広いユースケースでログを利用する価値を向上できます:

  • 通常デジではありえない大量のスロークエリや接続の失敗など、異常な状態を検知するためのアラーム設定
  • 他のアプリケーションログと関連させる
  • セキュリティおよびコンプライアンスの目的でログを保持する
  • ログデータの傾向を分析する

以下の図がアーキテクチャの概要です:

CloudWatchLogs

ログエクスポートの概念

新しいログエクスポート機能は、MySQLおよびMariaDBの次のログタイプをサポートしています:

  • Error log – 起動および停止にデータベースエンジンによって生成された診断メッセージが含まれています
  • General query log – クライアントから受け取ったすべてのSQLステートメントのレコードと、クライアントの接続および切断時間を含みます
  • Slow query log – 設定された時間よりも実行に時間かかったクエリや、定義された行数を超える行を走査したSQL文のレコードが含まれています。 両方の閾値は設定可能です
  • Audit log – MariaDB Audit Pluginを使用して提供されるこのログは、監査目的でデータベースアクティビティを記録します

これらのソースからのログイベントは、Amazon CloudWatchのロググループログストリーム(ログイベントのシーケンス)の形式で保存されます。 各DBインスタンスとログの種類に応じて、DBインスタンスと同じAWS Region内に別のグループを次の命名パターンで作成します:

/aws/rds/instance/<db-instance-id>/<log-type>

ログデータは耐久性のあるCloudWatch Logsに保存され、透過的に暗号化されます。ただし、ログには機密情報が含まれている可能性があります。データを保護するために、アカウント内の適切なユーザーにアクセスを制限する必要があります。そのために、データベースログを含むロググループに対して適切なIAMアクセスポリシーを設定することが重要です。

Amazon RDSはDBインスタンスと同じアカウント内のロググループにservice-linked roleを使用してログを送信します。これにより、Amazon RDSはアカウント内の関連するロググループにアクセスできます。ログの送信を有効にすると、AWSServiceRoleForRDSという追加のIAMロールが表示されることがあります。

CloudWatch Logsへログの送信を有効にするには、以下のように設定を行います。

ログを送信する前の準備

送信を行うログの種類に応じて、いくつかの事前設定を行う必要があります。

  • Error logは標準で有効になっているため追加の作業は不要です
  • Audit logは、MySQLおよびMariaDBインスタンスの両方に対してMariaDB Audit Pluginを追加および設定することで有効に出来ます。設定方法はドキュメントをご覧ください
  • General query logとSlow query logはデータベースエンジン毎のパラメータで有効に出来ます。もし、データベースエンジンのチューニングなどの目的でDB parameter groupの変更を行っていない場合は、以下のパラメータを変更する必要があります:
    • slow_query_log = 1 を設定してSlow query logを有効にします。ログに記録されるステートメントを設定するために役立つ追加パラメータが利用可能です。詳細は、MySQLまたはMariaDBのドキュメントを参照してください
    • general_log = 1 を設定してGeneral query logを有効にします。設定可能なパラメータについては前述のMySQLまたはMariaDBのドキュメントを参照してください
    • log_output = FILE を設定してログをファイルシステムに書き出し、CloudWatch Logsに送信出来るように設定します

注意: 本番DBインスタンスのAudit logとGeneral query logを有効にする場合は注意が必要です。これらのログは実行されたすべてのステートメントをキャプチャして記録するため、DBインスタンスのパフォーマンスが低下する可能性があります。

ログのエクスポートを有効にしてDBインスタンスを作成する

次の手順では、新しいDBインスタンスでこの機能を有効にする方法を説明します。既存のDBインスタンスを変更して、ログのエクスポートを有効にすることも出来ます。

注意: 次の手順では、新しいRDS マネージメントコンソールを使用します。 古いRDSコンソール使用している場合はログエクスポートオプションを使用出来ません。

  1. AWS マネージメントコンソールにサインインし、Amazon RDSコンソールをhttps://console.aws.amazon.com/rds/から開きます
  2. Amazon RDSコンソールの右上から、DBインスタンスを作成するAWSリージョンを選択します
  3. コンソールダッシュボードでLaunch a DB Instanceを選択します
  4. MySQLまたはMariaDBエンジンを選択し、Nextを選択します
  5. ユースケースのプロンプトでProduction – MySQL / MariaDBまたはDev / Test – MySQL / MariaDBを選択し、Nextを選択します
  6. インスタンスサイズ、高可用性、ストレージのプロパティ、識別子、マスターユーザー名、およびパスワードなどのインスタンスの詳細を設定し、Nextを選択します。 これらの設定の詳細については、ドキュメントを参照してください
  7. 詳細設定画面で、ネットワークとセキュリティ、暗号化、バックアップ、監視、およびメンテナンスの設定を必要に応じて設定します。各オプションの詳細については、ドキュメントを参照してください
  8. Database optionsセクションで、有効にするログ(前述の前提条件を参照)に応じて、次のように関連するDB parameter groupOption groupを選択します。 これらはデフォルトのものでも、カスタムのものでも構いません
  9. Log exportsセクションで、エクスポートするログを選択し、前述の設定を使用して有効にします
  10. 最後にLaunch DB Instanceを選択します

Working with database logs in CloudWatch Logs

ログの送信を有効にすると、データベースサーバーのアクティビティに応じて、CloudWatch Logsのコンソールに関連するロググループが表示されます。 デフォルトでは、Amazon RDSは、期限切れにならないようにロググループを設定します。コンソールで次のように有効期限を選択すると、ログイベントの保存期間を変更できます。 Amazon CloudWatch Logsは使用したログストレージの量に応じて課金を行います。そのため、ログに有用な価値がある期間のみログを保持することをお勧めします。

07_log_groups_listing

ロググループを選択すると、ログストリーム内のログイベントをドリルダウンして閲覧出来ます。たとえば、エラーログイベントを閲覧すると、次のような情報が表示されます。

08_log_events_example_error_log

ログイベントに含まれる特定のパターンにフィルターを作成し、それに基づいてCloudWatchメトリックを公開することがd出来ます。カスタムメトリックを使用してアラームを作成し、異常が発生したときに通知することが出来ます。

例えば、DBインスタンスで発生するスロークエリの量を監視出来ます。スロークエリは、ワークロード要件によっては発生する可能性があります。ただし、予期しない量の変化が発生した場合は、パフォーマンスの問題が発生している可能性があります。スロークエリは、Slow query logに記録されます。関連するイベントは、スロークエリロググループの次のサンプルのように表示されます。

09_slow_log_event_example

名前が/slowqueryで終わる関連するロググループを選択し、Create Metric Filterを選択してメトリックフィルタを作成できます(前述の図を参照)。次のように、Filter Patternフィールドを空白のままにして、すべてのログイベントを選択し、Assign Metricを選択します。

10_define_logs_metric_filter

CloudWatchカスタムメトリックを設定するには、フィルタ名と名前空間を指定し、メトリックに名前を付けます。また、スロークエリを含まないレポート間隔のベースラインとしてデフォルト値の0(ゼロ)を設定することをお勧めします。 このオプションを表示するには、Show advanced settingsを選択する必要があります。Create Filterを選択します。

11_create_metric_filter

最後に、DBインスタンスが通常の負荷に対して予想よりも長い時間を要したスロークエリを記録したときに通知するようにアラームを構成できます。これを行うには、Create Alarmを選択します。

12_filtered_metrics_for_log_group

アラームを設定するには、次のスクリーンショットに示すように、アラーム条件と通知ターゲットを設定します。アラームに名前を付け、アラームの状態を設定します。スロークエリがあるときにいつでも通知されるようにするには、条件を: is > (より大きい) 0(ゼロ)に設定します。通常のユースケースで許容される量のスロークエリが定常的に記録される場合は、より大きな閾値を使用します。また、希望の監視期間(デフォルトは5分)と通知先(たとえばデータベース管理者の電子メールアドレス)を設定し、Create Alarmを選択します。

13_configure_alarm

Next steps

上記のプロセスを使用して、他のメトリックとアラームを設定できます。たとえば、次のようになります:

  • データベースの接続失敗を監視(セキュリティコンプライアンスのためのよくある要求です)。監査ログを使用し、”FAILED_CONNECT"というフィルタパターンでメトリックフィルタを設定します。また、”[Note] Access denied for user“というフィルタパターンを使用して、エラーログから失敗した接続を検出することもできます。
  • mysqldプロセスの起動や再起動を監視。エラーログを使用して、関連する”starting as process“文字列を検索するフィルタパターンを含むメトリックフィルタを設定します。

データベースログをAmazon S3にエクスポートすることも出来ます。ログがAmazon S3にある場合、ライフサイクルポリシーを設定してログをアーカイブし、組織のニーズに応じて保存ポリシーを設定出来ます。ログがAmazon S3にある場合、長期的な傾向分析のためにAmazon Athenaを使用してログを参照することも出来ます。詳細については、こちらの記事をお読みください。この記事では、Amazon Auroraの監査ログについて説明していますが、監査プロセスはAmazon RDSのMySQLとMariaDBログに似ています。

Amazon CloudWatch Logsは、Amazon Elasticsearch ServiceおよびAWS Lambdaサブスクリプションによるリアルタイム処理もサポートしています。前者では、一般的な視覚化ツールKibanaを使用しデータベースログを分析出来ます。後者では、データベースログイベントと一致するものがCloudWatch Logsに送信された時に、functionと自動化プロセスを起動出来ます。

Amazon RDS for MySQLおよびMariaDBログをCloudWatch Logsにエクスポートすることにより、データベースログからさらなる価値を引き出す強力なメカニズムが利用出来ます。


About the Authors

Vlad Vlasceanu is a specialist solutions architect at Amazon Web Services. 彼はお客様と協力して、データベースプロジェクトに関するガイダンスと技術支援や、AWSを使用してソリューションの価値を向上させる支援を行っています。

 

 

 

翻訳は星野が担当しました(原文はこちら)