Amazon Relational Database Service (Amazon RDS) Proxy の接続プールをモニタリングし、データベース接続を最適化したいと考えています。
解決策
RDS Proxy とターゲット RDS データベースのメトリクスを監視する
次の手順を実行します。
- Amazon CloudWatch コンソールを開きます。
- ナビゲーションペインで [メトリクス] を選択してから、[すべてのメトリクス] を選択します。
- [参照] タブで、[RDS] を選択してから、[プロキシごとのメトリクス] を選択します。
- 以下のメトリクスを検索します。
ClientConnections: アプリケーションからの受信接続数。
MaxDatabaseConnectionsAllowed: RDS Proxy が許可するデータベース接続の最大数。
DatabaseConnections: RDS Proxy がターゲットデータベースに対して確立している現在の接続数。
- [参照] タブで、[RDS] を選択してから、[DBInstanceIdentifier] を選択します。
- DatabaseConnections メトリクスを検索して、RDS Proxy がターゲットデータベースに対して確立している接続と、ターゲットデータベースへの他のすべての接続の合計数を取得します。
ベストプラクティスは、これらのメトリクスを 1 分単位の粒度で確認し、Sum 統計を使用して接続の使用パターンの詳細を把握することです。
RDS Proxy ログイベントを確認する
接続の開始や切断などの詳細情報を取得するには、RDS Proxy を変更して拡張ログ記録を有効にします。固定や借用などの内部操作の詳細も確認できます。
注: 拡張ログ記録は 24 時間後に自動的にオフになります。
RDS Proxy ログイベントを確認するには、次の手順を実行します。
- CloudWatch コンソールを開きます。
- ナビゲーションペインで [ログ] を選択し、次に [ロググループ] を選択します。
- プロキシ /aws/rds/proxy/ のロググループを選択します。
- [ログストリーム] タブで、ログイベントを表示するログストリームを選択します。
CloudWatch Logs Insights のクエリを実行して異常を検出する
CloudWatch Logs Insights のクエリエディタにアクセスするには、次の手順を実行します。
- CloudWatch コンソールを開きます。
- ナビゲーションペインで [ログ] を選択し、[Logs Insights] を選択します。
クエリエディタを使用して、次のクエリを実行します。各クエリで、prx-000##### をプロキシ ID に置き換えてください。
エラーまたは警告を取得するには、次のクエリを実行します。
fields @timestamp, @message
| sort @timestamp asc
| filter @logStream like 'prx-000#####'
| filter @message like / ERROR: / or @message like / WARN: /
クライアント接続が切断された理由を特定するには、次のクエリを実行します。
fields @message
| sort @timestamp asc
| filter @logStream like 'prx-000#####'
| filter @message like /The client connection closed/ and @message like /CUSTOMER/
| parse 'Reason: *' as reason
| stats count() as reasonCount by reason
| sort by reasonCount desc
| limit 20
データベース接続が切断された理由を特定するには、次のクエリを実行します。
fields @message
| sort @timestamp asc
| filter @logStream like 'prx-000xxxxx'
| filter @message like /The database connection closed/ and @message like /CUSTOMER/
| parse 'Reason: *' as reason
| stats count() as reasonCount by reason
| sort by reasonCount desc
| limit 20
RDS Proxy の接続設定を変更する
注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI のエラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。
MaxConnectionsPercent
データベースが最大接続設定に達すると、次のエラーメッセージが表示されます。
"The database connection closed.Reason: The pool reached the maximum connection setting, and a connection with different properties was required."
この問題を解決するには、DatabaseConnections および MaxDatabaseConnectionsAllowed CloudWatch メトリクスを監視してください。DatabaseConnections が MaxDatabaseConnectionsAllowed に達している場合は、受信トラフィックを制限してください。または、modify-db-proxy-target-group AWS CLI コマンドか ModifyDBProxyTargetGroup API オペレーションを実行して、MaxConnectionsPercent 設定を引き上げます。MaxConnectionsPercent は、最近監視された最大使用率を少なくとも 30% 上回る値に設定してください。
MaxIdleConnectionsPercent
プール内のアイドル接続が多すぎる場合、次のメッセージが表示されます。
"The database connection closed.Reason: There were too many idle connections in the connection pool.A new slot in the connection pool is now available."
この問題を解決するには、ClientConnections および DatabaseConnections CloudWatch メトリクスを監視してください。ClientConnections が DatabaseConnections を継続的に下回っている場合は、ターゲットデータベースへのアイドル接続が存在します。デフォルトでは、MaxIdleConnectionsPercent の設定は MaxConnectionsPercent の値の 50% です。MaxIdleConnectionsPercent を変更するには、modify-db-proxy-target-group AWS CLI コマンドまたは ModifyDBProxyTargetGroup API オペレーションを実行します。アイドル状態のデータベース接続は、高い割合で開いたままに維持してください。ワークロードが安定している場合は、アイドル状態のリソース使用を避けるため、より低い値を使用してください。
IdleClientTimeout
データベースがクライアント接続のアイドルタイムアウトを超えると、次のメッセージが表示されます。
"The client connection closed.Reason: The idle timeout was exceeded."
アイドル接続を削除するには、IdleClientTimeout を小さくします。ワークロードがプロキシとの接続を頻繁に確立する場合は、接続を確立し直す必要がないように IdleClientTimeout を大きくしてください。IdleClientTimeout を変更するには、modify-db-proxy AWS CLI コマンドまたは ModifyDBProxy API オペレーションを実行します。
ConnectionBorrowTimeout
タイムアウトエラーが発生した場合、RDS Proxy はデータベース接続を確立できません。
ConnectionBorrowTimeout 設定を接続タイムアウト値よりも小さい値に設定するには、modify-db-proxy-target-group AWS CLI コマンドまたは ModifyDBProxyTargetGroup API オペレーションを実行します。
開いている接続を手動で閉じる
データベース接続が 24 時間以上アイドル状態の場合、次のエラーメッセージが表示されます。
"The database connection closed.Reason: The idle connection exceeded the maximum connection duration."
RDS Proxy では、アイドル状態のデータベース接続の最大有効期間を変更することはできません。代わりに、アプリケーションで再利用する必要のない接続を手動で閉じることがベストプラクティスです。
関連情報
RDS Proxy の概念と用語
Amazon CloudWatch を使用した RDS Proxy メトリクスのモニタリング