Datastore 모드의 Firestore에서 성능 모니터링 이해

Cloud Monitoring은 Google Cloud 제품에서 측정항목, 이벤트, 메타데이터를 수집합니다. Cloud Monitoring을 사용하면 커스텀 대시보드와 사용량 알림을 설정할 수도 있습니다.

이 문서에서는 측정항목 사용, 커스텀 측정항목 대시보드에 대해 알아보고 알림을 설정하는 방법을 안내합니다.

모니터링 리소스

Cloud Monitoring의 모니터링 리소스는 가상 머신, 데이터베이스 또는 애플리케이션과 같은 논리적 또는 물리적 항목을 나타냅니다. 모니터링 리소스에는 대시보드를 통해 탐색, 보고하거나 알림을 만드는 데 사용할 수 있는 고유한 측정항목 집합이 포함되어 있습니다. 또한 각 리소스에는 리소스에 대한 추가 정보가 포함된 키-값 쌍인 리소스 라벨 집합이 있습니다. 리소스와 연결된 모든 측정항목에 리소스 라벨을 사용할 수 있습니다.

Cloud Monitoring API를 사용하면 Datastore 모드의 Firestore 성능이 다음 리소스로 모니터링됩니다.

리소스 Description(설명) 지원되는 데이터베이스 모드
firestore.googleapis.com/Database(권장) project, location*, database_id에 대한 분석을 제공하는 모니터링 리소스 유형입니다 . 특정 이름 없이 생성된 데이터베이스의 경우 database_id 라벨은 (default)가 됩니다. 두 모드에서 모두 지원되는 모든 측정항목(Datastore 모드의 Firestore에서 지원되지 않는 다음 측정항목 제외)
  • document/delete_ops_count
  • document/read_ops_count
  • document/write_ops_count
datastore_request Datastore 프로젝트의 모니터링 리소스 유형이며 데이터베이스에 대한 분석을 제공하지 않습니다.

측정항목

Firestore는 Firestore Native와 Datastore 모드의 Firestore 두 가지 모드로 제공됩니다. 이 두 모드 간의 기능 비교는 데이터베이스 모드 선택을 참조하세요.

Datastore 모드의 Firestore 전체 측정항목 목록은 Datastore 모드의 Firestore 측정항목을 참조하세요.

서비스 런타임 측정항목

serviceruntime 측정항목은 프로젝트 트래픽에 대한 대략적인 개요를 제공합니다. 이러한 측정항목은 대부분의 Google Cloud API에서 사용할 수 있습니다. consumed_api 모니터링 리소스 유형에는 이러한 일반적인 측정항목이 포함됩니다. 이러한 측정항목은 30분마다 샘플링되므로 데이터가 평활화됩니다.

serviceruntime 측정항목의 중요한 리소스 라벨은 method입니다. 이 라벨은 호출된 기본 RPC 메서드를 나타냅니다. 호출하는 SDK 메서드의 이름은 기본 RPC 메서드와 동일하지 않을 수 있습니다. 이는 SDK가 높은 수준의 API 추상화를 제공하기 때문입니다. 하지만 애플리케이션이 Firestore와 상호작용하는 방식을 이해하려면 RPC 메서드의 이름을 기반으로 측정항목을 이해하는 것이 중요합니다.

특정 SDK 메서드의 기본 RPC 메서드에 대해 알아야 하는 경우 API 문서를 참조하세요.

api/request_count

이 측정항목은 프로토콜(http, gRPC 등의 요청 프로토콜), 응답 코드(HTTP 응답 코드), response_code_class(2xx, 4xx 등 응답 코드 클래스) 전반에서 완료된 요청 수 및 grpc_status_code(숫자 gRPC 응답 코드)를 제공합니다. 이 측정항목을 사용하여 전체 API 요청을 관찰하고 오류율을 계산합니다.

2xx 코드를 반환하는 api/request_count 측정항목
그림 1. api/request_count 측정항목(확대하려면 클릭)

그림 1에서는 서비스와 메서드로 그룹화된 2xx 코드를 반환하는 요청을 볼 수 있습니다. 2xx 코드는 요청이 성공했음을 나타내는 HTTP 상태 코드입니다.

2xx 코드를 반환하는 api/request_count 측정항목
그림 2. 2xx 코드를 반환하는 api/request_count 측정항목(확대하려면 클릭).

그림 2에서는 response_code별로 그룹화된 커밋을 확인할 수 있습니다. 이 예시에서는 데이터베이스가 정상임을 나타내는 HTTP 200 응답만 표시됩니다.

데이터베이스를 모니터링하려면 다음 서비스 런타임 측정항목을 사용합니다.

datastore_request 리소스 유형의 api/request_count

api/request_count 측정항목은 api_methodresponse_code 분류가 있는 datastore_request 리소스 유형에서도 사용할 수 있습니다. 대신 이 측정항목을 사용하면 급증을 포착하는 데 도움이 되는 더 세부적인 샘플링 기간을 활용할 수 있습니다.

datastore_request 리소스 아래의 api/request_count 측정항목
그림 3. datastore_request 리소스 아래의 api/request_count 측정항목(확대하려면 클릭).
api/request_latencies

api/request_latencies 측정항목은 완료된 모든 요청의 지연 시간 분포를 제공합니다.

Firestore는 Firestore 서비스 구성요소의 측정항목을 기록합니다. 지연 시간 측정항목에는 Firestore가 요청을 받는 시점부터 스토리지 레이어와의 상호작용을 포함하여 Firestore가 응답 전송을 완료하는 시점까지의 시간이 포함됩니다. 따라서 클라이언트와 Firestore 서비스 간의 왕복 지연 시간(rtt)은 이러한 측정항목에 포함되지 않습니다.

지연 시간 분포를 계산하는 api/request_latencies
그림 4. 지연 시간 분포를 계산하는 api/request_latencies
api/request_sizes 및 api/response_sizes

api/request_sizesapi/response_sizes 측정항목은 각각 페이로드 크기(바이트)에 대한 유용한 정보를 제공합니다. 이는 대량의 데이터를 전송하는 쓰기 워크로드를 이해하거나, 범위가 너무 넓어 대규모 페이로드를 반환하는 쿼리를 이해하는 데 유용할 수 있습니다.

api/request_sizes 및 api/response_sizes 측정항목
그림 5. api/request_sizes 및 api/response_sizes 측정항목(확대하려면 클릭)

그림 5에서는 RunQuery 메서드의 응답 크기에 대한 히트맵을 볼 수 있습니다. 크기가 고정적이고 50바이트 중앙값이며 전반적으로 10바이트에서 100바이트 사이인 것을 알 수 있습니다. 페이로드 크기는 항상 압축되지 않은 바이트 단위로 측정되며 전송 제어 오버헤드는 제외됩니다.

항목 작업 측정항목

이러한 측정항목은 읽기(조회 및 쿼리)와 Firestore 데이터베이스에 대한 쓰기의 페이로드 크기(바이트) 분포를 제공합니다. 값은 페이로드의 총크기를 나타냅니다. 예를 들어 쿼리가 반환한 결과입니다. 이러한 측정항목은 api/request_sizesapi/response_sizes 측정항목과 비슷하지만, 항목 작업 측정항목이 더 세분화된 샘플링을 제공하지만 덜 세분화된 분류를 제공한다는 주요 차이점이 있습니다.

예를 들어 항목 작업 측정항목은 datastore_request 모니터링 리소스를 사용하므로 서비스나 메서드 분석이 없습니다.

  • entity/read_sizes: 읽기 항목의 크기 분포를 유형별로 그룹화한 값입니다.
  • entity/write_sizes: 작업으로 그룹화된 작성된 항목의 크기 분포입니다.

색인 측정항목

색인 팬아웃 비율을 이해하기 위해 색인 쓰기 속도를 document/write_ops_count 측정항목과 대조할 수 있습니다.

  • index/write_count: 색인 쓰기 수입니다.
문서 쓰기 속도와 대조되는 색인 쓰기 속도
그림 7. 문서 쓰기 속도와 대조되는 색인 쓰기 속도(확대하려면 클릭)

그림 7에서는 색인 쓰기 속도와 문서 쓰기 속도의 차이를 확인할 수 있습니다. 이 예시에는 모든 문서 쓰기에 약 6개의 색인 쓰기가 있으며, 이는 비교적 낮은 색인 팬아웃 속도입니다.

TTL 측정항목

TTL 측정항목은 Firestore Native와 Datastore 모드의 Firestore 데이터베이스 모두에서 사용할 수 있습니다. 이러한 측정항목을 사용하여 TTL 정책의 효과를 모니터링합니다.

  • entity/ttl_deletion_count: TTL 서비스에 의해 삭제된 총 항목 수입니다.
  • entity/ttl_expiration_to_deletion_delays: TTL이 있는 항목이 만료된 시점과 실제로 삭제된 시점 사이에 경과한 시간입니다.

    TTL 삭제 지연이 24시간 이상 걸리는 경우 지원팀에 문의하세요.

다음 단계