Azure Cosmos DB 컨테이너 또는 계정에 대해 정규화된 RU/s를 모니터링하는 방법

적용 대상: NoSQL MongoDB Cassandra Gremlin 테이블

Azure Cosmos DB용 Azure Monitor는 계정을 모니터링하고 대시보드를 만들 수 있는 메트릭 보기를 제공합니다. Azure Cosmos DB 메트릭은 기본적으로 수집되며, 아무것도 명시적으로 활성화하거나 구성할 필요가 없습니다.

메트릭 정의

정규화된 RU 사용량 메트릭은 데이터베이스 또는 컨테이너에 프로비저닝된 처리량의 사용률을 측정하는 데 사용되는 0%~100% 사이의 메트릭입니다. 이 메트릭은 1분 간격으로 내보내지며 시간 간격의 모든 파티션 키 범위에서 최대 RU/s 사용률로 정의됩니다. 각 파티션 키 범위는 하나의 물리적 파티션에 매핑되며 가능한 해시 값 범위의 데이터를 보유하도록 할당됩니다. 일반적으로 정규화된 RU 비율이 높을수록 프로비저닝된 처리량을 많이 활용한 것입니다. 이 메트릭을 사용하여 데이터베이스 또는 컨테이너에서 개별 파티션 키 범위가 사용된 비율을 볼 수도 있습니다.

예를 들어 컨테이너의 자동 크기 조정 최대 처리량을 20,000RU/s(2000~20,000RU/s 사이에서 스케일링)로 설정했고 컨테이너에 두 개의 파티션 키 범위(실제 파티션) P1P2가 있다고 가정하겠습니다. Azure Cosmos DB는 프로비저닝된 처리량을 모든 파티션 키 범위에 동일하게 분산하므로 P1P2는 각각 1000~10,000RU/s 사이에서 스케일링됩니다. 1분 간격으로 특정 초에 P1에서 요청 단위 6,000개를 사용했고 P2에서 요청 단위 8000개를 사용했다고 가정하겠습니다. P1의 정규화된 RU 사용량은 60%이고 P2는 80%입니다. 전체 컨테이너의 전체적인 정규화된 RU 사용량은 MAX(60%, 80%) = 80%입니다.

작업 유형과 함께 초당 간격으로 요청 단위 사용량을 보려는 경우 옵트인 기능 진단 로그를 사용하고 PartitionKeyRUConsumption 테이블을 쿼리하면 됩니다. 애플리케이션이 Azure Cosmos DB 리소스에서 수행하는 작업 및 상태 코드에 대한 대략적인 개요를 보려면 기본 제공 Azure Monitor 총 요청 수(API for NoSQL), Mongo 요청 수, Gremlin 요청 수 또는 Cassandra 요청 수 메트릭을 사용하면 됩니다. 나중에 이러한 요청을 429 상태 코드로 필터링하고 작업 유형별로 분할할 수 있습니다.

정규화된 RU/s가 높은 경우 필요한 항목 및 수행할 작업

정규화된 RU/s 사용률이 지정된 파티션 키 범위에 대해 100%에 도달하고 클라이언트가 해당 시간 창에서 특정 파티션 키 범위에 대해 1초 동안 계속 요청을 수행하는 경우에는 속도 제한 오류(429)를 수신합니다.

그렇다고 해서 반드시 리소스에 문제가 있는 것은 아닙니다. 기본적으로 Azure Cosmos DB 클라이언트 SDK 및 데이터 가져오기 도구(예: Azure Data Factory, 대량 실행기 라이브러리)는 429에서 자동으로 요청을 다시 시도합니다. 일반적으로 9회까지 다시 시도합니다. 따라서 메트릭에 429가 표시되더라도 이 오류는 애플리케이션에 반환되지 않았을 수 있습니다.

일반적으로 프로덕션 워크로드의 경우 요청의 1~5%가 429로 표시되고 엔드투엔드 대기 시간이 허용되면 이는 RU/초가 완전히 활용되고 있다는 정상 신호입니다. 이 경우 정규화된 RU 사용량 메트릭이 100%에 도달한다는 것은 특정 초에 하나 이상의 파티션 키 범위가 프로비저닝된 모든 처리량을 사용했다는 뜻입니다. 429의 전체 속도가 여전히 낮기 때문에 허용됩니다. 추가적인 조치가 필요하지 않습니다.

데이터베이스 또는 컨테이너에 대한 요청에서 429 오류가 발생한 백분율을 확인하려면 Azure Cosmos DB 계정 블레이드에서 인사이트>요청 수>상태 코드별 총 요청 수로 이동합니다. 특정 데이터베이스 및 컨테이너로 필터링합니다. API for Gremlin의 경우 Gremlin 요청 수 메트릭을 사용합니다. Total Requests by Status Code chart that shows number of 429 and 2xx requests.

정규화된 RU 사용량 메트릭이 여러 파티션 키 범위에서 지속적으로 100%이고 429 비율이 5%를 넘는 경우 처리량을 늘리는 것이 좋습니다. Azure Monitor 메트릭 및 Azure Monitor 진단 로그를 사용하여 부하가 높은 작업이 무엇인지, 이 작업의 최대 사용량은 얼마인지 확인할 수 있습니다. 프로비저닝된 처리량(RU/s) 스케일링 모범 사례를 따르세요.

정규화된 RU가 100%에 도달했다고 해서 항상 429 속도 제한 오류가 발생하는 것은 아닙니다. 정규화된 RU가 모든 파티션 키 범위의 최대 사용량을 나타내는 단일 값이기 때문입니다. 한 파티션 키 범위가 사용 중이면 다른 파티션 키 범위에서 요청을 문제 없이 처리할 수 있습니다. 예를 들어 파티션 키 범위의 모든 RU/s를 소비하는 저장 프로시저와 같은 단일 작업을 수행하면 정규화된 RU/s 사용량 메트릭에 짧은 급등이 발생합니다. 이러한 경우 전체 요청 속도가 느리거나 다른 파티션 키 범위의 다른 파티션에 대한 요청을 수행하는 경우 즉각적인 트래픽률 제한 오류가 발생하지 않습니다.

429 속도 제한 예외를 해석하고 디버그하는 방법에 대해 자세히 알아보세요.

핫 파티션을 모니터링하는 방법

정규화된 RU 사용량 메트릭을 사용하여 워크로드에 핫 파티션이 있는지 모니터링할 수 있습니다. 핫 파티션은 더 높은 요청 볼륨으로 인해 하나 이상의 논리 파티션 키가 총 RU/초의 너무 작은 크기를 사용하는 경우에 발생합니다. 이는 요청을 균등하게 분산하지 않는 파티션 키 디자인으로 인해 발생할 수 있습니다. 그 결과 많은 요청이 "핫"이 되는 논리적 파티션(파티션 키 범위를 의미)의 작은 하위 집합으로 전달됩니다. 논리적 파티션에 대한 모든 데이터는 하나의 파티션 키 범위에 있고 총 RU/s는 모든 파티션 키 범위에 고르게 분산되기 때문에 핫 파티션이 429 오류를 발생시키고 처리량을 비효율적으로 사용할 수 있습니다.

핫 파티션이 있는지 확인하는 방법

핫 파티션이 있는지 확인하려면 인사이트>처리량>PartitionKeyRangeID별 정규화된 RU 사용량(%)으로 이동합니다. 특정 데이터베이스 및 컨테이너로 필터링합니다.

각 PartitionKeyRangeId는 하나의 물리적 파티션에 매핑됩니다. 한 PartitionKeyRangeId가 다른 항목보다 정규화된 RU 사용량이 훨씬 더 높은 경우(예: 한 항목은 일관되게 100%이지만 다른 항목은 30% 이하인 경우) 핫 파티션의 표시일 수 있습니다.

Normalized RU Consumption by PartitionKeyRangeId chart with a hot partition.

RU/s를 가장 많이 사용하는 논리 파티션과 권장 솔루션을 확인하려면 Azure Cosmos DB 요청 빈도 너무 높음(429) 예외 진단 및 문제 해결 문서를 참조하세요.

정규화된 RU 사용량 및 자동 크기 조정

정규화된 RU 사용량 메트릭은 1개 이상의 파티션 키 범위가 시간 간격의 특정 초에 할당된 RU/s를 모두 사용하는 경우 100%로 표시됩니다. 자주 묻는 질문 중 하나는 정규화된 RU 사용량이 100%지만 Azure Cosmos DB가 RU/s를 최대 처리량으로 자동 크기 조정하지 않은 이유입니다.

참고 항목

아래는 현재 구현된 자동 크기 조정에 대해 설명하는 정보이며 향후 변경될 수 있습니다.

자동 크기 조정을 사용하는 경우 Azure Cosmos DB는 정규화된 RU 사용량이 5초 간격의 지속적이고 연속적인 기간 동안 100%인 경우에만 RU/초를 최대 처리량으로 스케일링합니다. 이는 단 한 번의 일시적인 급증이 불필요한 크기 조정 및 더 높은 비용으로 이어지지 않도록 보장하므로 크기 조정 논리가 사용자에게 비용 친화적인지 확인하기 위해 수행됩니다. 일시적인 급증이 있는 경우 시스템은 일반적으로 이전에 RU/초로 스케일링된 값보다 높지만 최대 RU/초보다 낮은 값으로 스케일 업됩니다.

예를 들어 자동 크기 조정 최대 처리량이 20,000RU/s(2000~20,000RU/s 사이에서 스케일링)이고 파티션 키 범위 2개인 컨테이너가 있다고 가정하겠습니다. 각 파티션 키 범위는 1000~10,000RU/s 사이에서 스케일링할 수 있습니다. 자동 크기 조정은 필요한 모든 리소스를 미리 프로비저닝하므로 언제든지 최대 20,000RU/s를 사용할 수 있습니다. 트래픽이 간헐적으로 급증하며, 이때 1초 동안 파티션 키 범위 중 하나의 사용량이 10,000RU/s라고 가정하겠습니다. 이후 몇 초 동안 사용량이 1000RU/s로 감소합니다. 정규화된 RU 사용량 메트릭은 모든 파티션에서 기간 중 가장 높은 사용률을 표시하므로 100%가 표시됩니다. 그러나 사용률이 100%인 시간은 고작 1초에 불과하기 때문에 최댓값으로 자동 크기 조정되지 않습니다.

결과적으로 최댓값으로 자동 크기 조정되지 않았음에도 불구하고 사용 가능한 총 RU/s를 계속 사용할 수 있었습니다. RU/s 사용량을 확인하려면 옵트인 기능인 진단 로그를 사용하여 모든 파티션 키 범위에서 초당 전체 RU/s 사용량을 쿼리할 수 있습니다.

CDBPartitionKeyRUConsumption
| where TimeGenerated >= (todatetime('2022-01-28T20:35:00Z')) and TimeGenerated <= todatetime('2022-01-28T20:40:00Z')
| where DatabaseName == "MyDatabase" and CollectionName == "MyContainer"
| summarize sum(RequestCharge) by bin(TimeGenerated, 1sec), PartitionKeyRangeId
| render timechart

일반적으로 자동 크기 조정을 사용하는 프로덕션 워크로드의 경우 요청 중 1~5%에서 429 오류가 발생하고 엔드투엔드 대기 시간이 허용되는 수준이면 RU/s가 완전히 활용되고 있다는 정상적인 신호입니다. 정규화된 RU 사용량이 가끔 100%에 도달하고 자동 크기 조정이 최대 RU/s로 스케일 업하지 않더라도 전체적인 429 비율이 낮기 때문에 괜찮습니다. 사용자가 조치할 필요는 없습니다.

자동 크기 조정을 사용 중이고, 정규화된 RU 사용량이 지속적으로 100%이고, 지속적으로 최대 RU/s로 스케일링된다면 수동 처리량을 사용하는 것이 더 비용 효율적일 수 있다는 신호입니다. 자동 크기 조정 또는 수동 처리량이 워크로드에 가장 적합한 방법인지 확인하려면 표준(수동) 및 자동 크기 조정 프로비저닝된 처리량 중에서 선택하는 방법을 참조하세요. 또한 Azure Cosmos DB는 워크로드 패턴에 따라 Azure Advisor 권장 사항을 보내서 수동 또는 자동 스케일링 처리량을 권장합니다.

정규화된 요청 단위 소비 메트릭 보기

  1. Azure Portal에 로그인합니다.

  2. 왼쪽 탐색 모음에서 모니터를 선택하고 메트릭을 선택합니다.

    Metrics pane in Azure Monitor

  3. 메트릭 창 >리소스 선택>에서 필요한 구독리소스 그룹을 선택합니다. 리소스 유형으로 Azure Cosmos DB 계정을 선택하고, 기존 Azure Cosmos DB 계정 중 하나를 선택한 후 적용을 선택합니다.

    Select the account scope to view metrics

  4. 다음에는 사용 가능한 메트릭 목록에서 메트릭을 선택할 수 있습니다. 요청 단위, 스토리지, 대기 시간, 가용성, Cassandra 등과 관련된 메트릭을 선택할 수 있습니다. 이 목록에서 사용 가능한 모든 메트릭에 대해 자세히 알아 보려면 범주별 메트릭 문서를 참조하세요. 이 예에서는 정규화된 RU 소비 메트릭과 Max를 집계 값으로 선택하겠습니다.

    이러한 세부 정보 외에 메트릭의 시간 범위시간 단위를 선택할 수도 있습니다. 최대는 지난 30일 동안의 메트릭을 볼 수 있습니다. 필터를 적용하면 필터에 기반하여 차트가 표시됩니다.

    Choose a metric from the Azure portal

정규화된 RU 사용량 메트릭에 대한 필터

특정 CollectionName, DatabaseName, PartitionKeyRangeID, Region별로 표시되는 메트릭 및 차트를 필터링할 수도 있습니다. 메트릭을 필터링하려면 필터 추가를 선택하고 필요한 속성(예: CollectionName 및 관심 있는 값)을 선택합니다. 그러면 선택한 기간 동안 컨테이너의 정규화된 RU 소비량 메트릭이 그래프에 표시됩니다.

분할 적용 옵션을 사용하여 메트릭을 그룹화할 수 있습니다. 공유 처리량 데이터베이스의 경우 정규화된 RU 메트릭은 데이터를 데이터베이스 세분성으로만 표시하고 컬렉션당 데이터는 표시하지 않습니다. 따라서 공유 처리량 데이터베이스의 경우 컬렉션 이름으로 분할을 적용하면 데이터가 표시되지 않습니다.

각 컨테이너에 대한 정규화된 요청 단위 소비 메트릭은 다음 이미지와 같이 표시됩니다.

Apply filters to normalized request unit consumption metric

다음 단계