Interroger les journaux d’appel

Vue d’ensemble et accès

Avant de pouvoir tirer parti de Log Analytics pour vos journaux Communication Services, vous devez d’abord suivre les étapes décrites dans Activer la journalisation dans les paramètres de diagnostic. Une fois que vous avez activé vos journaux et un espace de travail log Analytics, vous aurez accès à de nombreux packs de requêtes par défaut utiles qui vous aideront à visualiser et à comprendre rapidement les données disponibles dans vos journaux, qui sont décrits ci-dessous. Par le biais de Log Analytics, vous avez également accès à davantage d’informations sur les services de communication via les classeurs Azure Monitor, la possibilité de créer vos propres requêtes et classeurs, la vue d’ensemble des API de Log Analytics pour toute requête.

Access

Vous pouvez accéder aux requêtes en commençant par la page de ressources Communication Services, puis en cliquant sur « Journaux » dans le volet de navigation gauche de la section Surveiller :

Navigation Log Analytics

À partir de là, un écran modal s’affiche, contenant tous les packs de requêtes par défaut disponibles pour vos services de communication, avec une liste de packs de requêtes à parcourir sur la gauche.

Modal Requêtes Log Analytics

Si vous fermez l’écran modal, vous pouvez toujours accéder aux différents packs de requêtes et directement aux données sous forme de tables basées sur le schéma des journaux et des métriques que vous avez activés dans votre Paramètre de diagnostic. Ici, vous pouvez créer vos propres requêtes à partir des données à l’aide de KQL (Kusto). Pour plus d’informations sur l’utilisation, la modification et la création de requêtes, consultez Requêtes Log Analytics.

Requêtes Log Analytics dans la ressource

Tables Log Analytics dans la ressource

Packs de requêtes par défaut pour le résumé des appels et les journaux de diagnostic d’appel

Voici les descriptions de chaque requête du pack de requêtes par défaut, pour les journaux de résumé des appels et de diagnostic des appels, notamment des exemples de code et des exemples de sorties pour chaque requête disponible :

Requêtes de vue d’ensemble des appels

Nombre de participants par appel

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

Exemple de sortie :

requête de vue d’ensemble des appels

Nombre de participants par appel de groupe

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

Exemple de sortie :

requête des participants par appel de groupe

Ratio des types d’appel

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

Exemple de sortie :

requête de ratio des types d’appel

Répartition de la durée d’appel

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

Exemple de sortie :

requête de durée d’appel

Centiles de durée d’appel

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

Exemple de sortie :

requête de centiles de durée d’appel

Requêtes sur les informations sur le point de terminaison

Nombre de points de terminaison par appel

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

Exemple de sortie :

requête de points de terminaison par appel

Ratio des versions du 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"

Exemple de sortie :

Graphique à secteurs présentant le ratio des versions du SDK.Tableau répertoriant les versions du SDK

Ratio des versions de système d’exploitation (nom simplifié du système d’exploitation)

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

Exemple de sortie :

Graphique à secteurs illustrant les ratios du système d’exploitationTableau répertoriant les versions de système d’exploitation

Requêtes de flux de média

Flux par appel

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

Exemple de sortie :

requête de flux par appel

Histogramme de flux par appel

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

histogramme de flux par appel

Ratio des types de médias

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

Graphique à secteurs illustrant les ratios de type de médias

Requêtes sur les mesures de qualité

Moyenne des valeurs de télémétrie

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

moyenne des valeurs de télémétrie

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

histogramme de gigue moyenne

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

histogramme de gigue maximale

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

histogramme de moyenne de perte de paquets

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

histogramme max de perte de paquets

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

histogramme RTT moyen

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

histogramme RTT max

Mauvaise qualité de la gigue

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

qualité de gigue

Qualité 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"

qualité du taux de perte de paquets

Qualité 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"

qualité RTT

Requêtes paramétrables

Appels quotidiens de la dernière semaine

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

appels quotidiens de la dernière semaine

Appels par heure au cours du dernier jour

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

appels par heure au cours du dernier jour