데이터베이스 성능 모니터링

Firebase 실시간 데이터베이스의 성능을 모니터링하고 앱의 잠재적 문제를 발견하는 몇 가지 방법을 소개합니다. 앱의 수신 및 발신 대역폭과 부하를 살펴보면 청구 비용을 예상할 수 있습니다. 또한 데이터베이스 작업을 명확하게 파악할 수 있어 이상이 발견될 경우 문제 해결 도구로도 유용합니다.

이 페이지에서는 실시간 데이터베이스 성능 모니터링을 설명합니다. 사용량 모니터링은 데이터베이스 사용량 모니터링을 참조하세요.

실시간 데이터베이스 모니터링 도구 사용

원하는 상세 수준에 따라 몇몇 도구를 통해 실시간 데이터베이스 성능에 대한 데이터를 수집할 수 있습니다.

실시간 데이터베이스 프로파일러 도구 사용

실시간 데이터베이스 프로파일러 도구는 데이터베이스의 읽기/쓰기 작업에 대한 실시간 개요를 제공합니다. 보고서에는 색인화되지 않은 쿼리 외에도 각 작업의 속도 및 페이로드 크기에 대한 정보가 포함됩니다. 하지만 연결 오버헤드에 대한 정보 내역이나 통계는 포함되지 않으므로 청구 비용을 예측하는 데 사용하면 안 됩니다.

프로파일러 도구 사용에 대한 자세한 내용은 데이터베이스 프로파일링을 참조하세요.

Firebase Console 사용

Firebase Console사용량 탭에서는 데이터베이스 동시 연결 수, 저장 중인 데이터 양, 발신 대역폭(프로토콜 및 암호화 오버헤드 포함), 1분 간격으로 측정한 데이터베이스 부하 등에 대한 정보를 제공합니다. 사용량 탭에서 데이터베이스의 전반적인 성능에 대한 개요를 보다 정확하게 파악할 수 있지만 이 정보만으로는 잠재적 성능 문제를 상세히 살펴보기에 부족할 수 있습니다.

Cloud Monitoring 사용

Google Cloud의 Cloud Monitoring을 사용하면 측정항목 탐색기를 통해 개별 성능 측정항목을 보거나 시간 경과에 따라 다양한 성능 측정항목의 조합을 표시하는 차트로 여러 대시보드를 만들 수 있습니다. 실시간 데이터베이스를 Cloud Monitoring과 통합하면 가장 상세한 정보를 얻을 수 있습니다.

Cloud Monitoring 설정 단계는 데이터베이스 사용량 모니터링에 설명되어 있습니다.

특정 Cloud Monitoring 측정항목을 사용해 성능 문제를 발견하는 방법은 다음 섹션을 참조하세요.

Cloud Monitoring에서 성능 모니터링

업타임 또는 지연 시간을 포함한 성능 문제가 발생하는 경우 Cloud Monitoring을 사용하여 다음 측정항목을 모니터링할 수 있습니다. 모든 측정항목 유형의 이름은 firebasedatabase.googleapis.com/으로 시작합니다.

측정항목 이름 설명
데이터베이스 부하

io/database_load. 이 측정항목을 사용하면 요청을 처리하는 데 사용할 수 있는 가용 데이터베이스 대역폭을 시간 경과에 따라 모니터링할 수 있습니다. 데이터베이스 부하가 총 가용 대역폭에 가까워지면 성능 문제가 발생할 수 있습니다. 또한 부하가 가장 많이 사용되는 작업 유형을 파악하고 그에 따라 문제를 해결할 수 있습니다. 1분 이상 걸리는 작업에서는 보고된 부하가 100%를 초과할 수 있습니다. 이는 작업이 완료된 후, 수 분 동안 사용된 총 대역폭이 분 단위 보고 간격으로 압축될 때 발생하는 현상입니다.

네트워크 초과 시 사용 중지

network/disabled_for_overages. 이 측정항목은 실시간 데이터베이스가 대역폭 또는 네트워크 한도를 초과했을 때 발생할 수 있는 중단을 나타냅니다.

저장용량 초과 시 사용 중지

storage/disabled_for_overages. 이 측정항목은 실시간 데이터베이스가 저장용량 한도를 초과했을 때 발생할 수 있는 모든 중단을 나타냅니다.

대시보드에서 측정항목을 차트로 결합하면 유용한 통계 및 개요를 얻을 수 있습니다. 예를 들어 다음과 같은 조합을 시도해 보세요.

  • 작업: io/database_load 측정항목을 사용하면 각 작업 유형에서 사용되는 총 데이터베이스 부하량을 확인할 수 있습니다. 다른 작업 유형 문제를 해결하려면 io/database_load를 유형별로 그룹화해야 합니다.
  • 저장용량: storage/limitstorage/total_bytes를 사용하면 실시간 데이터베이스 저장용량 한도와 관련된 스토리지 사용률을 모니터링할 수 있습니다. 또한 storage/disabled_for_overages를 추가해 저장용량 한도 초과로 인해 앱에 다운타임이 발생했는지도 확인할 수 있습니다.
  • SSL 오버헤드: network/https_requests_count를 사용하면 데이터베이스에서 수신한 SSL 연결 요청 수를 모니터링하고 reused_ssl_session 필터로 기존 SSL 세션 티켓이 재사용된 요청을 구분할 수 있습니다. 이를 network/sent_bytes_countnetwork/sent_payload_and_protocol_bytes_count와 비교 측정하여 앱에서 SSL 세션 티켓을 효율적으로 사용하는지 모니터링할 수 있습니다.

Cloud Monitoring을 통해 알림을 설정하고 실시간 데이터베이스 측정항목을 기반으로 알림을 받을 수도 있습니다. 예를 들어 io/database_load가 특정 기준에 도달하면 알림을 받도록 선택할 수 있습니다.

Cloud Monitoring을 통해 제공되는 실시간 데이터베이스 측정항목의 전체 목록을 참조하세요.

데이터베이스 부하 유형

io/database_load 측정항목은 또한 어떤 작업 유형으로 인해 부하가 발생했는지 라벨을 제공합니다. 다음은 측정 가능한 작업의 유형입니다.

  • admin: 규칙 설정 및 프로젝트 메타데이터 읽기와 같은 관리 작업입니다.
  • auth: 서비스 계정의 인증이나 단일 클라이언트에 대한 Firebase 인증을 검증합니다.
  • client_management: 동시 연결의 추가 및 삭제를 처리하며 여기에는 삭제 시 실행되는 연결 해제 작업이 포함됩니다.
  • get_shallow: shallow=true로 REST GET에서 데이터를 가져옵니다.
  • get: REST GET 작업을 처리합니다.
  • listen: 연결된 클라이언트에서 ononce 작업의 초기 데이터를 가져옵니다.
  • on_disconnect: 클라이언트의 연결 해제 작업에 등록합니다.
  • put: 클라이언트의 set 작업 또는 REST PUT 작업을 처리합니다.
  • transaction: 조건부 REST 요청이나 클라이언트의 transaction 작업에서 트랜잭션을 수행합니다.
  • update: update 작업 또는 REST PATCH 요청을 처리합니다.

Cloud Monitoring의 보안 규칙 모니터링

보안 규칙의 평가를 분석할 수도 있습니다. 모든 측정항목 유형의 이름은 firebasedatabase.googleapis.com/으로 시작합니다.

측정항목 이름 설명
규칙 평가 rules/evaluation_count. 쓰기 또는 읽기 요청에 대한 응답으로 수행된 실시간 데이터베이스 규칙의 평가 수입니다. 요청의 결과(ALLOW, DENY 또는 ERROR)를 기준으로 이 측정항목을 분류할 수 있습니다.

예를 들면 특정 평가 결과(ALLOW, DENY 또는 ERROR)를 필터링하는 등 필요에 따라 규칙 평가를 위해 Cloud Monitoring 차트를 맞춤설정합니다. 차트 설정 및 맞춤설정은 데이터베이스 사용량 모니터링에 설명되어 있습니다.

Cloud Monitoring을 통해 제공되는 실시간 데이터베이스 측정항목의 전체 목록을 참조하세요.