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분 단위로 세분화하여 검토하고 합계 통계를 사용하여 연결 사용 패턴에 대한 자세한 내용을 확인하는 것이 모범 사례입니다.
RDS Proxy 로그 이벤트 검토
RDS Proxy를 수정하여 향상된 로깅을 활성화하면 열려 있거나 닫혀 있는 연결과 같은 고급 세부 정보를 얻을 수 있습니다. 고정 및 차용과 같은 내부 작업의 세부 정보도 얻을 수 있습니다.
참고: 향상된 로깅은 24시간이 지나면 자동으로 비활성화됩니다.
RDS Proxy 로그 이벤트를 검토하려면 다음 단계를 완료하십시오.
- CloudWatch 콘솔을 엽니다.
- 탐색 창에서 로그를 선택하고 로그 그룹을 선택합니다.
- 프록시 **/aws/rds/proxy/**의 로그 그룹을 선택합니다.
- 로그 스트림 탭에서 로그 스트림을 선택하여 로그 이벤트를 확인합니다.
CloudWatch Logs Insights 쿼리를 실행하여 이상 징후 탐지
CloudWatch Logs Insights의 쿼리 편집기에 액세스하려면 다음 단계를 완료하십시오.
- CloudWatch 콘솔을 엽니다.
- 탐색 창에서Logs(로그)를 선택하고 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 Command Line Interface(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 지표 모니터링