Tutorial: Menggunakan kueri Kusto

Cara terbaik untuk belajar tentang Bahasa Kueri Kusto adalah dengan melihat beberapa kueri dasar untuk memahami "nuansa" bahasa tersebut. Sebaiknya gunakan database dengan beberapa data sampel. Kueri yang ditunjukkan dalam tutorial ini harus berjalan pada database itu. Tabel StormEvents dalam database sampel memberikan beberapa informasi tentang badai yang terjadi di Amerika Serikat.

Menghitung baris

Database contoh kita memiliki tabel yang disebut StormEvents. kita ingin tahu seberapa besar tabel ini. Jadi, kita akan menyalurkan kontennya ke operator yang menghitung baris dalam tabel.

Catatan sintaks: Kueri adalah sumber data (biasanya nama tabel), secara opsional diikuti oleh satu atau beberapa pasangan karakter pipa dan sejumlah operator tabular.

StormEvents | count

Berikut adalah output-nya:

Count
59066

Untuk informasi selengkapnya, lihat operator count.

Memilih subset kolom: project

Gunakan project untuk memilih hanya kolom yang Anda inginkan. Lihat contoh berikut, yang menggunakan operator project dan take.

Memfilter dengan ungkapan Boolean: where

Mari kita lihat hanya peristiwa flood di California Feb-2007:

StormEvents
| where StartTime > datetime(2007-02-01) and StartTime < datetime(2007-03-01)
| where EventType == 'Flood' and State == 'CALIFORNIA'
| project StartTime, EndTime , State , EventType , EpisodeNarrative

Berikut adalah output-nya:

Waktu mulai Akhir waktu Provinsi EventType EpisodeNarrative
2007-02-19 00:00:00.0000000 2007-02-19 08:00:00.0000000 CALIFORNIA Banjir Sebuah perenggan yang bergerak melintasi Southern San Joaquin Valley membawa periode singkat hujan lebat ke barat Kern County pada dini hari tanggal 19. Banjir kecil dilaporkan terjadi di State Highway 166 dekat Taft.

Menampilkan n baris: take

Mari kita lihat beberapa data. Apa yang ada dalam sampel acak lima baris?

StormEvents
| take 5
| project  StartTime, EndTime, EventType, State, EventNarrative  

Berikut adalah output-nya:

Waktu mulai Akhir waktu EventType Provinsi EventNarrative
2007-09-18 20:00:00.0000000 2007-09-19 18:00:00.0000000 Hujan Lebat FLORIDA Curah hujan sebanyak 228,6 mm turun dalam periode 24 jam di seluruh bagian pesisir Volusia County.
2007-09-20 21:57:00.0000000 2007-09-20 22:05:00.0000000 Tornado FLORIDA Tornado mendarat di Town of Eustis di ujung utara West Crooked Lake. Tornado dengan cepat meningkat ke skala EF1 saat bergerak ke utara barat laut melalui Eustis. Jejaknya hampir tiga koma dua kilometer dan memiliki lebar maksimum 274,3 meter. Tornado ini menghancurkan 7 rumah. Dua puluh tujuh rumah mengalami kerusakan besar dan 81 rumah melaporkan kerusakan ringan. Tidak ada cedera serius dan kerusakan properti ditaksir sebesar $ 6,2 juta.
2007-09-29 08:11:00.0000000 2007-09-29 08:11:00.0000000 Sengkayan ATLANTIC SOUTH Sebuah sengkayan terbentuk di Atlantik tenggara Melbourne Beach dan sementara bergerak menuju pantai.
2007-12-20 07:50:00.0000000 2007-12-20 07:53:00.0000000 Angin Badai Petir MISSISSIPPI Banyak pohon besar tumbang yang disertai beberapa tiang saluran listrik. Kerusakan terjadi di wilayah Adams timur.
2007-12-30 16:00:00.0000000 2007-12-30 16:05:00.0000000 Angin Badai Petir GEORGIA Wilayah ini melaporkan beberapa pohon tumbang di sepanjang Quincey Batten Loop dekat State Road 206. Biaya pemindahan pohon diperkirakan.

Namun, take menunjukkan baris dari tabel tanpa urutan tertentu, jadi mari kita urutkan. (limit adalah alias untuk take dan memiliki efek yang sama.)

Mengurutkan hasil: sort, top

  • Catatan sintaks: Beberapa operator memiliki parameter yang diperkenalkan oleh kata kunci seperti by.
  • Dalam contoh berikut, urutan desc menghasilkan pengurutan menurun dan urutan asc menghasilkan pengurutan menaik.

Tunjukkan kepada saya n baris pertama, yang diurutkan oleh kolom tertentu:

StormEvents
| top 5 by StartTime desc
| project  StartTime, EndTime, EventType, State, EventNarrative  

Berikut adalah output-nya:

Waktu mulai Akhir waktu EventType Provinsi EventNarrative
2007-12-31 22:30:00.0000000 2007-12-31 23:59:00.0000000 Badai Musim Dingin MICHIGAN Peristiwa salju tebal ini berlanjut hingga dini hari pada Hari Tahun Baru.
2007-12-31 22:30:00.0000000 2007-12-31 23:59:00.0000000 Badai Musim Dingin MICHIGAN Peristiwa salju tebal ini berlanjut hingga dini hari pada Hari Tahun Baru.
2007-12-31 22:30:00.0000000 2007-12-31 23:59:00.0000000 Badai Musim Dingin MICHIGAN Peristiwa salju tebal ini berlanjut hingga dini hari pada Hari Tahun Baru.
2007-12-31 23:53:00.0000000 2007-12-31 23:53:00.0000000 Angin Kencang CALIFORNIA Angin dari utara ke timur laut yang bertiup dengan kecepatan hingga sekitar 93,3 km/j dilaporkan terjadi di pegunungan wilayah Ventura.
2007-12-31 23:53:00.0000000 2007-12-31 23:53:00.0000000 Angin Kencang CALIFORNIA Sensor Warm Springs RAWS melaporkan angin utara bertiup dengan kecepatan hingga 93,3 km/j.

Anda bisa mendapatkan hasil yang sama dengan menggunakan sort, lalu take:

StormEvents
| sort by StartTime desc
| take 5
| project  StartTime, EndTime, EventType, EventNarrative

Menghitung kolom turunan: extend

Buat kolom baru dengan menghitung nilai di setiap baris:

StormEvents
| limit 5
| extend Duration = EndTime - StartTime 
| project StartTime, EndTime, Duration, EventType, State

Berikut adalah output-nya:

Waktu mulai Akhir waktu Durasi EventType Provinsi
2007-09-18 20:00:00.0000000 2007-09-19 18:00:00.0000000 22:00:00 Hujan Lebat FLORIDA
2007-09-20 21:57:00.0000000 2007-09-20 22:05:00.0000000 00:08:00 Tornado FLORIDA
2007-09-29 08:11:00.0000000 2007-09-29 08:11:00.0000000 00:00:00 Sengkayan ATLANTIC SOUTH
2007-12-20 07:50:00.0000000 2007-12-20 07:53:00.0000000 00:03:00 Angin Badai Petir MISSISSIPPI
2007-12-30 16:00:00.0000000 2007-12-30 16:05:00.0000000 00:05:00 Angin Badai Petir GEORGIA

Anda dapat menggunakan kembali nama kolom dan menetapkan hasil perhitungan ke kolom yang sama.

Contoh:

print x=1
| extend x = x + 1, y = x
| extend x = x + 1

Berikut adalah output-nya:

x y
3 1

Ekspresi skalar dapat mencakup semua operator biasa (+, -, *, /, %), dan berbagai fungsi yang berguna tersedia.

Mengagregasi grup baris: summarize

Hitung jumlah peristiwa yang terjadi di setiap negara bagian:

StormEvents
| summarize event_count = count() by State

summarize mengelompokkan bersama baris yang memiliki nilai sama dalam klausa by, lalu menggunakan fungsi agregasi (misalnya grupcount) untuk menggabungkan setiap grup dalam satu baris. Dalam hal ini, ada baris untuk setiap negara bagian dan kolom untuk jumlah baris dalam negara bagian tersebut.

Berbagai fungsi agregasi tersedia. Anda dapat menggunakan beberapa fungsi agregasi dalam satu operator summarize untuk menghasilkan beberapa kolom yang dihitung. Misalnya, kita bisa mendapatkan jumlah badai per negara bagian, dan jumlah jenis badai unik per negara bagian. Kemudian, kita bisa menggunakan top untuk mendapatkan negara yang paling terkena dampak badai:

StormEvents 
| summarize StormCount = count(), TypeOfStorms = dcount(EventType) by State
| top 5 by StormCount desc

Berikut adalah output-nya:

Provinsi StormCount TypeOfStorms
TEXAS 4701 27
KANSAS 3166 21
IOWA 2337 19
ILLINOIS 2022 23
MISSOURI 2016 20

Dalam hasil operator summarize:

  • Setiap kolom diberi nama dalam by.
  • Setiap ekspresi yang dihitung memiliki kolom.
  • Setiap kombinasi nilai by memiliki baris.

Meringkas dengan nilai skalar

Anda dapat menggunakan nilai skalar (numerik, waktu, atau interval) dalam klausa by, tetapi Anda ingin memasukkan nilai ke bin dengan menggunakan fungsi bin():

StormEvents
| where StartTime > datetime(2007-02-14) and StartTime < datetime(2007-02-21)
| summarize event_count = count() by bin(StartTime, 1d)

Kueri mengurangi semua stempel waktu ke interval satu hari:

StartTime event_count
2007-02-14 00:00:00.0000000 180
2007-02-15 00:00:00.0000000 66
2007-02-16 00:00:00.0000000 164
2007-02-17 00:00:00.0000000 103
2007-02-18 00:00:00.0000000 22
2007-02-19 00:00:00.0000000 52
2007-02-20 00:00:00.0000000 60

Bin() sama dengan fungsi floor() dalam banyak bahasa. Ini hanya mengurangi setiap nilai ke kelipatan modulus terdekat yang Anda berikan, sehingga summarize dapat menetapkan baris ke grup.

Menampilkan bagan atau tabel: render

Anda dapat memproyeksikan dua kolom dan menggunakannya sebagai sumbu x dan sumbu y bagan:

StormEvents 
| summarize event_count=count(), mid = avg(BeginLat) by State 
| sort by mid
| where event_count > 1800
| project State, event_count
| render columnchart

Screenshot that shows a column chart of storm event counts by state.

Meskipun menghapus mid dalam operasi project, kita masih membutuhkannya jika ingin bagan menampilkan negara bagian dalam urutan tersebut.

Sebenarnya, render adalah fitur klien dan bukan bagian dari bahasa kueri. Namun, ini terintegrasi ke dalam bahasa, dan berguna untuk membayangkan hasil Anda.

Timecharts

Kembali ke bin numerik, mari kita tampilkan rangkaian waktu:

StormEvents
| summarize event_count=count() by bin(StartTime, 1d)
| render timechart

Screenshot of a line chart of events binned by time.

Beberapa rangkaian

Gunakan beberapa nilai dalam klausa summarize by untuk membuat baris terpisah untuk setiap kombinasi nilai:

StormEvents 
| where StartTime > datetime(2007-06-04) and StartTime < datetime(2007-06-10) 
| where Source in ("Source","Public","Emergency Manager","Trained Spotter","Law Enforcement")
| summarize count() by bin(StartTime, 10h), Source

Screenshot that shows a table count by source.

Cukup tambahkan istilah render ke contoh sebelumnya: | render timechart.

Screenshot that shows a line chart count by source.

Perhatikan bahwa render timechart menggunakan kolom pertama sebagai sumbu x, lalu menampilkan kolom lain sebagai garis yang terpisah.

Siklus rata-rata harian

Bagaimana aktivitas bervariasi selama hari rata-rata?

Hitung peristiwa dengan modulo waktu satu hari, yang di-bin menjadi jam. Di sini, kita menggunakan floor sebagai ganti bin:

StormEvents
| extend hour = floor(StartTime % 1d , 1h)
| summarize event_count=count() by hour
| sort by hour asc
| render timechart

Screenshot that shows a timechart count by hour.

Saat ini, render tidak memberi label durasi dengan benar, tetapi kita dapat menggunakan | render columnchart sebagai gantinya:

Screenshot that shows a column chart count by hour.

Membandingkan beberapa rangkaian harian

Bagaimana aktivitas bervariasi dari waktu ke waktu di berbagai negara bagian?

StormEvents
| extend hour= floor( StartTime % 1d , 1h)
| where State in ("GULF OF MEXICO","MAINE","VIRGINIA","WISCONSIN","NORTH DAKOTA","NEW JERSEY","OREGON")
| summarize event_count=count() by hour, State
| render timechart

Screenshot of a timechart by hour and state.

Bagilah 1h untuk mengubah sumbu x menjadi angka satu jam, bukan durasi:

StormEvents
| extend hour= floor( StartTime % 1d , 1h)/ 1h
| where State in ("GULF OF MEXICO","MAINE","VIRGINIA","WISCONSIN","NORTH DAKOTA","NEW JERSEY","OREGON")
| summarize event_count=count() by hour, State
| render columnchart

Screenshot that shows a column chart by hour and state.

Menggabungkan jenis data

Bagaimana Anda menemukan dua jenis peristiwa tertentu dan di negara bagian mana peristiwa itu terjadi?

Anda dapat menarik peristiwa badai dengan EventType pertama dan EventType kedua, lalu menggabungkan dua set pada State:

StormEvents
| where EventType == "Lightning"
| join (
    StormEvents 
    | where EventType == "Avalanche"
) on State  
| distinct State

Screenshot that shows joining the events lightning and avalanche.

Contoh sesi pengguna join

Bagian ini tidak menggunakan tabel StormEvents.

Asumsikan Anda memiliki data yang mencakup peristiwa yang menandai awal dan akhir setiap sesi pengguna dengan ID unik.

Bagaimana Anda mengetahui berapa lama setiap sesi pengguna berlangsung?

Anda dapat menggunakan extend untuk memberikan alias untuk dua stempel waktu, lalu menghitung durasi sesi:

Events
| where eventName == "session_started"
| project start_time = timestamp, stop_time, country, session_id
| join ( Events
    | where eventName == "session_ended"
    | project stop_time = timestamp, session_id
    ) on session_id
| extend duration = stop_time - start_time
| project start_time, stop_time, country, duration
| take 10

Screenshot of a table of results for user session extend.

Praktik yang baik adalah menggunakan project untuk memilih hanya kolom yang relevan sebelum Anda melakukan penggabungan. Dalam klausa yang sama, ganti nama kolom timestamp.

Membuat plot distribusi

Kembali ke tabel StormEvents, berapa banyak badai yang terjadi dengan panjang berbeda?

StormEvents
| extend  duration = EndTime - StartTime
| where duration > 0s
| where duration < 3h
| summarize event_count = count()
    by bin(duration, 5m)
| sort by duration asc
| render timechart

Screenshot of timechart results for event count by duration.

Atau, Anda dapat menggunakan | render columnchart:

Screenshot of a column chart for event count timechart by duration.

Persentil

Rentang durasi apa yang kita temukan dalam persentase badai yang berbeda?

Untuk mendapatkan informasi ini, gunakan kueri sebelumnya dari Membuat plot distribusi, tetapi ganti render dengan:

| summarize percentiles(duration, 5, 20, 50, 80, 95)

Dalam hal ini, kita tidak menggunakan klausa by, sehingga output-nya adalah satu baris:

Screenshot of a table of results for summarize percentiles by duration.

Kita bisa melihat dari output bahwa:

  • 5% badai memiliki durasi kurang dari 5 menit.
  • 50% badai berlangsung kurang dari 1 jam 25 menit.
  • 95% badai berlangsung kurang dari 2 jam 50 menit.

Untuk mendapatkan perincian terpisah bagi setiap negara bagian, gunakan kolom state secara terpisah dengan kedua operator summarize:

StormEvents
| extend  duration = EndTime - StartTime
| where duration > 0s
| where duration < 3h
| summarize event_count = count()
    by bin(duration, 5m), State
| sort by duration asc
| summarize percentiles(duration, 5, 20, 50, 80, 95) by State

Table summarize percentiles duration by state.

Persentase

Dengan menggunakan tabel StormEvents, kita dapat menghitung persentase cedera langsung dari semua cedera.

StormEvents
| where (InjuriesDirect > 0) and (InjuriesIndirect > 0) 
| extend Percentage = (  100 * InjuriesDirect / (InjuriesDirect + InjuriesIndirect) )
| project StartTime, InjuriesDirect, InjuriesIndirect, Percentage

Kueri ini menghapus entri hitungan nol:

StartTime InjuriesDirect InjuriesIndirect Persentase
2007-05-01T16:50:00Z 1 1 50
2007-08-10T21:25:00Z 7 2 77
2007-08-23T12:05:00Z 7 22 24
2007-08-23T14:20:00Z 3 2 60
2007-09-10T13:45:00Z 4 1 80
2007-12-06T08:30:00Z 3 3 50
2007-12-08T12:00:00Z 1 1 50

Menetapkan hasil ke variabel: let

Gunakan let untuk memisahkan bagian ekspresi kueri dalam contoh join sebelumnya. Hasilnya tidak berubah:

let LightningStorms = 
    StormEvents
    | where EventType == "Lightning";
let AvalancheStorms = 
    StormEvents
    | where EventType == "Avalanche";
LightningStorms 
| join (AvalancheStorms) on State
| distinct State

Tip

Di Kusto Explorer, untuk menjalankan seluruh kueri, jangan tambahkan baris kosong di antara bagian kueri. Dua pernyataan apa pun harus dipisahkan oleh titik koma.

Menggabungkan data dari beberapa database dalam kueri

Dalam kueri berikut, tabel Logs harus ada di database default Anda:

Logs | where ...

Untuk mengakses tabel dalam database yang berbeda, gunakan sintaks berikut:

database("db").Table

Misalnya, jika memiliki database bernama Diagnostics dan Telemetry serta ingin menghubungkan beberapa data dalam dua tabel, Anda dapat menggunakan kueri berikut (dengan asumsi Diagnostics adalah database default Anda):

Logs | join database("Telemetry").Metrics on Request MachineId | ...

Gunakan kueri ini jika database default Anda adalah Telemetry:

union Requests, database("Diagnostics").Logs | ...

Dua kueri sebelumnya mengasumsikan bahwa kedua database berada dalam kluster yang saat ini tersambung dengan Anda. Jika database Telemetry berada dalam kluster bernama TelemetryCluster.kusto.windows.net, untuk mengaksesnya, gunakan kueri ini:

Logs | join cluster("TelemetryCluster").database("Telemetry").Metrics on Request MachineId | ...

Catatan

Saat kluster ditentukan, database bersifat wajib.

Untuk informasi selengkapnya tentang menggabungkan data dari beberapa database dalam kueri, lihat kueri lintas database.

Langkah berikutnya

Cara terbaik untuk belajar tentang Bahasa Kueri Azure Data Explorer adalah dengan melihat beberapa kueri dasar untuk memahami "nuansa" bahasa tersebut. Kueri ini mirip dengan kueri dalam tutorial Azure Data Explorer, tetapi menggunakan data dari tabel umum di ruang kerja Azure Log Analytics.

Jalankan kueri ini menggunakan Log Analytics di portal Azure. Log Analytics adalah alat yang dapat Anda gunakan untuk menulis kueri log. Gunakan data log di Azure Monitor, lalu evaluasi hasil kueri log. Jika Anda tidak terbiasa dengan Log Analytics, selesaikan tutorial Log Analytics.

Semua kueri dalam tutorial ini menggunakan lingkungan demo Log Analytics. Anda dapat menggunakan lingkungan Anda sendiri, tetapi Anda mungkin tidak memiliki beberapa tabel yang digunakan di sini. Karena data di lingkungan demo tidak statis, hasil kueri Anda mungkin sedikit berbeda dari hasil yang ditunjukkan di sini.

Menghitung baris

Tabel InsightsMetrics berisi data performa yang dikumpulkan oleh insight seperti Azure Monitor untuk VM dan Azure Monitor untuk kontainer. Untuk mengetahui seberapa besar tabelnya, kita akan menyalurkan kontennya ke dalam operator yang menghitung baris.

Kueri adalah sumber data (biasanya nama tabel), secara opsional diikuti oleh satu atau beberapa pasang karakter pipa dan sejumlah operator tabular. Dalam hal ini, semua data dari tabel InsightsMetrics ditampilkan dan kemudian dikirim ke operator count. Operator count menampilkan hasil karena operator ini adalah perintah terakhir dalam kueri.

InsightsMetrics | count

Berikut adalah output-nya:

Count
1,263,191

Memfilter dengan ungkapan Boolean: where

Tabel AzureActivity memiliki entri dari log aktivitas Azure, yang memberikan insight tentang peristiwa tingkat langganan atau tingkat grup pengelolaan yang terjadi di Azure. Mari kita lihat hanya entri Critical selama minggu tertentu.

Operator where bersifat umum dalam Bahasa Kueri Kusto. where memfilter tabel ke baris yang cocok dengan kriteria tertentu. Contoh berikut menggunakan beberapa perintah. Pertama, kueri mengambil semua data untuk tabel. Kemudian, memfilter data hanya untuk data yang berada dalam rentang waktu. Akhirnya, kueri memfilter hasil tersebut hanya untuk data yang memiliki level Critical.

Catatan

Selain menentukan filter dalam kueri Anda menggunakan kolom TimeGenerated, Anda dapat menentukan rentang waktu di Log Analytics. Untuk informasi selengkapnya, lihat Cakupan kueri log dan rentang waktu dalam Log Analytics Azure Monitor.

AzureActivity
| where TimeGenerated > datetime(10-01-2020) and TimeGenerated < datetime(10-07-2020)
| where Level == 'Critical'

Screenshot that shows the results of the where operator example.

Memilih subset kolom: project

Gunakan project untuk menyertakan hanya kolom yang Anda inginkan. Membangun pada contoh sebelumnya, mari kita batasi output ke kolom tertentu:

AzureActivity
| where TimeGenerated > datetime(10-01-2020) and TimeGenerated < datetime(10-07-2020)
| where Level == 'Critical'
| project TimeGenerated, Level, OperationNameValue, ResourceGroup, _ResourceId

Screenshot that shows the results of the project operator example.

Menampilkan n baris: take

NetworkMonitoring berisi data pemantauan untuk jaringan virtual Azure. Mari kita gunakan operator take untuk melihat 10 baris sampel acak dalam tabel itu. take menunjukkan beberapa baris dari tabel tanpa urutan tertentu:

NetworkMonitoring
| take 10
| project TimeGenerated, Computer, SourceNetwork, DestinationNetwork, HighLatency, LowLatency

Screenshot that shows the results of the take operator example.

Mengurutkan hasil: sort, top

Kita dapat menampilkan lima data terbaru, bukan data acak, dengan mengurutkan terlebih dahulu berdasarkan waktu:

NetworkMonitoring
| sort by TimeGenerated desc
| take 5
| project TimeGenerated, Computer, SourceNetwork, DestinationNetwork, HighLatency, LowLatency

Anda bisa mendapatkan perilaku seperti ini menggunakan operator top:

NetworkMonitoring
| top 5 by TimeGenerated desc
| project TimeGenerated, Computer, SourceNetwork, DestinationNetwork, HighLatency, LowLatency

Screenshot that shows the results of the top operator example.

Menghitung kolom turunan: extend

Operator extend mirip dengan project, tetapi menambahkan ke set kolom dan bukan menggantinya. Anda dapat menggunakan kedua operator untuk membuat kolom baru berdasarkan penghitungan pada setiap baris.

Tabel Perf memiliki data performa yang dikumpulkan dari mesin virtual yang menjalankan agen Log Analytics.

Perf
| where ObjectName == "LogicalDisk" and CounterName == "Free Megabytes"
| project TimeGenerated, Computer, FreeMegabytes = CounterValue
| extend FreeGigabytes = FreeMegabytes / 1000

Screenshot that shows the results of the extend operator example.

Mengagregasi grup baris: summarize

Operator summarize mengelompokkan baris yang memiliki nilai sama dalam klausa by. Kemudian, operator ini menggunakan fungsi agregasi seperti count untuk menggabungkan setiap grup dalam satu baris. Berbagai fungsi agregasi tersedia. Anda dapat menggunakan beberapa fungsi agregasi dalam satu operator summarize untuk menghasilkan beberapa kolom yang dihitung.

Tabel SecurityEvent berisi peristiwa keamanan seperti masuk dan proses yang dimulai pada komputer yang dipantau. Anda dapat menghitung berapa banyak peristiwa dari setiap tingkat yang terjadi di setiap komputer. Dalam contoh ini, baris dihasilkan untuk setiap komputer dan kombinasi tingkat. Kolom berisi jumlah peristiwa.

SecurityEvent
| summarize count() by Computer, Level

Screenshot that shows the results of the summarize count operator example.

Meringkas dengan nilai skalar

Anda dapat mengagregasi berdasarkan nilai skalar seperti angka dan nilai waktu, tetapi Anda harus menggunakan fungsi bin() untuk mengelompokkan baris ke dalam set data yang berbeda. Misalnya, jika mengagregasi berdasarkan TimeGenerated, Anda akan mendapatkan baris untuk sebagian besar nilai waktu. Gunakan bin() untuk mengkonsolidasikan nilai per jam atau hari.

Tabel InsightsMetrics berisi data performa yang diatur berdasarkan insight seperti dari Azure Monitor untuk VM dan Azure Monitor untuk kontainer. Kueri berikut menunjukkan penggunaan prosesor rata-rata per jam untuk beberapa komputer:

InsightsMetrics
| where Computer startswith "DC"
| where Namespace  == "Processor" and Name == "UtilizationPercentage"
| summarize avg(Val) by Computer, bin(TimeGenerated, 1h)

Screenshot that shows the results of the avg operator example.

Menampilkan bagan atau tabel: render

Operator render menentukan bagaimana output kueri dirender. Log Analytics merender output sebagai tabel secara default. Anda dapat memilih jenis bagan yang berbeda setelah menjalankan kueri ini. Operator render berguna untuk menyertakan dalam kueri yang jenis bagan tertentu biasanya lebih diutamakan.

Contoh berikut menunjukkan penggunaan prosesor rata-rata per jam untuk satu komputer. Ini merender output sebagai timechart.

InsightsMetrics
| where Computer == "DC00.NA.contosohotels.com"
| where Namespace  == "Processor" and Name == "UtilizationPercentage"
| summarize avg(Val) by Computer, bin(TimeGenerated, 1h)
| render timechart

Screenshot that shows the results of the render operator example.

Bekerja dengan beberapa rangkaian

Jika Anda menggunakan beberapa nilai dalam klausa summarize by, bagan menampilkan rangkaian terpisah untuk setiap set nilai:

InsightsMetrics
| where Computer startswith "DC"
| where Namespace  == "Processor" and Name == "UtilizationPercentage"
| summarize avg(Val) by Computer, bin(TimeGenerated, 1h)
| render timechart

Screenshot that shows the results of the render operator with multiple series example.

Menggabungkan data dari dua tabel

Bagaimana jika Anda perlu mengambil data dari dua tabel dalam satu kueri? Anda dapat menggunakan operator join untuk menggabungkan baris dari beberapa tabel dalam satu set hasil. Setiap tabel harus memiliki kolom berisi nilai yang cocok sehingga gabungan memahami baris mana yang akan dicocokkan.

VMComputer adalah tabel yang digunakan Azure Monitor untuk mesin virtual guna menyimpan detail tentang mesin virtual yang dipantau. InsightsMetrics berisi data performa yang dikumpulkan dari mesin virtual tersebut. Satu nilai yang dikumpulkan di InsightsMetrics adalah memori yang tersedia, tetapi bukan persentase memori yang tersedia. Untuk menghitung persentase, kita memerlukan memori fisik untuk setiap mesin virtual. Nilai itu ada di VMComputer.

Kueri contoh berikut menggunakan gabungan untuk melakukan penghitungan ini. Operator distinct digunakan dengan VMComputer karena detail secara teratur dikumpulkan dari setiap komputer. Akibatnya, tabel berisi beberapa baris untuk setiap komputer. Kedua tabel digabungkan menggunakan kolom Computer. Baris dibuat dalam set yang dihasilkan dan mencakup kolom dari kedua tabel untuk setiap baris di InsightsMetrics, di mana nilai dalam Computer memiliki nilai yang sama di kolom Computer di VMComputer.

VMComputer
| distinct Computer, PhysicalMemoryMB
| join kind=inner (
    InsightsMetrics
    | where Namespace == "Memory" and Name == "AvailableMB"
    | project TimeGenerated, Computer, AvailableMemoryMB = Val
) on Computer
| project TimeGenerated, Computer, PercentMemory = AvailableMemoryMB / PhysicalMemoryMB * 100

Screenshot that shows the results of the join operator example.

Menetapkan hasil ke variabel: let

Gunakan let agar kueri lebih mudah dibaca dan dikelola. Anda dapat menggunakan operator ini untuk menetapkan hasil kueri ke variabel yang dapat Anda gunakan nanti. Dengan pernyataan let, kueri dalam contoh sebelumnya dapat ditulis ulang sebagai:

let PhysicalComputer = VMComputer
    | distinct Computer, PhysicalMemoryMB;
let AvailableMemory = InsightsMetrics
    | where Namespace == "Memory" and Name == "AvailableMB"
    | project TimeGenerated, Computer, AvailableMemoryMB = Val;
PhysicalComputer
| join kind=inner (AvailableMemory) on Computer
| project TimeGenerated, Computer, PercentMemory = AvailableMemoryMB / PhysicalMemoryMB * 100

Screenshot that shows the results of the let operator example.

Langkah berikutnya