Log Analytics 작업 영역에서 사용량 분석

Azure Monitor 비용은 Log Analytics 작업 영역에서 수집되는 데이터의 양에 따라 크게 달라질 수 있습니다. 이 볼륨은 작업 영역을 사용하는 솔루션 집합과 각 솔루션이 수집하는 데이터의 양에 영향을 받습니다. 이 문서에서는 수집된 데이터를 분석하여 데이터 수집 비용을 제어하는 데 도움이 되도록 지침을 제공합니다. 이러한 분석은 예상보다 높은 사용량의 원인을 확인하는 데 도움이 됩니다. 또한 추가 리소스를 모니터링하고 다양한 Azure Monitor 기능을 구성할 때 비용을 예측하는 데 도움이 됩니다.

Azure Monitor 비용을 줄이기 위한 전략은 비용 최적화 및 Azure Monitor를 참조하세요.

예상보다 높은 사용량의 원인

각 Log Analytics 작업 영역은 별도의 서비스로 요금이 부과되며 Azure 구독에 대한 청구서에 추가됩니다. 데이터 수집량은 다음의 제반 요인에 따라 상당 부분 달라질 수 있습니다.

  • 사용하는 인사이트 및 서비스 집합과 해당 구성
  • 모니터링되는 리소스의 수 및 유형
  • 모니터링된 각 리소스에서 수집된 데이터의 볼륨

이러한 요소가 예기치 않게 증가하면 데이터 보존 요금이 증가할 수 있습니다. 이 문서의 나머지 부분에는 이러한 상황을 감지한 다음, 수집된 데이터를 분석하여 증가된 사용량의 출처를 식별하고 완화하는 방법을 제공합니다.

데이터 수집량이 많을 때 경고 보내기

예기치 않은 청구를 방지하려면 과도한 사용량이 발생할 때마다 사전에 알림을 받아야 합니다. 알림을 사용하면 청구 기간이 끝나기 전에 잠재적인 변칙을 해결할 수 있습니다.

다음 예제는 지난 24시간 동안 수집된 청구 가능한 데이터 볼륨이 50GB보다 큰 경우 경고를 보내는 로그 검색 경고 규칙 입니다. 사용자 환경에서 예상되는 사용량에 따라 다른 임계값을 사용하도록 경고 논리 설정을 수정합니다. 매일 여러 번 사용량을 확인하기 위해 빈도를 늘릴 수도 있지만 이 옵션으로 인해 경고 규칙에 대해 더 많은 요금이 발생합니다.

설정
범위
대상 범위 Log Analytics 작업 영역을 선택합니다.
Condition
쿼리 Usage | where IsBillable | summarize DataGB = sum(Quantity / 1000)
측정 측정값: DataGB
집계 형식: 총계
집계 세분성: 1일
경고 논리 연산자: 보다 큼
임계값: 50
평가 빈도: 1일
actions 임계값을 초과할 때 알릴 작업 그룹을 선택하거나 추가합니다.
세부 정보
심각도 Warning
경고 규칙 이름 24시간 내에 50GB를 초과하는 청구 가능한 데이터 볼륨

Azure Monitor에서 사용량 분석

Azure Monitor에서 기존 도구를 사용하여 분석을 시작합니다. 이러한 도구에는 구성이 필요하지 않으며 최소한의 노력으로 필요한 정보를 제공할 수 있는 경우가 많습니다. 기존 Azure Monitor 기능보다 수집된 데이터에 대한 심층 분석이 필요한 경우 Log Analytics에서 다음 로그 쿼리를 사용합니다.

Log Analytics Workspace Insights

Log Analytics 작업 영역 인사이트에서는 작업 영역의 데이터를 빠르게 이해할 수 있습니다. 예를 들어 다음을 확인할 수 있습니다.

  • 주 테이블에서 가장 많은 데이터 볼륨을 수집 중인 데이터 테이블
  • 데이터에 기여하는 상위 리소스
  • 데이터 수집의 추세

솔루션 및 테이블별 수집 분석은 사용량 탭을 참조하세요. 이 정보는 대량의 데이터 볼륨에 영향을 주는 테이블을 빠르게 식별하는 데 도움이 될 수 있습니다. 또한 탭에는 시간에 따른 데이터 수집 추세도 표시됩니다. 시간에 따라 데이터 수집이 꾸준히 증가하는지 또는 특정 구성 변경에 따라 갑자기 증가했는지를 확인할 수 있습니다.

데이터 패턴을 더 자세히 이해하는 데 도움이 되는 미리 빌드된 쿼리에 대한 추가 쿼리를 선택합니다.

사용량 및 예상 비용

각 작업 영역에 대한 사용량 및 예상 비용 페이지의 솔루션당 데이터 수집 차트는 지난 31일 동안 전송된 총 데이터 양과 각 솔루션이 전송하는 데이터 양을 보여 줍니다. 이 정보는 전체 데이터 사용량 또는 특정 솔루션의 사용량 증가 여부와 같은 추세를 확인하는 데 도움이 됩니다.

사용 현황 테이블에서 데이터 볼륨 쿼리

특정 서비스 또는 솔루션에서 수집한 청구 가능한 데이터의 양을 분석합니다. 이러한 쿼리는 작업 영역의 각 테이블에 대한 사용량 데이터를 수집하는 사용량 테이블을 사용합니다.

참고 항목

TimeGenerated를 사용하는 절은 Azure Portal의 쿼리 환경이 기본값인 24시간을 초과한 기간을 되돌아보는지 확인하는 용도로만 사용됩니다. 사용량 데이터 형식을 사용하는 경우, StartTimeEndTime은 결과가 표시되는 시간 버킷을 나타냅니다.

지난 한 달 동안 형식별 청구 가능한 데이터 볼륨

Usage 
| where TimeGenerated > ago(32d)
| where StartTime >= startofday(ago(31d)) and EndTime < startofday(now())
| where IsBillable == true
| summarize BillableDataGB = sum(Quantity) / 1000. by bin(StartTime, 1d), DataType 
| render columnchart

지난 한 달 동안 솔루션 및 형식별 청구 가능한 데이터 볼륨

Usage 
| where TimeGenerated > ago(32d)
| where StartTime >= startofday(ago(31d)) and EndTime < startofday(now())
| where IsBillable == true
| summarize BillableDataGB = sum(Quantity) / 1000 by Solution, DataType
| sort by Solution asc, DataType asc

이벤트에서 직접 데이터 볼륨 쿼리

수집된 데이터에 대한 심층 분석이 필요한 경우 Log Analytics에서 로그 쿼리를 사용할 수 있습니다. Log Analytics 작업 영역의 각 테이블에는 청구 가능한 데이터를 분석하는 데 도움이 되는 다음과 같은 표준 열이 있습니다.

  • _IsBillable: 수집 요금이 있는 레코드를 식별합니다. 이 열을 사용하여 청구할 수 없는 데이터를 필터링합니다.
  • _BilledSize: 레코드의 크기(바이트)를 제공합니다.

특정 이벤트에 대한 청구 가능한 데이터 볼륨

특정 데이터 형식이 과도한 데이터를 수집하는 경우 해당 테이블의 데이터를 분석하여 증가하는 특정 레코드를 확인할 수 있습니다. 이 예제에서는 Event 테이블의 특정 이벤트 ID를 필터링한 다음, 각 ID에 대한 개수를 제공합니다. 다른 테이블의 열을 사용하여 이 쿼리를 수정할 수 있습니다.

Event
| where TimeGenerated > startofday(ago(31d)) and TimeGenerated < startofday(now()) 
| where EventID == 5145 or EventID == 5156
| where _IsBillable == true
| summarize count(), Bytes=sum(_BilledSize) by EventID, bin(TimeGenerated, 1d)

Azure 리소스, 리소스 그룹 또는 구독별 데이터 볼륨

특정 리소스 또는 리소스 집합에서 수집된 청구 가능한 데이터의 양을 분석할 수 있습니다. 이러한 쿼리는 Azure에서 호스팅되는 리소스의 데이터에 대해 _ResourceId_SubscriptionId 열을 사용합니다.

Warning

여러 데이터 형식을 검색하면 실행에 많은 리소스가 필요하기 때문에 이러한 찾기 쿼리는 자주 사용하지 않도록 합니다. 구독, 리소스 그룹 또는 리소스 이름당 결과가 필요하지 않은 경우 위의 쿼리와 같이 사용량 테이블을 사용합니다.

마지막 하루 동안의 리소스 ID별 청구 가능 데이터 볼륨

find where TimeGenerated between(startofday(ago(1d))..startofday(now())) project _ResourceId, _BilledSize, _IsBillable
| where _IsBillable == true 
| summarize BillableDataBytes = sum(_BilledSize) by _ResourceId 
| sort by BillableDataBytes nulls last

마지막 하루 동안의 리소스 그룹별 청구 가능 데이터 볼륨

find where TimeGenerated between(startofday(ago(1d))..startofday(now())) project _ResourceId, _BilledSize, _IsBillable
| where _IsBillable == true 
| summarize BillableDataBytes = sum(_BilledSize) by _ResourceId
| extend resourceGroup = tostring(split(_ResourceId, "/")[4] )
| summarize BillableDataBytes = sum(BillableDataBytes) by resourceGroup 
| sort by BillableDataBytes nulls last

다음과 같이 _ResourceId 구문 분석에 유용할 수 있습니다.

| parse tolower(_ResourceId) with "/subscriptions/" subscriptionId "/resourcegroups/" 
    resourceGroup "/providers/" provider "/" resourceType "/" resourceName   

마지막 하루 동안의 구독별 청구 가능 데이터 볼륨

find where TimeGenerated between(startofday(ago(1d))..startofday(now())) project _BilledSize, _IsBillable, _SubscriptionId
| where _IsBillable == true 
| summarize BillableDataBytes = sum(_BilledSize) by _SubscriptionId 
| sort by BillableDataBytes nulls last

데이터 볼륨이 큰 작업 영역의 경우 이 섹션에 표시된 것처럼 대량의 원시 데이터를 쿼리하는 작업을 하루로 제한해야 할 수 있습니다. 시간에 따른 추세를 추적하려면 Power BI 보고서를 설정하고 증분 새로 고침을 사용하여 하루에 한 번 리소스당 데이터 볼륨을 수집하는 것이 좋습니다.

컴퓨터별 데이터 볼륨

가상 머신 또는 가상 머신 집합에서 수집되는 청구 가능한 데이터의 양을 분석할 수 있습니다. 사용 현황 테이블에는 특정 가상 머신에 대한 데이터 볼륨을 표시하는 세분성이 없으므로 이러한 쿼리는 찾기 연산자를 사용하여 컴퓨터 이름을 포함하는 모든 테이블을 검색합니다. 이 쿼리는 데이터 추세 분석 전용이므로 Usage 형식은 생략됩니다.

Warning

여러 데이터 형식을 검색하면 실행에 많은 리소스가 필요하기 때문에 이러한 찾기 쿼리는 자주 사용하지 않도록 합니다. 구독, 리소스 그룹 또는 리소스 이름당 결과가 필요하지 않은 경우 위의 쿼리와 같이 사용량 테이블을 사용합니다.

마지막 하루 동안의 컴퓨터별 청구 가능 데이터 볼륨

find where TimeGenerated between(startofday(ago(1d))..startofday(now())) project _BilledSize, _IsBillable, Computer, Type
| where _IsBillable == true and Type != "Usage"
| extend computerName = tolower(tostring(split(Computer, '.')[0]))
| summarize BillableDataBytes = sum(_BilledSize) by  computerName 
| sort by BillableDataBytes desc nulls last

마지막 하루 동안의 컴퓨터별 청구 가능 이벤트 수

find where TimeGenerated between(startofday(ago(1d))..startofday(now())) project _IsBillable, Computer, Type
| where _IsBillable == true and Type != "Usage"
| extend computerName = tolower(tostring(split(Computer, '.')[0]))
| summarize eventCount = count() by computerName  
| sort by eventCount desc nulls last

알려진 무료 데이터 형식을 제외한 데이터 볼륨 쿼리

다음 쿼리는 데이터 수집 요금에서 자유로워야 하는 모든 데이터 형식을 제외하고 월별 데이터 볼륨을 GB 단위로 반환합니다.

let freeTables = dynamic([
"AppAvailabilityResults","AppSystemEvents","ApplicationInsights","AzureActivity","AzureNetworkAnalyticsIPDetails_CL",
"AzureNetworkAnalytics_CL","AzureTrafficAnalyticsInsights_CL","ComputerGroup","DefenderIoTRawEvent","Heartbeat",
"MAApplication","MAApplicationHealth","MAApplicationHealthIssues","MAApplicationInstance","MAApplicationInstanceReadiness",
"MAApplicationReadiness","MADeploymentPlan","MADevice","MADeviceNotEnrolled","MADeviceReadiness","MADriverInstanceReadiness",
"MADriverReadiness","MAProposedPilotDevices","MAWindowsBuildInfo","MAWindowsCurrencyAssessment",
"MAWindowsCurrencyAssessmentDailyCounts","MAWindowsDeploymentStatus","NTAIPDetails_CL","NTANetAnalytics_CL",
"OfficeActivity","Operation","SecurityAlert","SecurityIncident","UCClient","UCClientReadinessStatus",
"UCClientUpdateStatus","UCDOAggregatedStatus","UCDOStatus","UCDeviceAlert","UCServiceUpdateStatus","UCUpdateAlert",
"Usage","WUDOAggregatedStatus","WUDOStatus","WaaSDeploymentStatus","WaaSInsiderStatus","WaaSUpdateStatus"]);
Usage 
| where DataType !in (freeTables) 
| where TimeGenerated > ago(30d) 
| summarize MonthlyGB=sum(Quantity)/1000

IsBillable이 올바르게 설정되지 않은 데이터를 찾으려면(잘못된 청구 또는 더 구체적으로 청구되지 않을 수 있음) 작업 영역에서 다음 쿼리를 사용합니다.

let freeTables = dynamic([
"AppAvailabilityResults","AppSystemEvents","ApplicationInsights","AzureActivity","AzureNetworkAnalyticsIPDetails_CL",
"AzureNetworkAnalytics_CL","AzureTrafficAnalyticsInsights_CL","ComputerGroup","DefenderIoTRawEvent","Heartbeat",
"MAApplication","MAApplicationHealth","MAApplicationHealthIssues","MAApplicationInstance","MAApplicationInstanceReadiness",
"MAApplicationReadiness","MADeploymentPlan","MADevice","MADeviceNotEnrolled","MADeviceReadiness","MADriverInstanceReadiness",
"MADriverReadiness","MAProposedPilotDevices","MAWindowsBuildInfo","MAWindowsCurrencyAssessment",
"MAWindowsCurrencyAssessmentDailyCounts","MAWindowsDeploymentStatus","NTAIPDetails_CL","NTANetAnalytics_CL",
"OfficeActivity","Operation","SecurityAlert","SecurityIncident","UCClient","UCClientReadinessStatus",
"UCClientUpdateStatus","UCDOAggregatedStatus","UCDOStatus","UCDeviceAlert","UCServiceUpdateStatus","UCUpdateAlert",
"Usage","WUDOAggregatedStatus","WUDOStatus","WaaSDeploymentStatus","WaaSInsiderStatus","WaaSUpdateStatus"]);
Usage 
| where DataType !in (freeTables) 
| where TimeGenerated > ago(30d) 
| where IsBillable == false 
| summarize MonthlyPotentialUnderbilledGB=sum(Quantity)/1000 by DataType

일반적인 데이터 형식에 대한 쿼리

특정 데이터 형식에 대해 과도하게 청구 가능한 데이터가 있는 경우 해당 테이블의 데이터를 분석하는 쿼리를 수행해야 할 수 있습니다. 다음 쿼리는 몇 가지 일반적인 데이터 형식에 대한 샘플을 제공합니다.

보안 솔루션

SecurityEvent 
| summarize AggregatedValue = count() by EventID
| order by AggregatedValue desc nulls last

로그 관리 솔루션

Usage 
| where Solution == "LogManagement" and iff(isnotnull(toint(IsBillable)), IsBillable == true, IsBillable == "true") == true 
| summarize AggregatedValue = count() by DataType
| order by AggregatedValue desc nulls last

성능 데이터 형식

Perf 
| summarize AggregatedValue = count() by CounterPath
Perf 
| summarize AggregatedValue = count() by CounterName

이벤트 데이터 형식

Event 
| summarize AggregatedValue = count() by EventID
Event 
| summarize AggregatedValue = count() by EventLog, EventLevelName

Syslog 데이터 형식

Syslog 
| summarize AggregatedValue = count() by Facility, SeverityLevel
Syslog 
| summarize AggregatedValue = count() by ProcessName

AzureDiagnostics 데이터 형식

AzureDiagnostics 
| summarize AggregatedValue = count() by ResourceProvider, ResourceId

Application Insights 데이터

클래식 또는 작업 영역 기반 애플리케이션이 있는지 여부에 따라 Application Insights에 대해 수집된 데이터의 양을 조사하는 두 가지 방법이 있습니다. 작업 영역 기반 및 클래식 리소스 모두에 대해 수집된 각 이벤트에서 사용할 수 있는 _BilledSize 속성을 사용합니다. 또한 systemEvents 테이블에서 집계된 정보를 클래식 리소스에 사용할 수도 있습니다.

참고 항목

SystemEvents를 제외한 Application Insights 테이블에 대한 쿼리는 작업 영역 기반 및 클래식 Application Insights 리소스 모두에 대해 작동합니다. 이전 버전과의 호환성을 통해 레거시 테이블 이름을 계속 사용할 수 있습니다. 작업 영역 기반 리소스의 경우 Log Analytics 작업 영역 메뉴에서 로그를 엽니다. 클래식 리소스의 경우 Application Insights 메뉴에서 로그를 엽니다.

지난 30일 동안 가장 많은 데이터 볼륨을 생성한 종속성 작업(작업 영역 기반 또는 클래식)

dependencies
| where timestamp >= startofday(ago(30d))
| summarize sum(_BilledSize) by operation_Name
| render barchart  

지난 7일 동안 이 Application Insights 리소스에 대한 유형별 일일 데이터 볼륨(클래식에만 해당)

systemEvents
| where timestamp >= startofday(ago(7d)) and timestamp < startofday(now())
| where type == "Billing"
| extend BillingTelemetryType = tostring(dimensions["BillingTelemetryType"])
| extend BillingTelemetrySizeInBytes = todouble(measurements["BillingTelemetrySize"])
| summarize sum(BillingTelemetrySizeInBytes) by BillingTelemetryType, bin(timestamp, 1d)  

작업 영역 기반 Application Insights 리소스에 대한 데이터 볼륨 추세를 확인하려면 모든 Application Insights 테이블을 포함하는 쿼리를 사용합니다. 다음 쿼리는 작업 영역 기반 리소스와 관련된 테이블 이름을 사용합니다.

7일 동안 작업 영역의 모든 Application Insights 리소스에 대한 유형별 일일 데이터 볼륨

union AppAvailabilityResults,
      AppBrowserTimings,
      AppDependencies,
      AppExceptions,
      AppEvents,
      AppMetrics,
      AppPageViews,
      AppPerformanceCounters,
      AppRequests,
      AppSystemEvents,
      AppTraces
| where TimeGenerated >= startofday(ago(7d)) and TimeGenerated < startofday(now())
| summarize sum(_BilledSize) by _ResourceId, bin(TimeGenerated, 1d)

단일 Application Insights 리소스에 대한 데이터 볼륨 추세만 확인하려면 위의 쿼리에서 summarize 앞에 다음 줄을 추가합니다.

| where _ResourceId contains "<myAppInsightsResourceName>"

데이터 볼륨이 큰 작업 영역에서는 위의 경우처럼 대량의 원시 데이터를 쿼리하는 작업을 하루로 제한해야 할 수 있습니다. 시간에 따른 추세를 추적하려면 Power BI 보고서를 설정하고 증분 새로 고침을 사용하여 하루에 한 번 리소스당 데이터 볼륨을 수집하는 것이 좋습니다.

데이터를 전송하는 노드를 파악

특정 원본의 과도한 데이터가 없는 경우 데이터를 전송하는 에이전트 수가 너무 많을 수 있습니다.

지난 달에 매일 하트비트를 보낸 에이전트 노드 수

Heartbeat 
| where TimeGenerated > startofday(ago(31d))
| summarize nodes = dcount(Computer) by bin(TimeGenerated, 1d)    
| render timechart

Warning

여러 데이터 형식을 검색하면 실행에 많은 리소스가 필요하기 때문에 이러한 찾기 쿼리는 자주 사용하지 않도록 합니다. 구독, 리소스 그룹 또는 리소스 이름당 결과가 필요하지 않은 경우 위의 쿼리와 같이 사용량 테이블을 사용합니다.

지난 24시간 동안 데이터를 보낸 노드 수

find where TimeGenerated > ago(24h) project Computer
| extend computerName = tolower(tostring(split(Computer, '.')[0]))
| where computerName != ""
| summarize nodes = dcount(computerName)

지난 24시간 동안 각 노드에서 보낸 데이터 볼륨

find where TimeGenerated > ago(24h) project _BilledSize, Computer
| extend computerName = tolower(tostring(split(Computer, '.')[0]))
| where computerName != ""
| summarize TotalVolumeBytes=sum(_BilledSize) by computerName

레거시 노드당 가격 책정 계층에서 청구되는 노드

레거시 노드당 가격 책정 계층은 시간 단위로 세분화하여 노드에 대한 요금을 청구합니다. 또한 보안 데이터 형식 세트를 보내는 노드만 계산하지 않습니다. 작업 영역이 레거시 노드당 가격 책정 계층에 있는 경우, 노드로 요금이 청구되는 컴퓨터 목록을 가져오려면 일부 데이터 형식은 무료이므로 청구된 데이터 형식을 전송하는 노드를 찾습니다. 이 경우 FQDN(정규화된 도메인 이름)의 맨 왼쪽 필드를 사용합니다.

다음 쿼리는 시간당 청구된 데이터가 있는 컴퓨터 수를 반환합니다. 청구서의 단위 수는 쿼리에서 billableNodeMonthsPerDay로 표시되는 노드 개월 단위입니다. 업데이트 관리 솔루션이 작업 영역에 설치되어 있는 경우 UpdateUpdateSummary 데이터 형식을 위 쿼리의 where 절에 있는 목록에 추가합니다.

find where TimeGenerated >= startofday(ago(7d)) and TimeGenerated < startofday(now()) project Computer, _IsBillable, Type, TimeGenerated
| where Type !in ("SecurityAlert", "SecurityBaseline", "SecurityBaselineSummary", "SecurityDetection", "SecurityEvent", "WindowsFirewall", "MaliciousIPCommunication", "LinuxAuditLog", "SysmonEvent", "ProtectionStatus", "WindowsEvent")
| extend computerName = tolower(tostring(split(Computer, '.')[0]))
| where computerName != ""
| where _IsBillable == true
| summarize billableNodesPerHour=dcount(computerName) by bin(TimeGenerated, 1h)
| summarize billableNodesPerDay = sum(billableNodesPerHour)/24., billableNodeMonthsPerDay = sum(billableNodesPerHour)/24./31.  by day=bin(TimeGenerated, 1d)
| sort by day asc

참고 항목

솔루션 대상 지정이 사용되는 경우 실제 청구 알고리즘에 몇 가지 추가적인 복잡성이 위의 쿼리에는 표시되지 않습니다.

보안 및 Automation 노드의 수

고유 보안 노드 수

union
(
    Heartbeat
    | where (Solutions has 'security' or Solutions has 'antimalware' or Solutions has 'securitycenter')
    | project Computer
),
(
    ProtectionStatus
    | where Computer !in (Heartbeat | project Computer)
    | project Computer
)
| distinct Computer
| project lowComputer = tolower(Computer)
| distinct lowComputer
| count

고유 Automation 노드 수

 ConfigurationData 
 | where (ConfigDataType == "WindowsServices" or ConfigDataType == "Software" or ConfigDataType =="Daemons") 
 | extend lowComputer = tolower(Computer) | summarize by lowComputer 
 | join (
     Heartbeat 
       | where SCAgentChannel == "Direct"
       | extend lowComputer = tolower(Computer) | summarize by lowComputer, ComputerEnvironment
 ) on lowComputer
 | summarize count() by ComputerEnvironment | sort by ComputerEnvironment asc

지연 도착 데이터

Usage 레코드를 사용하여 보고된 높은 데이터 수집이 관찰되지만 데이터 형식에서 _BilledSize를 직접 합산하는 것과 동일한 결과를 나타나지 않는다면 상당한 지연 도착 데이터가 있을 가능성이 있습니다. 데이터가 이전 타임스탬프로 수집되는 경우에 이러한 상황이 발생합니다.

예를 들어 에이전트에 연결 문제가 있고 다시 연결되면 누적된 데이터를 보낼 수 있습니다. 또는 호스트 시간이 잘못되었을 수 있습니다. 이러한 예제는 Usage 데이터 형식에서 보고한 수집된 데이터와 이벤트가 생성될 때의 타임스탬프인 TimeGenerated로 지정된 특정 날에 대한 원시 데이터의 _BilledSize 합계를 합한 쿼리 간의 명백한 불일치로 인해 발생할 수 있습니다.

지연 도착 데이터 문제를 진단하려면 _TimeReceived 열과 TimeGenerated 열을 사용합니다. _TimeReceived 속성은 Azure 클라우드의 Azure Monitor 수집 지점에서 레코드를 받은 시간입니다.

다음 예제는 2021년 5월 2일의 W3CIISLog 수집된 데이터 볼륨이 높은 것에 대한 응답으로 해당 수집 데이터의 타임스탬프를 식별하는 것입니다. where TimeGenerated > datetime(1970-01-01) 문은 모든 데이터를 살펴보기 위해 Log Analytics 사용자 인터페이스에 단서를 제공하기 위해 포함되었습니다.

W3CIISLog
| where TimeGenerated > datetime(1970-01-01)
| where _TimeReceived >= datetime(2021-05-02) and _TimeReceived < datetime(2021-05-03) 
| where _IsBillable == true
| summarize BillableDataMB = sum(_BilledSize)/1.E6 by bin(TimeGenerated, 1d)
| sort by TimeGenerated asc 

다음 단계