はじめに
Amazon Aurora PostgreSQL データベースを作成する際に、ログのエクスポートとして、Amazon CloudWatch Logs に発行するログタイプを以下の3種類から選択できます。
・PostgreSQL ログ
・インスタンスログ
・IAM データベース認証エラーログ
ところが、インスタンスの設定により、エクスポートできるログとできないログがあります。今回はインスタンスログに絞って、検証してみます。
経緯
お客様より、「Auroraクラスターでログのエクスポート設定を有効としているが、instanceログがCloudWatchLogsに出力されません。」という問い合わせを受けたため、調査することになりました。
インスタンスログとは
自動一時停止が有効になっている DB インスタンスに対して、DB インスタンスが想定どおりに一時停止できなかった理由を記録するログです。
以下のAWS公式ドキュメントに記載があります。
Aurora PostgreSQL データベースログファイル
Aurora は、自動一時停止が有効になっている DB インスタンスに対して別のログファイルを作成します。この instance.log ファイルは、これらの DB インスタンスが想定どおりに一時停止できなかった理由を記録します。
いきなり結論
インスタンスログは、「自動一時停止が有効になっている DB インスタンスに対して」エクスポートするログのため、Serverless v2でしか出力されず、Provisioned(事前にインスタンスクラスを指定してリソースを確保するタイプ)では、出力されません。
公式ドキュメントにも、「Aurora PostgreSQL の場合、Amazon CloudWatch に公開されるログは、PostgreSQL ログ (postgresql.log) のみです。」とあります。
Amazon CloudWatch にログを発行するオプションをオンにする
Aurora PostgreSQL の場合、Amazon CloudWatch に公開されるログは、PostgreSQL ログ (postgresql.log) のみです。
上記の説明だけだと、Aurora PostgreSQLではインスタンスログは出力されないように受け取れますが、Aurora PostgreSQL データベースログファイルに記載されてるとおり、Aurora Serverless v2で、自動一時停止が有効になっている場合に出力されます。
Aurora は、自動一時停止が有効になっている DB インスタンスに対して別のログファイルを作成します。この instance.log ファイルは、これらの DB インスタンスが想定どおりに一時停止できなかった理由を記録します。インスタンスログファイルの動作と Aurora の自動一時停止機能の詳細については、「Aurora Serverless v2 の一時停止と再開アクティビティのモニタリング」を参照してください。
検証
では、Aurora Serverless v2で、自動一時停止が有効になっている場合にインスタンスログ(instance.log)は記録されるが、CloudWatch に公開されないのでしょうか?
確認してみます。
比較のために、Aurora PostgreSQLでProvisionedとServerless v2のDBを作成し、違いを確認します。
Provisioned
◇以下の内容で、作成
・DB クラスター識別子:XXXXXXXX-aurorapostgre-pvd
・DB インスタンスクラス:Serverless v2以外
・ログのエクスポート:instance ログとPostgreSQL ログにチェック
■Aurora (PostgreSQL Compatible)を選択
■テンプレート:開発/テスト、DBクラスター識別子:XXXXXXXX-aurorapostgre-pvdを設定
■DB インスタンスクラス:Serverless v2以外を選択(ここではメモリ最適化クラスを選択)
■ログのエクスポート:instance ログとPostgreSQL ログを選択
上記内容で作成し、ログを確認します。
・PostgreSQL ログは出力されています。
Serverless v2
◇以下の内容で、作成
・DB クラスター識別子:xxxxxxxx-aurorapostgre-svl2
・DB インスタンスクラス:Serverless v2
・最小キャパシティ (ACU):0
・ログのエクスポート:instance ログとPostgreSQL ログにチェック
■テンプレート:開発/テスト、DBクラスター識別子:XXXXXXXX-aurorapostgre-svl2を設定
■DB インスタンスクラス:Serverless v2、最小キャパシティ (ACU):0を設定
※最小キャパシティ設定が 0 ACU のクラスターは、非アクティブの間は一時停止できます。
■ログのエクスポート:instance ログとPostgreSQL ログを選択
上記内容で作成し、ログを確認します。
・PostgreSQL ログは出力されています。
CloudWatchを確認
ロググループを確認すると、ProvisionedのPostgreSQL ログ(/aws/rds/cluster/XXXXXXXX-aurorapostgre-pvd/postgresql)はあるが、Provisionedのinstance ログ(/aws/rds/cluster/XXXXXXXX-aurorapostgre-pvd/instance)はないことがわかります。
Serverless v2は両方のロググループが作成されています。
/aws/rds/cluster/XXXXXXXX-aurorapostgre-svl2/postgresql
/aws/rds/cluster/XXXXXXXX-aurorapostgre-svl2/instance
Serverless v2のinstance ログがログイベントに書き込まれている事を確認。
まとめ
Aurora PostgreSQLのインスタンスログは、DB インスタンスクラス:Serverless v2で、自動一時停止が有効になっている(ACU:0)場合に出力され、 CloudWatch Logsにも書き込まれます。
最後に
この記事に辿り着いた方は、Aurora PostgreSQLのProvisionedタイプ作成時にログのエクスポートでinstance ログにチェックをつけていたにも関わらず、CloudWatch Logsにログが出力されていないとお悩みの方かもしれません。心配ありません。それは仕様です。
もし、運用要件が合うのであれば、Serverless v2を検討してみるのはいかがでしょうか。
(この記事では、Serverless v2のメリット・デメリットについては触れません。)
最後までお読みいただきありがとうございました。