다음을 통해 공유


통화 로그 쿼리

개요 및 액세스

Communications Services 로그용 Log Analytics를 활용하려면 먼저 진단 설정에서 로깅 사용에서 설명한 단계를 수행해야 합니다. 로그 및 Log Analytics 작업 영역을 사용하도록 설정하면 아래에 설명된 로그에서 사용할 수 있는 데이터를 빠르게 시각화하고 이해하는 데 도움이 되는 많은 유용한 기본 쿼리 팩에 액세스할 수 있습니다. Log Analytics를 사용하여 Azure Monitor Workbooks를 통해 더 많은 Communications Services Insights, 자체 쿼리 및 통합 문서를 만드는 기능, 모든 쿼리에 대한 Log Analytics API 개요에 액세스할 수도 있습니다.

Access

Communications Services 리소스 페이지에서 시작한 다음 모니터 섹션 내의 왼쪽 탐색 영역에서 "로그"를 클릭하여 쿼리에 액세스할 수 있습니다.

Log Analytics navigation

여기에서 Communications Services에 사용할 수 있는 모든 기본 쿼리 팩이 포함된 모달 화면과 왼쪽으로 이동할 수 있는 쿼리 팩 목록이 표시됩니다.

log analytics queries modal

모달 화면을 닫는 경우에도 다양한 쿼리 팩으로 이동하여 진단 설정에서 사용하도록 설정한 로그 및 메트릭의 스키마에 따라 테이블 형식의 데이터에 직접 액세스할 수 있습니다. 여기서는 KQL(Kusto)을 사용하여 데이터에서 사용자 고유의 쿼리를 만들 수 있습니다. Log Analytics 쿼리에 대해 조사하여 쿼리 사용, 편집 및 만들기에 대해 자세히 알아보세요.

Log Analytics queries in resource

Log Analytics tables in resource

호출 요약 및 호출 진단 로그에 대한 기본 쿼리 팩

다음은 사용 가능한 각 쿼리에 대한 코드 샘플 및 예제 출력을 포함하여 호출 요약 및 호출 진단 로그에 대한 기본 쿼리 팩의 각 쿼리에 대한 설명입니다.

호출 개요 쿼리

호출당 참가자 수

// Count number of calls and participants,
// and print average participants per call
ACSCallSummary
| distinct CorrelationId, ParticipantId, EndpointId
| summarize num_participants=count(), num_calls=dcount(CorrelationId)
| extend avg_participants = todecimal(num_participants) / todecimal(num_calls)

샘플 출력:

call overview query

그룹 호출당 참가자 수

// Count number of participants per group call
ACSCallSummary
| where CallType == 'Group'
| distinct CorrelationId, ParticipantId
| summarize num_participants=count() by CorrelationId
| summarize participant_counts=count() by num_participants
| order by num_participants asc 
| render columnchart with  (xcolumn = num_participants, title="Number of participants per group call")

샘플 출력:

participants per group call query

호출 형식의 비율

// Ratio of call types
ACSCallSummary
| summarize call_types=dcount(CorrelationId) by CallType
| render piechart title="Call Type Ratio"

샘플 출력:

ratio of call type query

호출 기간 분포

// Call duration histogram
ACSCallSummary
| distinct CorrelationId, CallDuration
|summarize duration_counts=count() by CallDuration
| order by CallDuration asc
| render columnchart with (xcolumn = CallDuration, title="Call duration histogram")

샘플 출력:

call duration query

호출 기간 백분위수

// Call duration percentiles
ACSCallSummary
| distinct CorrelationId, CallDuration
| summarize avg(CallDuration), percentiles(CallDuration, 50, 90, 99)

샘플 출력:

call duration percentile query

엔드포인트 정보 쿼리

호출당 엔드포인트 수

// Count number of calls and endpoints,
// and print average endpoints per call
ACSCallSummary
| distinct CorrelationId, EndpointId
| summarize num_endpoints=count(), num_calls=dcount(CorrelationId)
| extend avg_endpoints = todecimal(num_endpoints) / todecimal(num_calls)

샘플 출력:

endpoints per call query

SDK 버전 비율

// Ratio of SDK Versions
ACSCallSummary
| distinct CorrelationId, ParticipantId, EndpointId, SdkVersion
| summarize sdk_counts=count() by SdkVersion
| order by SdkVersion asc
| render piechart title="SDK Version Ratio"

샘플 출력:

Pie chart showing the ratio of SDK Versions.Table showing SDK Versions

OS 버전 비율(간소화된 OS 이름)

// Ratio of OS Versions (simplified OS name)
ACSCallSummary
| distinct CorrelationId, ParticipantId, EndpointId, OsVersion
| extend simple_os = case(  indexof(OsVersion, "Android") != -1, tostring(split(OsVersion, ";")[0]),
                            indexof(OsVersion, "Darwin") != -1, tostring(split(OsVersion, ":")[0]),
                            indexof(OsVersion, "Windows") != -1, tostring(split(OsVersion, ".")[0]),
                            OsVersion
                        )
| summarize os_counts=count() by simple_os
| order by simple_os asc
| render piechart title="OS Version Ratio"

샘플 출력:

Pie chart showing operating system ratiosTable showing OS Versions

미디어 스트림 쿼리

호출당 스트림

// Count number of calls and streams,
// and print average streams per call
ACSCallDiagnostics
| summarize num_streams=count(), num_calls=dcount(CorrelationId)
| extend avg_streams = todecimal(num_streams) / todecimal(num_calls)

샘플 출력:

streams per call query

호출당 스트림 히스토그램

// Distribution of streams per call
ACSCallDiagnostics
| summarize streams_per_call=count() by CorrelationId
| summarize stream_counts=count() by streams_per_call
| order by streams_per_call asc
| render columnchart title="Streams per call histogram"

streams per call histogram

미디어 유형의 비율

// Ratio of media types by call
ACSCallDiagnostics
| summarize media_types=count() by MediaType
| render piechart title="Media Type Ratio"

pie chart showing media type ratios

품질 메트릭 쿼리

평균 원격 분석 값

// Average telemetry values over all streams
ACSCallDiagnostics
| summarize Avg_JitterAvg=avg(JitterAvg),
            Avg_JitterMax=avg(JitterMax),
            Avg_RoundTripTimeAvg=avg(RoundTripTimeAvg),
            Avg_RoundTripTimeMax=avg(RoundTripTimeMax),
            Avg_PacketLossRateAvg=avg(PacketLossRateAvg),
            Avg_PacketLossRateMax=avg(PacketLossRateMax)

average telemetry values

JitterAvg 히스토그램

// Jitter Average Histogram
ACSCallDiagnostics
| where isnotnull(JitterAvg)
| summarize JitterAvg_counts=count() by JitterAvg
| order by JitterAvg asc
| render columnchart with (xcolumn = JitterAvg, title="JitterAvg histogram")

jitter average histogram

JitterMax histogram

// Jitter Max Histogram
ACSCallDiagnostics
| where isnotnull(JitterMax)
|summarize JitterMax_counts=count() by JitterMax
| order by JitterMax asc
| render columnchart with (xcolumn = JitterMax, title="JitterMax histogram")

jitter max histogram

PacketLossRateAvg 히스토그램

// PacketLossRate Average Histogram
ACSCallDiagnostics
| where isnotnull(PacketLossRateAvg)
|summarize PacketLossRateAvg_counts=count() by bin(PacketLossRateAvg, 0.01)
| order by PacketLossRateAvg asc
| render columnchart with (xcolumn = PacketLossRateAvg, title="PacketLossRateAvg histogram")

packet loss average histogram

PacketLossRateMax histogram

// PacketLossRate Max Histogram
ACSCallDiagnostics
| where isnotnull(PacketLossRateMax)
|summarize PacketLossRateMax_counts=count() by bin(PacketLossRateMax, 0.01)
| order by PacketLossRateMax asc
| render columnchart with (xcolumn = PacketLossRateMax, title="PacketLossRateMax histogram")

packet loss max histogram

RoundTripTimeAvg 히스토그램

// RoundTripTime Average Histogram
ACSCallDiagnostics
| where isnotnull(RoundTripTimeAvg)
|summarize RoundTripTimeAvg_counts=count() by RoundTripTimeAvg
| order by RoundTripTimeAvg asc
| render columnchart with (xcolumn = RoundTripTimeAvg, title="RoundTripTimeAvg histogram")

RTT average histogram

RoundTripTimeMax histogram

// RoundTripTime Max Histogram
ACSCallDiagnostics
| where isnotnull(RoundTripTimeMax)
|summarize RoundTripTimeMax_counts=count() by RoundTripTimeMax
| order by RoundTripTimeMax asc
| render columnchart with (xcolumn = RoundTripTimeMax, title="RoundTripTimeMax histogram")

RTT max histogram

낮은 지터 품질

// Get proportion of calls with poor quality jitter
// (defined as jitter being higher than 30ms)
ACSCallDiagnostics
| extend JitterQuality = iff(JitterAvg > 30, "Poor", "Good")
| summarize count() by JitterQuality
| render piechart title="Jitter Quality"

jitter quality

PacketLossRate 품질

// Get proportion of calls with poor quality packet loss
// rate (defined as packet loss being higher than 10%)
ACSCallDiagnostics
| extend PacketLossRateQuality = iff(PacketLossRateAvg > 0.1, "Poor", "Good")
| summarize count() by PacketLossRateQuality
| render piechart title="Packet Loss Rate Quality"

packet loss rate quality

RoundTripTime 품질

// Get proportion of calls with poor quality packet loss
// rate (defined as packet loss being higher than 10%)
ACSCallDiagnostics
| extend PacketLossRateQuality = iff(PacketLossRateAvg > 0.1, "Poor", "Good")
| summarize count() by PacketLossRateQuality
| render piechart title="Packet Loss Rate Quality"

RTT quality

매개 변수화 가능한 쿼리

지난 주 일일 호출

// Histogram of daily calls over the last week
ACSCallSummary
| where CallStartTime > now() - 7d
| distinct CorrelationId, CallStartTime
| extend hour  = floor(CallStartTime, 1d)
| summarize event_count=count() by day
| sort by day asc
| render columnchart title="Number of calls in last week"

daily calls last week

마지막 1일의 시간당 호출

// Histogram of calls per hour in the last day
ACSCallSummary
| where CallStartTime > now() - 1d
| distinct CorrelationId, CallStartTime
| extend hour = floor(CallStartTime, 1h)
| summarize event_count=count() by hour
| sort by hour asc
| render columnchart title="Number of calls per hour in last day"

calls per hour last day