Compartir vía


Consulta de registros de llamadas

Introducción y acceso

Para poder aprovechar las ventajas de usar Log Analytics con los registros de Communications Services, primero debe seguir los pasos descritos en Habilitación del registro en Configuración de diagnóstico. Cuando haya habilitado los registros y un área de trabajo de Log Analytics, tendrá acceso a muchos paquetes de consulta predeterminados útiles que le ayudarán a visualizar y comprender rápidamente los datos disponibles en los registros, que se describen a continuación. A través de Log Analytics, también obtendrá acceso a más información de Communications Services a través de libros de Azure Monitor, la capacidad de crear nuestras propias consultas y libros, información general de las API de Log Analytics en cualquier consulta.

Access

Para acceder a las consultas, comience en la página del recurso Communications Services y, luego, haga clic en "Registros" en el panel de navegación izquierdo dentro de la sección Supervisión:

Navegación por Log Analytics

Desde allí, se muestra una pantalla modal que contiene todos los paquetes de consulta predeterminados disponibles para Communication Services, con la lista de los paquetes de consulta disponibles por los que puede navegar, a la izquierda.

Modal de consulta de Log Analytics

Aunque cierre la pantalla modal, podrá navegar a los distintos paquetes de consulta y acceder directamente a los datos en forma de tablas en función del esquema de los registros y las métricas que ha habilitado en la configuración de diagnóstico. Aquí, puede crear sus propias consultas a partir de los datos mediante KQL (Kusto). Puede encontrar más información sobre el uso, la edición y la creación de consultas en Consultas de Log Analytics.

Consultas de Log Analytics en el recurso

Tablas de Log Analytics en el recurso

Paquetes de consulta predeterminados para los registros de resumen de llamadas y diagnóstico de llamadas

A continuación, se muestran descripciones de cada consulta del paquete de consulta predeterminado para los registros de resumen de llamadas y diagnóstico de llamadas, junto con ejemplos de código y salidas de ejemplo para cada consulta disponible:

Consultas de información general de llamadas

Número de participantes por llamada

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

Salida del ejemplo:

Consulta de información general de llamadas

Número de participantes por llamada 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")

Salida del ejemplo:

Consulta de participantes por llamada de grupo

Proporción de tipos de llamada

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

Salida del ejemplo:

Consulta de proporción de tipos de llamada

Distribución de duración de llamada

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

Salida del ejemplo:

Consulta de duración de llamada

Percentiles de duración de llamada

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

Salida del ejemplo:

Consulta de percentil de duración de llamada

Consultas de información del punto de conexión

Número de puntos de conexión por llamada

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

Salida del ejemplo:

Consulta de puntos de conexión por llamada

Proporción de versiones del 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"

Salida del ejemplo:

Gráfico circular que muestra la proporción de versiones del SDK.Tabla que muestra las versiones del SDK

Proporción de versiones del sistema operativo (nombre simplificado del sistema operativo)

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

Salida del ejemplo:

Gráfico circular que muestra las proporciones de sistemas operativosTabla que muestra las versiones del sistema operativo

Consultas de secuencias multimedia

Secuencias por llamada

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

Salida del ejemplo:

Consulta de secuencias por llamada

Histograma de secuencias por llamada

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

Histograma de secuencias por llamada

Proporción de tipos de elementos multimedia

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

Gráfico circular que muestra las proporciones de tipos de elementos multimedia

Consultas de métricas de calidad

Promedio de valores de telemetría

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

Promedio de valores de telemetría

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 de valores medios de vibración

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 de valores máximos de vibración

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 de valores medios de pérdida de paquetes

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 de valores máximos de pérdida de paquetes

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 de valores medios de RTT

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

Histograma de valores máximos de RTT

Baja calidad de vibración

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

Calidad de vibración

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

Calidad de la velocidad de pérdida de paquetes

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

Calidad de RTT

Consultas parametrizables

Llamadas diarias en la ú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"

Llamadas diarias en la última semana

Llamadas por hora en el último día

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

Llamadas por hora en el último día