Bagikan melalui


Log panggilan kueri

Gambaran umum dan akses

Sebelum Anda dapat memanfaatkan Log Analytics untuk log Layanan Komunikasi, Anda harus terlebih dahulu mengikuti langkah-langkah yang diuraikan dalam Mengaktifkan pencatatan di Pengaturan Diagnostik. Setelah mengaktifkan log dan Ruang Kerja Analitik Log, Anda akan memiliki akses ke banyak paket kueri default bermanfaat yang akan membantu Anda dengan cepat memvisualisasikan dan memahami data yang tersedia di log Anda, yang dijelaskan di bawah ini. Melalui Analitik Log, Anda juga mendapatkan akses ke lebih banyak Communications Services Insights melalui Buku Kerja Azure Monitor, kemampuan untuk membuat kueri dan Buku Kerja kami sendiri, gambaran umum API Analitik Log ke kueri apa pun.

Access

Anda dapat mengakses kueri dengan memulai halaman sumber daya Layanan Komunikasi, lalu mengeklik "Log" di navigasi kiri dalam bagian Monitor:

Log Analytics navigation

Dari sana, Anda disajikan dengan layar modal yang berisi semua paket kueri default yang tersedia untuk Communications Services Anda, dengan daftar Paket Kueri yang tersedia untuk menavigasi ke sebelah kiri.

log analytics queries modal

Jika Anda menutup layar modal, Anda masih dapat menavigasi ke berbagai paket kueri, langsung mengakses data dalam bentuk tabel berdasarkan skema log dan metrik yang telah Anda aktifkan di Pengaturan Diagnostik Anda. Di sini, Anda dapat membuat kueri Anda sendiri dari data menggunakan KQL (Kusto). Pelajari selengkapnya tentang menggunakan, mengedit, dan membuat kueri dengan membaca selengkapnya tentang: Kueri Log Analytics

Log Analytics queries in resource

Log Analytics tables in resource

Paket kueri default untuk log ringkasan panggilan dan diagnostik panggilan

Berikut adalah deskripsi dari setiap kueri dalam paket kueri default, untuk log Ringkasan Panggilan dan Diagnostik Panggilan termasuk sampel kode dan output contoh untuk setiap kueri yang tersedia:

Kueri Gambaran Umum Panggilan

Jumlah peserta per panggilan

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

Contoh output:

call overview query

Jumlah peserta per panggilan grup

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

Contoh output:

participants per group call query

Rasio jenis panggilan

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

Contoh output:

ratio of call type query

Distribusi durasi panggilan

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

Contoh output:

call duration query

Persentil durasi panggilan

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

Contoh output:

call duration percentile query

Kueri informasi titik akhir

Jumlah titik akhir per panggilan

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

Contoh output:

endpoints per call query

Rasio versi 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"

Contoh output:

Pie chart showing the ratio of SDK Versions.Table showing SDK Versions

Rasio versi OS (nama OS yang disederhanakan)

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

Contoh output:

Pie chart showing operating system ratiosTable showing OS Versions

Kueri aliran media

Aliran per panggilan

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

Contoh output:

streams per call query

Histogram aliran per panggilan

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

streams per call histogram

Rasio jenis media

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

pie chart showing media type ratios

Kueri metrik kualitas

Nilai telemetri rata-rata

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

average telemetry values

Histogram 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 average histogram

Histogram 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 histogram

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

packet loss average histogram

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

packet loss max histogram

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 average histogram

Histogram 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

Kualitas Jitter yang Buruk

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

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

packet loss rate quality

Kualitas 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 quality

Kueri yang dapat diparameterisasi

Panggilan harian seminggu lalu

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

daily calls last week

Panggilan per jam kemarin

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

calls per hour last day