Amazon RDS for MySQL のログを Amazon CloudWatch Logs へ直接保存する。

AWSRDSCloudWatch

Written by Kohei Yamada Posted on 2018/02/27



はじめに

Amazon RDS のログが Amazon CloudWatch へ直接保存できるようになったということで、試してみました。


対応ログタイプ

RDSでエクスポートできるログタイプは以下になります。

ログイベントは CloudWatch のロググループにログストリームの形式で保存されます。
また、ログはDBインスタンスの同じリージョン内で保存されます。


パラメータグループの設定

ログをCloudWatchへ送るために、まずはログ出力を有効にする必要があります。

今回は「set-log」というパラメータグループを新規に用意して設定しています。
スクリーンショット 2018-02-06 11.14.18.png

作成したらパラメータグループをクリックします。
スクリーンショット 2018-02-06 11.15.05.png

それでは、各ログを有効にするために以下の設定を行います。


Slow query log

slow_query_log のパラメータを修正します。
デフォルトは値なし(0)なので1へ変更します。
スクリーンショット 2018-02-06 11.16.40.png

また、スロークエリーログに出力される値は long_query_time で設定できます。

スクリーンショット 2018-02-07 22.36.16.png

デフォルトは値なしですがその場合はデフォルト値(10秒)となります。


General query log

general_log のパラメータを修正します。
こちらも、デフォルトは値なし(0)なので1へ変更します。
スクリーンショット 2018-02-06 11.17.08.png


Error log

Error log は標準で有効なのでパラメータの変更は不要です。


ログ出力

log_outpu のパラメータを修正します。
デフォルトのログ出力はTABLEなのでFILEへ変更します。
スクリーンショット 2018-02-06 11.17.41.png

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


データベースの設定変更

新規の場合は作成時にパラメータグループを指定します。既存のDBインスタンの場合はパラメータグループの変更を行うか、先ほど設定したログ内容を

「ログのエクスポート」でエクスポートするログを選択します。
スクリーンショット 2018-02-06 11.33.33.png

以上で完了です。


確認

Amazon CloudWatch Logs を確認します。
ログは以下のような命名パターンで作成されます。

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

実際に先ほど設定したログが保存されると以下のようになります。

スクリーンショット 2018-02-06 11.52.09.png
スクリーンショット 2018-02-06 12.06.08.png

ログのエクスポートで全般ログにチェックを入れませんでしたが、入れるとgeneralという名前のログが保存されます。


Amazon RDS → Amazon CloudWatch Logs

Amazon RDSはDBインスタンスと同じアカウント内のロググループにservice-linked roleを使用してログを送信します。これにより、Amazon RDSはアカウント内の関連するロググループにアクセスできます。
ログの送信を有効にすると、AWSServiceRoleForRDSという追加のIAMロールが通常は作成されます。
設定後にはIAMの管理画面で実際に確認ができます。

スクリーンショット 2018-02-06 21.23.32.png


おわりに

今まで、RDSのログを保存するのにCLIなどで定期的にダウンロードを行っていましたが、今後はそういったことが不要になるのはとても助かります。
また、これによって Amazon CloudWatch でログ監視ができるようになるため、運用負荷がとても軽くなるなと感じました。