Поделиться через


Журналы вызовов запросов

Общие сведения и доступ

Прежде чем воспользоваться преимуществами Log Analytics для журналов Служб коммуникации, необходимо сначала выполнить действия, описанные в разделе "Включить ведение журнала в параметрах диагностики". После включения журналов и рабочей области Log Analytics вы получите доступ к множеству полезных пакетов запросов по умолчанию, которые помогут вам быстро визуализировать и понять данные, доступные в журналах, которые описаны ниже. С помощью Log Analytics вы также получаете доступ к дополнительным аналитическим сведениям служб коммуникации через книги Azure Monitor, возможность создавать собственные запросы и книги, обзор API Log Analytics для любого запроса.

Открыть

Вы можете получить доступ к запросам, начиная со страницы ресурсов служб коммуникации, а затем щелкнув "Журналы" в области навигации слева в разделе "Монитор" :

Навигация Log Analytics

Оттуда отображается модальный экран, содержащий все пакеты запросов по умолчанию, доступные для служб коммуникации, со списком пакетов запросов, доступных для перехода слева.

Модальные запросы log analytics

Если закрыть модальный экран, вы по-прежнему можете перейти к различным пакетам запросов, напрямую получить доступ к данным в виде таблиц на основе схемы журналов и метрик, которые вы включили в параметре диагностики. Здесь можно создать собственные запросы из данных с помощью KQL (Kusto). Дополнительные сведения об использовании, редактировании и создании запросов см. в дополнительных сведениях: "Запросы Log Analytics"

Запросы Log Analytics в ресурсе

Таблицы Log Analytics в ресурсе

Пакеты запросов по умолчанию для сводки вызовов и журналов диагностики вызовов

Ниже приведены описания каждого запроса в пакете запросов по умолчанию для журналов диагностики вызовов и вызовов, включая примеры кода и примеры выходных данных для каждого запроса:

Запросы обзора вызовов

Количество участников на звонок

// 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)

Образец вывода:

Запрос обзора вызовов

Количество участников на групповой вызов

// 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")

Образец вывода:

запрос на вызов группы

Соотношение типов вызовов

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

Образец вывода:

отношение запроса типа вызова

Распределение длительности вызова

// 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 percentiles
ACSCallSummary
| distinct CorrelationId, CallDuration
| summarize avg(CallDuration), percentiles(CallDuration, 50, 90, 99)

Образец вывода:

Запрос процентиля длительности вызова

Запросы сведений о конечной точке

Количество конечных точек на вызов

// 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)

Образец вывода:

конечные точки на запрос вызова

Соотношение версий пакета 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"

Образец вывода:

Круговая диаграмма, показывающая соотношение версий пакета SDK.Таблица с версиями пакета SDK

Соотношение версий ОС (упрощенное имя ОС)

// 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"

Образец вывода:

Круговая диаграмма с коэффициентами операционной системыТаблица с версиями ОС

Запросы потока мультимедиа

Потоки для каждого вызова

// 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)

Образец вывода:

потоки для каждого запроса вызова

Потоки для каждого вызова гистограммы

// 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"

потоки для каждого вызова гистограммы

Соотношение типов носителей

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

круговая диаграмма, показывающая коэффициенты типов мультимедиа

Запросы метрик качества

Средние значения телеметрии

// 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)

средние значения телеметрии

Гистограмма 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 средняя гистограмма

Гистограмма JitterMax

// 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 гистограмма

Гистограмма 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")

средняя гистограмма потери пакетов

Гистограмма PacketLossRateMax

// 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")

Максимальная гистограмма потери пакетов

Гистограмма 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

Гистограмма RoundTripTimeMax

// 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

Плохое качество джиттера

// 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"

качество дрожания

Качество 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"

Качество скорости потери пакетов

Качество 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

Параметризируемые запросы

Ежедневные звонки на прошлой неделе

// 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"

ежедневные звонки на прошлой неделе

Звонки в час в последний день

// 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"

звонки в час в последний день