본문 바로가기
빅데이터,클라우드

Amazon RDS 모니터링, CloudWatch로 느린 쿼리 수집 튜닝

by 데이널 2024. 7. 30.

AWS의 MySQL database를 모니터링하기 위해서는 3 가지의 옵션을 활성화할 수 있습니다. 이는 모두 CloudWatch를 통해 관리할 수 있는데요. Enhanced Monitoring, Performance Insights, Slow Query Log 세 가지입니다.  

 

Amazon RDS Enhanced Monitoring 설정

Amazon RDS에서 제공하는 Enhanced Monitoring 기능을 활성화할 수 있습니다. 데이터베이스 인스턴스 정보를 실시간으로 수집하는 옵션입니다. 이는 CPU 사용량, 메모리 사용량, 디스크 I/O 등을 모니터링 할 수 있습니다. 


이를 수집하는 방법은 RDS는 AWS에서 관리하는 서버에 설치됩니다. 이를 흔히 serverless라고 하는데요. 아마도 그 서버의 cpu, 메모리, 디스크 사용에 대한 명령어를 통해 log를 수집하고 전송하는 방식일 것입니다. 


개인적인 경험으로 EKS 모니터링을 위해 프로메테우스(Prometheus)를 설치하고 구현해 본 경험 상으로 AWS에도 마찬가지 방법으로 판단됩니다. 

 

Performance Insights 사용

쿼리 성능을 시각적으로 분석할 수 있습니다. db에서 쿼리 실행 시간을 포함한 성능 지표를 보여줍니다. 단 실제 쿼리를 수집하지는 않습니다. 이 옵션을 켜면 performance_schema 관련 옵션이 모두 켜집니다. 모니터링을 위한 통계정보 수집이 on 된다는 의미입니다. 


performance_schema는 MySQL 5.5부터 InnoDB 플로그인으로 추가된 기능으로 쿼리 작업에 대한 이벤트를 수집합니다. AWS CloudWatch가 그 기능을 활용한다고 생각하시면 됩니다. 


실제 통계정보를 더 수집하기 때문에 database의 약간의 QPS의 하락할 수 있습니다. 이는 모든 데이터베이스가 동일하며 통계정보를 많이 수집할수록 느려지는 것은 당연합니다. performance_schema를 사용하기 때문에 약간의 QPS 하락은 있으나, Performance Insights는 그 정보를 전송해 그래프 그리는 기능이기 때문에 추가적은 부하는 미미합니다. 


위에서 제가 말한 내용에 대한 필드 테스트한 게시물이 있어 공유합니다. 아래 Performance Insights에 대한 게시물을 참고해 보세요. 

 

 

 

Performance Insight 써도 돼요? | 우아한형제들 기술블로그

안녕하세요. 저는 우아한형제들의 시스템신뢰성개발팀에서 DBA로 근무하고 있는 이재웅이라고 합니다. Performance Insight에 대해 개발팀에서도 궁금해하고 저도 궁금해서 해본 테스트 결과를 공유

techblog.woowahan.com

 

Enhanced Monitoring와 Performance Insights 설정방법

1. AWS Management Console에 로그인
2. 메뉴에서 RDS 서비스로 이동
3. 모니터링할 DB 인스턴스를 선택
4. “Modify”를 클릭하여 인스턴스 설정을 수정
5. “Enhanced Monitoring”과 “Performance Insights” 활성화
6. 변경사항 저장했으면 인스턴스 재부팅


Slow Query Log 활성화

database에서 오래된 쿼리를 수집하려면 Slow Query Log옵션을 이용해 로그에 기록할 수 있습니다. 그리고 이 로그 파일을 CloudWatch Logs로 전송하여 모니터링하는 방식입니다. 

이는 역시 MySQL의 수동으로 3가지 옵션을 활성화한 것과 같습니다. 아래 설정방법을 보시죠. 

Parameter Value Dynamic Type Permission Status
slow_query_log 1 Dynamic Boolean 수정 가능 Modified
slow_query_log_file /rdsdbdata/log/slowquery/mysql-slowquery.log Dynamic String 수정 불가 System default
long_query_time 10 Dynamic Float 수정 가능 Modified

 

1. Slow Query Log 설정 방법

  1. AWS RDS 콘솔로 이동
  2. Slow 쿼리를 수집한 DB 인스턴스 선택
  3. “Modify”를 클릭
  4. “Parameter Group” 섹션에서 사용중인 파라미터 그룹 선택
  5. 파라미터 그룹에서 아래 설정
    •  slow_query_log를 1로 설정
    •  slow_query_log_file 경로는 RDS의 경우 자체적으로 관리하는 위치에 떨어뜨리기 때문에 수정
    •  long_query_time 파라미터 2초 설정
  6. 변경사항 저장하고 인스턴스 재부팅
  7. 다시 AWS RDS 콘솔 이동 – 모니터링할 DB 인스턴스 선택
  8. “Modify”를 클릭하여 인스턴스 설정을 수정
  9. “Log exports” 섹션에서 “slow query log”를 선택
  10. 변경사항 저장하고 인스턴스 재부팅

 

2. CloudWatch 로그 확인 및 알람 설정

  1. CloudWatch 서비스 이동
  2. CloudWatch Log 콘솔에서 로그 그룹을 확인
  3. “Alarms”를 선택하고 “Create Alarm”을 클릭
  4. 모니터링 메트릭을 선택(예를 들어, Performance Insights에서 제공하는 메트릭 선택)
  5. 조건을 설정하고 알림 받은 방법 선택(Slack 등)
  6. 알람 생성하여 설정 완료

Slow Query CloudWatch 설정 아키텍처
Slow Query CloudWatch 설정 아키텍처

 

마무리 

위 3가지 방법을 통해 AWS의 MySQL 데이터베이스에 대해 오래 걸리는 쿼리를 효과적으로 모니터링할 수 있습니다. 만약, 프로젝트에서 성능 문제를 빠르게 감지하기를 원한다면 해당 아키텍처를 구현하길 권장합니다.