Aurora ServerlessでログをCloudWatch Logsへ出力可能になりました

Aurora ServerlessでログをCloudWatch Logsへ出力できるようになりました。
2019.02.26

大栗です。

先程Aurora ServerlessのログをCloudWatch Logsへ出力できるようになりましたので試してみました。

Aurora Serverlessのログ出力

以前のAurora Serverlessは詳細なログ出力の機能は無く、RDSとしてのイベント情報のみが参照可能でした。そのためDB内部の情報を取得出来ませんでした。今回のアップデートによりCloudWatch Logsへのログ出力が可能になり、詳しい情報が取得できます。

出力可能なログは普通のAurora MySQLと同様に以下のもののようです。

  • エラーログ
  • 監査ログ
  • 一般ログ
  • スロークエリログ

また、今回のアップデートの伴ってクラスターパラメータグループでインスタンス用の項目も設定できるようになっています。そのため、今までクラスターパラメータグループでは設定できなかったslow logやgeneral logの設定も行えるようになっています。

やってみる

今回は東京リージョンで試してみます。

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

まずログ設定のためのクラスターパラメータグループを作成します。

RDSコンソールのパラメータグループの画面でパラメータグループの作成をクリックします。

以下のように設定を行い、作成をクリックします。

項目名 備考
パラメータグループファミリー aurora5.6 Aurora Serverlessは5.6のみのため
タイプ DB Cluster Parameter Group
グループ名 serverless-1 自由に設定して下さい
説明 <任意>

次にログ出力の設定を行います。

エラーログ

エラーログは設定無しで出力されるため割愛します。

監査ログ

監査ログはクラスターパラメータグループに以下の設定を行います。

項目名 設定可能な値 備考
server_audit_events CONNECT, QUERY, QUERY_DCL, QUERY_DDL, QUERY_DML, TABLE 監査する対象のイベントです。複数イベントの入力が可能です。
server_audit_excl_users <なし> 監査対象外のユーザなし
server_audit_incl_users <なし> 全てのユーザが対象
server_audit_logging 1 監査ログを有効にするか設定します。
server_audit_logs_upload 1 監査ログのCloudWatch Logsへのアップロードを有効にするか設定します。

一般ログ

一般ログはクラスターパラメータグループに以下の設定を行います。

項目名 設定可能な値 備考
general_log 1 監査ログを有効にするか設定します。

スロークエリログ

スロークエリログはクラスターパラメータグループに以下の設定を行います。スロークエリの設定にはlog_queries_not_using_indexesなどもありますがここでは割愛します。

項目名 設定可能な値 備考
slow_query_log 1 スロークエリログを有効にするか設定します。
long_query_time 1 スロークエリを出力する実行時間の閾値(秒)

Aurora Serverlessを起動する

Aurora Serverlessを起動します。

RDSコンソールのデータベースの画面でデータベースの作成をクリックします。

エンジンのオプションでAmazon Auroraを選択して、エディションでMySQL 5.6 との互換性を選択して次へをクリックします。

以下のように設定して、次へをクリックします。

項目
Capacity type Serverless
DB クラスター識別子 <任意>
マスターユーザの名前 <任意>
マスターパスワード <任意>
パスワードの確認 <マスターパスワードの値>

今回は以下のように設定します。

項目 備考
最小 Aurora キャパシティーユニット 2
最大 Aurora キャパシティーユニット 64
Virtual Private Cloud (VPC) デフォルト VPC
サブネットグループ default
VPC セキュリティグループ 既存の VPC セキュリティグループ の選択(default)

追加設定を開き以下の設定を行って、データベースの作成をクリックします。

項目 備考
DB クラスターのパラメータグループ serverless-1 クラスターパラメータグループの設定で作成したものを設定
バックアップの保存期間 1日
マスターキー <任意>
削除保護の有効化 チェック

Aurora Serverlessが起動するまで待ちます。

Aurora Serverlessが起動したら対象のクラスタを選択して、

ログを確認する

まずAurora Serverlessにログイン確認をしてみます。普通にログインができます。

$ mysql -uawsuser -pmypassword -h serverless-1.cluster-a1b2c3d4e5f6.ap-northeast-1.rds.amazonaws.com
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 15
Server version: 5.6.10 MySQL Community Server (GPL)

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

SQLも実行してみます。スロークエリを出力するためにsleepで5秒待ってみます。

MySQL [(none)]> select now();
+---------------------+
| now()               |
+---------------------+
| 2019-02-26 08:26:18 |
+---------------------+
1 row in set (0.00 sec)

MySQL [(none)]> select sleep(5);
+----------+
| sleep(5) |
+----------+
|        0 |
+----------+
1 row in set (5.00 sec)

MySQL [(none)]>

次にログを確認します。ログは以下の命名ルールでCloudWatch Logsに出力されます。

ログの種類 ロググループ名
エラーログ /aws/rds/cluster/<クラスタ名>/error
監査ログ /aws/rds/cluster/<クラスタ名>/audit
一般ログ /aws/rds/cluster/<クラスタ名>/general
スロークエリログ /aws/rds/cluster/<クラスタ名>/slowquery

各々のログを確認してみます。

エラーログ

監査ログ

一般ログ

スロークエリログ

さいごに

ようやくDBの詳細情報が取れるようになりました。基本的には開発や検証用途の目的でAurora Serverlessを使用するものですが、何かあったときにはログがないと状況が掴めません。CloudWatch Logsなのでログを出力しすぎると高コストになってしまいますが、できる限りログを出力したほうが良いかもしれません。