쿼리 로그

완료됨

Azure 리소스는 해당 리소스의 자세한 운영 데이터를 제공하는 Azure 진단 로그를 생성합니다. 진단 설정은 이러한 리소스 로그를 수집하는 데 사용됩니다.

활동 및 플랫폼 메트릭과 같은 일부 로그는 자동으로 수집되지만 리소스 로그를 수집하려면 진단 설정을 만들어야 합니다. 이러한 로그는 Azure Monitor 외부로 전달될 수 있습니다. Azure Cosmos DB 계정에서 진단 설정을 사용하도록 설정하면 Log Analytics 작업 영역, 이벤트 허브, 스토리지 계정에 전달할 수 있습니다.

Log Analytics 작업 영역에 데이터를 전달하면 Kusto 쿼리 언어(KQL)를 사용하여 쿼리할 수 있는 테이블에 로그를 기록합니다. 따라서 이러한 테이블에 저장된 진단 데이터를 사용하려면 Kusto 쿼리를 읽고 쓰는 방법에 대한 지식이 필요합니다. 이러한 테이블은 Azure Diagnostics라는 일반 레거시 테이블 또는 권장되는 리소스 관련 테이블일 수 있습니다.

Azure Cosmos DB 진단 설정 만들기

Azure Portal, REST API, PowerShell 또는 Azure CLI 등 진단 설정을 만드는 방법에는 여러 가지가 있습니다.

Azure Portal을 사용하여 진단 설정을 만들려면 Azure Cosmos DB 계정으로 이동하여 Monitoring 섹션에서 진단 설정을 선택합니다. 기존 진단 설정을 편집하거나 + 진단 설정 추가를 선택하고 수집하려는 로그와 이러한 로그를 전달할 대상을 선택합니다.

Diagram that shows the diagnostic settings options for Azure Cosmos DB.

NoSQL API 로그 테이블은 다음과 같습니다.

  • DataPlaneRequests - 이 테이블은 데이터 만들기, 업데이트, 삭제 또는 검색을 실행하는 작업에 대한 백엔드 요청을 로그합니다.
  • QueryRuntimeStatistics - 이 테이블은 NoSQL API 계정에 대한 쿼리 작업을 로그합니다.
  • PartitionKeyStatistics - 이 테이블은 예상 KB의 논리 파티션 키 통계를 로그합니다. 불균형 스토리지 문제를 해결할 때 유용합니다.
  • PartitionKeyRUConsumption - 이 테이블은 파티션 키의 매초 집계된 RU/s 사용을 로그합니다. 핫 파티션 문제를 해결할 때 유용합니다.
  • ControlPlaneRequests - 이 테이블은 복제 설정에서 지역 추가 또는 제거 등 Azure Cosmos DB 계정 컨트롤 데이터를 로그합니다.

진단 쿼리 관련 문제 해결

Azure Cosmos DB 진단 데이터는 Log Analytics로 전송될 때 AzureDiagnostics 테이블 또는 리소스 관련 테이블로 전송됩니다. 기본 모드는 리소스 관련 테이블로 데이터를 전송하는 것입니다. 따라서 진단 설정 옵션에서 선택된 각 로그에는 자체 테이블이 있습니다. 이 모드를 선택하면 진단 데이터를 보다 쉽게 사용하고, 사용되는 스키마를 더 쉽게 검색하고, 대기 시간 및 쿼리 시간의 성능을 향상시킬 수 있습니다.

AzureDiagnostics 쿼리

레거시 모드를 선택하면 진단 데이터가 AzureDiagnostics 테이블에 저장되므로 모든 kusto 쿼리가 이 테이블에 대해 실행됩니다. 여러 Azure 리소스가 이 테이블을 채울 수도 있으므로 Azure Cosmos DB 항목만 반환하도록 where 절에 ResourceProvider=="MICROSOFT.DOCUMENTDB" 필터를 포함합니다. 또한 진단 설정에서 선택한 여러 로그를 구분하려면 Category 열에 필터를 추가합니다. 예를 들어 QueryRuntimeStatistics 로그의 문서를 반환하려면 where 절 | where ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="QueryRuntimeStatistics"를 포함합니다. Kusto는 대/소문자를 구분하므로 열 이름의 대/소문자가 올바른지 확인합니다. AzureDiagnostics 테이블을 사용하여 몇 가지 Kusto 쿼리 예를 검토해 보겠습니다.

  • 지난 1시간 동안 다양한 Azure Cosmos DB 작업 유형에 요금이 부과된 개수 및 총 요청 수를 반환하는 쿼리입니다.
AzureDiagnostics 
| where TimeGenerated >= ago(1h)
| where ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="DataPlaneRequests" 
| summarize OperationCount = count(), TotalRequestCharged=sum(todouble(requestCharge_s)) by OperationName
| order by TotalRequestCharged desc 
  • 지난 1시간 동안 모든 성공한 요청(상태 200)과 속도 제한된 요청(상태 429)의 시간 차트 그래프를 반환하는 쿼리를 만듭니다. 요청은 10분마다 집계됩니다.
AzureDiagnostics 
| where TimeGenerated >= ago(1h)
| where ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="DataPlaneRequests" 
| summarize requestcount=count() by statusCode_s, bin(TimeGenerated, 10m)
| render timechart 

리소스 관련 쿼리

AzureDiagnostic 쿼리와 달리 리소스 관련 쿼리는 진단 설정 대화 상자에서 선택한 로그 범주마다 생성된 다양한 테이블에 대해 실행됩니다. 이러한 테이블을 사용하려면 위의 목록에 있는 테이블 이름 앞에 CDB 문자열을 붙입니다. 몇 가지 예를 검토해 보겠습니다.

  • 지난 1시간 동안 다양한 Azure Cosmos DB 작업 유형에 요금이 부과된 개수 및 총 요청 수를 반환하는 쿼리입니다.
CDBDataPlaneRequests
| where TimeGenerated >= ago(1h)
| summarize OperationCount = count(), TotalRequestCharged=sum(todouble(RequestCharge)) by OperationName
| order by TotalRequestCharged desc 
  • 지난 1시간 동안 모든 성공한 요청(상태 200)과 속도 제한된 요청(상태 429)의 시간 차트 그래프를 반환하는 쿼리를 만듭니다.
CDBDataPlaneRequests 
| where TimeGenerated >= ago(2h)
| summarize requestcount=count() by StatusCode, bin(TimeGenerated, 10m)
| render timechart