Aurora MySQL で FreeLocalStorage に余裕があっても CloudWatch Logs エクスポート前にログが削除される原因と対処方法を教えてください
困っている内容
Aurora MySQL を利用しており、スロークエリログや監査ログなどの CloudWatch Logs へのエクスポートを有効化しています。
しかし、ログイベントに下記のエラーメッセージが記録され、CloudWatch Logs へのエクスポート前にログファイルが削除される場合があります。
Due to storage space constraints, the log file <ログファイル名> will be deleted and will not be uploaded to CloudWatch Logs
CloudWatch の FreeLocalStorage メトリクスを確認した所、ストレージ空き容量には十分な余裕がありました。
ストレージ空き容量に余裕があってもログファイルがエクスポート前に削除されてしまう原因と対処方法を教えてください。
回答
原因
該当の事象は、DB インスタンス内のログファイル保存量が、ログ専用ストレージ容量上限の 15% を超過することで発生します。
Aurora MySQL ではほとんどの DB インスタンスクラスにおいて、エラーログ・一般ログ・スロークエリログ・監査ログに専用のストレージを使用します。[1]
このログ専用ストレージは、CloudWatch の FreeLocalStorage メトリクスで監視される一時ストレージ領域とは独立した領域です。
例: db.r8g.xlarge インスタンスの場合
DB インスタンスクラス 使用可能な一時ストレージ/ローカルストレージの最大量 (GiB) ログファイルに使用可能な追加のストレージの最大量 (GiB) db.r8g.xlarge 80 60
そして Aurora MySQL では、ログファイル保存量がログ専用ストレージ容量上限の 15% に達すると、自動的にログを削除(ローテーション)する仕組みがあります。[2]
※log_output パラメータが FILE に設定されている場合、一般ログ・スロークエリログは自動ローテーションの対象外となります。
Aurora MySQL エラーログファイルのサイズは、DB インスタンスのローカルストレージの 15 パーセント以下に制約されます。このしきい値を維持するために、ログは 1 時間ごとに自動的にローテーションされます。Aurora MySQL は 30 日後、またはディスク領域の 15 % が使用されると、ログを削除します。古いログファイルを削除した後、ログファイルの合計サイズがしきい値を超えている場合、ログファイルのサイズがしきい値以下になるまで、最も古いログファイルから順に削除されます。
Aurora MySQL は、24 時間後、またはストレージの 15% が消費されると、監査、一般、および低速クエリログを削除します。
FILEログ記録が有効になっている場合、一般ログとスロークエリログファイルの検査が 1 時間ごとに実行され、作成後 24 時間を超えた古いログファイルは削除されます。場合によっては、削除後の残りのログファイルの合計サイズが、DB インスタンスのローカル領域のしきい値である 15 % を超えることがあります。この場合、ログファイルのサイズがしきい値以下になるまで、最も古いログファイルから順に削除されます。
そのため、CloudWatch Logs へのエクスポートが完了する前であっても、ストレージ確保のためにログファイルが自動的に削除されることがあります。
対処方法
ログの生成量を抑制し、ローテーションのしきい値(ログ専用ストレージ容量上限の 15%)を超えないように設定することをご検討ください。
- 対応例
なお、本ブログ執筆時点では、ログ専用ストレージ容量の使用状況を直接確認できる CloudWatch メトリクスは AWS で提供されていません。
そのため、ログ専用ストレージ容量の使用状況を確認するには、AWS CLI や SDK を使用して DescribeDBLogFiles API を定期的に実行し、DB インスタンス内の全ログファイルのサイズを集計し監視する仕組みの実装をご検討ください。[5]







