Abfragen von Anrufprotokollen

Übersicht und Zugriff

Bevor Sie die Vorteile von Log Analytics für Ihre Kommunikationsdienstprotokolle nutzen können, müssen Sie zunächst die unter Protokollierung in den Diagnoseeinstellungen aktivieren beschriebenen Schritte durchführen. Sobald Sie Ihre Protokolle und einen Log-Analytics-Arbeitsbereich aktiviert haben, haben Sie Zugang zu vielen hilfreichen Standardabfragepaketen, die Ihnen helfen, die in Ihren Protokollen verfügbaren Daten schnell zu visualisieren und zu verstehen, die im Folgenden beschrieben werden. Über Log Analytics erhalten Sie auch Zugriff auf weitere Communications Services Insights über Azure Monitor Workbooks, die Möglichkeit, eigene Abfragen und Workbooks, Log Analytics-API-Übersicht zu jeder Abfrage zu erstellen.

Access

Sie können auf die Abfragen zugreifen, indem Sie auf Ihrer Ressourcenseite für Kommunikationsdienste beginnen und dann in der linken Navigation im Abschnitt Monitor auf "Logs" klicken:

Log Analytics Navigation

Von dort aus wird ein modaler Bildschirm angezeigt, der alle Standardabfragepakete enthält, die für Ihre Kommunikationsdienste verfügbar sind, mit einer Liste von Abfragepaketen zur Navigation auf der linken Seite.

log analytics abfragen modal

Wenn Sie den modalen Bildschirm schließen, können Sie weiterhin zu den verschiedenen Abfragepaketen navigieren und direkt auf Daten in Form von Tabellen zugreifen, die auf dem Schema der Protokolle und Metriken basieren, die Sie in Ihren Diagnoseeinstellungen aktiviert haben. Hier können Sie mit KQL (Kusto) Ihre eigenen Abfragen aus den Daten erstellen. Erfahren Sie mehr über die Verwendung, Bearbeitung und Erstellung von Abfragen, indem Sie mehr darüber lesen: Log Analytics-Abfragen

Log Analytics-Anfragen in Ressource

Log Analytics-Tabellen in Ressource

Standardabfragepakete für Anrufzusammenfassung und Anrufdiagnoseprotokolle

Nachfolgend finden Sie Beschreibungen der einzelnen Abfragen im Standardabfragepaket, für die Aufrufzusammenfassung und die Anrufdiagnoseprotokolle, einschließlich Codebeispielen und Beispielausgaben für jede verfügbare Abfrage:

Übersichtsabfragen aufrufen

Anzahl der Teilnehmer pro Anruf

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

Beispielausgabe:

Aufruf der Übersichtsabfrage

Anzahl der Teilnehmer pro Gruppengespräch

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

Beispielausgabe:

Teilnehmer pro Gruppenrufabfrage

Verhältnis der Anrufarten

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

Beispielausgabe:

Anteil der Abrufart Abfrage

Verteilung der Anrufdauer

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

Beispielausgabe:

Abfrage der Gesprächsdauer

Perzentile der Anrufdauer

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

Beispielausgabe:

Anrufdauer Perzentilabfrage

Abfragen von Endpunktinformationen

Anzahl der Endpunkte pro Anruf

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

Beispielausgabe:

Endpunkte pro Anruf Abfrage

Verhältnis der SDK-Versionen

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

Beispielausgabe:

Kuchendiagramm zur Darstellung des Verhältnisses der SDK-Versionen.Tabelle mit SDK-Versionen

Verhältnis der OS-Versionen (vereinfachter OS-Name)

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

Beispielausgabe:

Kuchendiagramm mit den Verhältnissen der BetriebssystemeTabelle mit Betriebssystemversionen

Medienstrom-Abfragen

Ströme pro Anruf

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

Beispielausgabe:

Streams pro Anruf Abfrage

Histogramm der Datenströme pro Anruf

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

Histogramm der Datenströme pro Anruf

Verhältnis der Medientypen

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

Kuchendiagramm mit Verhältnissen der Medientypen

Abfragen von Qualitätsmetriken

Durchschnittliche Telemetriewerte

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

Durchschnittliche Telemetriewerte

JitterAvg-Histogramm

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

JitterMax-Histogramm

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

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

Histogramm der durchschnittlichen Paketverluste

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

Paketverlust-Max-Histogramm

RoundTripTimeAvg-Histogramm

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

Histogramm 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 max histogram

Schlechte Jitter-Qualität

// 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-Qualität

PacketLossRate Qualität

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

Paketverlustrate Qualität

RoundTripTime-Qualität

// 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-Qualität

Parametrisierbare Abfragen

Tägliche Anrufe in der letzten Woche

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

Tägliche Anrufe letzte Woche

Anrufe pro Stunde am letzten Tag

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

Anrufe pro Stunde am letzten Tag