Consultar registos de chamadas
Descrição geral e acesso
Antes de aproveitar o Log Analytics para seus logs do Communications Services, você deve primeiro seguir as etapas descritas em Habilitar o registro em log nas Configurações de diagnóstico. Depois de habilitar seus logs e um espaço de trabalho do Log Analytics, você terá acesso a muitos pacotes de consultas padrão úteis que ajudarão você a visualizar e entender rapidamente os dados disponíveis em seus logs, que são descritos abaixo. Por meio do Log Analytics, você também tem acesso a mais Insights dos Serviços de Comunicação por meio das Pastas de Trabalho do Azure Monitor, a capacidade de criar nossas próprias consultas e Pastas de Trabalho, a visão geral das APIs do Log Analytics para qualquer consulta.
Access
Você pode acessar as consultas começando na página de recursos dos Serviços de Comunicação e, em seguida, clicando em "Logs" na navegação à esquerda na seção Monitor:
A partir daí, é apresentada uma tela modal que contém todos os pacotes de consulta padrão disponíveis para seus Serviços de Comunicações, com uma lista de Pacotes de Consultas disponíveis para navegar à esquerda.
Se você fechar a tela modal, ainda poderá navegar para os vários pacotes de consulta, acessar diretamente os dados na forma de tabelas com base no esquema dos logs e métricas que você habilitou em sua Configuração de diagnóstico. Aqui, você pode criar suas próprias consultas a partir dos dados usando KQL (Kusto). Saiba mais sobre como usar, editar e criar consultas lendo mais sobre: Consultas do Log Analytics
Pacotes de consulta padrão para resumo de chamadas e logs de diagnóstico de chamadas
A seguir estão descrições de cada consulta no pacote de consultas padrão, para os logs de Resumo de Chamadas e Diagnóstico de Chamadas, incluindo exemplos de código e saídas de exemplo para cada consulta disponível:
Consultas de visão geral da chamada
Número de participantes por chamada
// 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)
Saída de exemplo:
Número de participantes por chamada de grupo
// 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")
Saída de exemplo:
Proporção de tipos de chamada
// Ratio of call types
ACSCallSummary
| summarize call_types=dcount(CorrelationId) by CallType
| render piechart title="Call Type Ratio"
Saída de exemplo:
Distribuição da duração da chamada
// 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")
Saída de exemplo:
Percentis de duração da chamada
// Call duration percentiles
ACSCallSummary
| distinct CorrelationId, CallDuration
| summarize avg(CallDuration), percentiles(CallDuration, 50, 90, 99)
Saída de exemplo:
Consultas de informações de endpoint
Número de pontos finais por chamada
// 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)
Saída de exemplo:
Proporção de versões do 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"
Saída de exemplo:
Proporção de versões do sistema operacional (nome simplificado do sistema operacional)
// 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"
Saída de exemplo:
Consultas de fluxo de mídia
Fluxos por chamada
// 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)
Saída de exemplo:
Fluxos por histograma de chamada
// 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"
Proporção de tipos de mídia
// Ratio of media types by call
ACSCallDiagnostics
| summarize media_types=count() by MediaType
| render piechart title="Media Type Ratio"
Consultas de métricas de qualidade
Valores médios de telemetria
// 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)
Histograma 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")
Histograma 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")
Histograma 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")
Histograma 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")
Histograma 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")
Histograma 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")
Baixa qualidade de desvio
// 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"
Qualidade 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"
Qualidade 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"
Consultas parametrizáveis
Chamadas diárias na última semana
// 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"
Chamadas por hora no último dia
// 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"