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
descmenghasilkan pengurutan menurun dan urutanascmenghasilkan 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
bymemiliki 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
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
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
Cukup tambahkan istilah render ke contoh sebelumnya: | render timechart.
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
Saat ini, render tidak memberi label durasi dengan benar, tetapi kita dapat menggunakan | render columnchart sebagai gantinya:
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
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
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
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
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
Atau, Anda dapat menggunakan | render columnchart:
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:
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
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
- Lihat sampel kode untuk Bahasa Kueri Kusto.
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'
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
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
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
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
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
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)
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
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
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
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
Langkah berikutnya
- Lihat sampel kode untuk Bahasa Kueri Kusto.











