Mulai menggunakan kueri log di Azure Monitor

Catatan

Jika Anda mengumpulkan data dari setidaknya satu komputer virtual, Anda dapat mengerjakan latihan ini di lingkungan sendiri. Untuk skenario lainnya, gunakan Lingkungan demokami, yang mencakup banyak data sampel.

Jika Anda sudah tahu cara mengkueri dalam bahasa Kueri Kusto, tetapi perlu membuat kueri yang berguna dengan cepat berdasarkan jenis sumber daya, lihat panel kueri contoh yang disimpan di artikel Menggunakan kueri di Azure Monitor Log Analytics.

Dalam tutorial ini Anda akan belajar menulis kueri log di Azure Monitor. Artikel ini menunjukkan kepada Anda cara:

  • Memahami struktur kueri.
  • Mengurutkan hasil kueri.
  • Memfilter hasil kueri.
  • Menentukan rentang waktu.
  • Memilih bidang mana yang akan disertakan dalam hasil.
  • Menentukan dan menggunakan bidang kustom.
  • Mengagregasi dan mengelompokkan hasil.

Untuk tutorial tentang penggunaan Analitik Log di portal Microsoft Azure, lihat Mulai menggunakan Analitik Log Azure Monitor.

Untuk informasi selengkapnya tentang kueri log di Azure Monitor, lihat Ringkasan kueri log di Azure Monitor.

Berikut versi video dari tutorialnya:

Menulis kueri baru

Kueri bisa dimulai dengan nama tabel atau perintah pencarian. Anda sebaiknya mulai dengan nama tabel, karena menentukan lingkup yang jelas untuk kueri dan meningkatkan performa kueri dan relevansi hasil.

Catatan

Bahasa kueri Kusto yang digunakan Azure Monitor peka huruf besar/kecil. Kata kunci bahasa biasanya ditulis dalam huruf kecil. Saat menggunakan nama tabel atau kolom dalam kueri, pastikan untuk menggunakan huruf yang benar, seperti yang diperlihatkan pada panel skema.

Kueri berbasis tabel

Azure Monitor menyusun data log dalam tabel, masing-masing terdiri dari beberapa kolom. Semua tabel dan kolom ditampilkan di panel skema di Analitik Log di portal Analytics. Identifikasi tabel yang Anda minati lalu lihat sedikit data:

SecurityEvent
| take 10

Kueri yang diperlihatkan di atas menampilkan 10 hasil dari tabel SecurityEvent, tanpa urutan tertentu. Ini adalah cara yang sangat umum untuk melihat tabel dan memahami struktur dan kontennya. Mari kita periksa cara pembangunannya:

  • Kueri dimulai dengan nama tabel SecurityEvent, yang menentukan lingkup kueri.
  • Karakter pipa (|) memisahkan perintah, sehingga output dari perintah pertama merupakan input berikutnya. Anda dapat menambahkan sejumlah elemen pipa.
  • Mengikuti pipa adalah perintah ambil, yang mengembalikan sejumlah catatan arbitrer tertentu dari tabel.

Kita benar-benar bisa menjalankan kueri bahkan tanpa menambahkan | take 10. Perintah akan tetap valid, tetapi dapat menampilkan hingga 10.000 hasil.

Kueri penelusuran

Kueri penelusuran kurang terstruktur, dan umumnya lebih sesuai untuk menemukan baris yang menyertakan nilai tertentu di salah satu kolomnya:

search in (SecurityEvent) "Cryptographic"
| take 10

Kueri ini menelusuri tabel SecurityEvent untuk baris yang berisi frasa "Kriptografi". Dari baris tersebut, 10 baris akan dikembalikan dan ditampilkan. Jika kita menghilangkan bagian in (SecurityEvent) dan hanya menjalankan search "Cryptographic", penelusuran akan menuju ke semua tabel, yang akan memakan waktu lebih lama dan kurang efisien.

Penting

Kueri pencarian biasanya lebih lambat daripada kueri berbasis tabel karena harus memproses lebih banyak data.

Mengurutkan dan teratas

Meskipun ambil berguna untuk mendapatkan beberapa baris, hasilnya dipilih dan ditampilkan tanpa urutan tertentu. Untuk mendapatkan tampilan yang berurutan, Anda dapat mengurutkan berdasarkan kolom pilihan:

SecurityEvent	
| sort by TimeGenerated desc

Hal itu dapat menampilkan terlalu banyak hasil dan mungkin juga memakan waktu. Kueri di atas mengurutkan seluruh tabel SecurityEvent berdasarkan kolom TimeGenerated. Portal Analitik kemudian membatasi tampilan hingga 10.000 baris saja. Pendekatan ini tentu saja tidak optimal.

Cara terbaik untuk hanya mendapatkan 10 baris terbaru adalah dengan menggunakan teratas, yang mengurutkan seluruh tabel di sisi server lalu mengembalikan baris teratas:

SecurityEvent
| top 10 by TimeGenerated

Urutan menurun adalah urutan sortir default, jadi kami biasanya menghilangkan argumen desc. Keluarannya terlihat seperti:

Screenshot of the top 10 records, sorted in descending order.

Di mana operator: pemfilteran pada suatu kondisi

Filter, seperti namanya, memfilter data dengan kondisi tertentu. Ini adalah cara yang paling umum untuk membatasi hasil kueri ke informasi yang relevan.

Untuk menambahkan filter ke kueri, gunakan operator di mana yang diikuti oleh satu atau beberapa kondisi. Misalnya, kueri berikut hanya mengembalikan baris SecurityEvent di mana Tingkat sama dengan 8:

SecurityEvent
| where Level == 8

Saat menulis kondisi filter, Anda dapat menggunakan ekspresi berikut:

Ekspresi Deskripsi Contoh
== Periksa kesetaraan
(peka huruf besar/kecil)
Level == 8
=~ Periksa kesetaraan
(tidak sensitif huruf besar/kecil)
EventSourceName =~ "microsoft-windows-security-auditing"
!=, <> Periksa ketidaksetaraan
(kedua ekspresi identik)
Level != 4
dan, atau Diperlukan di antara kondisi Level == 16 or CommandLine != ""

Untuk memfilter berdasarkan beberapa kondisi, Anda dapat menggunakan salah satu dari pendekatan berikut:

Gunakan dan, seperti yang ditunjukkan di sini:

SecurityEvent
| where Level == 8 and EventID == 4672

Alur beberapa elemen di mana,satu demi satu, seperti yang ditunjukkan di sini:

SecurityEvent
| where Level == 8 
| where EventID == 4672

Catatan

Nilai dapat memiliki jenis yang berbeda, jadi Anda mungkin perlu mentransmisikan untuk melakukan perbandingan pada jenis yang benar. Misalnya, kolom Tingkat SecurityEvent berjenis String, jadi Anda harus mentransmisikan ke jenis numerik seperti int atau long, sebelum Anda dapat menggunakan operator numerik di dalamnya, seperti yang ditunjukkan di sini: SecurityEvent | where toint(Level) >= 10

Menentukan rentang waktu

Gunakan pemetik waktu

Pemilih waktu ditampilkan di samping tombol Jalankan dan menunjukkan bahwa kita hanya mengkueri baris dari 24 jam terakhir. Ini adalah rentang waktu default yang diterapkan ke semua kueri. Untuk mendapatkan baris hanya dari jam terakhir, pilih Jam terakhir dan jalankan kueri lagi.

Screenshot of the time picker and its list of time-range commands.

Menambahkan filter waktu ke kueri

Anda juga bisa menentukan rentang waktu sendiri dengan menambahkan filter waktu ke kueri. Sebaiknya tempatkan filter waktu segera setelah nama tabel:

SecurityEvent
| where TimeGenerated > ago(30m) 
| where toint(Level) >= 10

Dalam filter waktu sebelumnya, ago(30m) berarti "30 menit yang lalu," yang berarti bahwa kueri ini menampilkan baris hanya dari 30 menit terakhir (misalnya dinyatakan sebagai 30m). Satuan waktu lainnya termasuk hari (misalnya 2h) dan detik (misalnya 10d).

Menggunakan proyek dan perluas untuk memilih dan mengomputasi kolom

Gunakan proyek guna memilih kolom tertentu untuk disertakan dalam hasil:

SecurityEvent 
| top 10 by TimeGenerated 
| project TimeGenerated, Computer, Activity

Contoh sebelumnya menghasilkan output berikut:

Screenshot of the query

Anda juga dapat menggunakan proyek untuk mengganti nama kolom dan menentukan kolom baru. Contoh berikut menggunakan proyek untuk melakukan hal berikut:

  • Pilih hanya kolom asli Komputer dan TimeGenerated.
  • Menampilkan kolom Aktivitas sebagai EventDetails.
  • Buat kolom baru bernama EventCode. Fungsi substring() digunakan untuk mendapatkan hanya empat karakter pertama dari bidang Aktivitas.
SecurityEvent
| top 10 by TimeGenerated 
| project Computer, TimeGenerated, EventDetails=Activity, EventCode=substring(Activity, 0, 4)

Anda dapat menggunakan perluas untuk menyimpan semua kolom asli dalam tataan hasil dan menentukan kolom tambahan. Kueri berikut menggunakan perluas untuk menambahkan kolom EventCode. Perhatikan bahwa kolom ini mungkin tidak ditampilkan di akhir tabel hasil, sehingga Anda harus memperluas detail catatan untuk menampilkannya.

SecurityEvent
| top 10 by TimeGenerated
| extend EventCode=substring(Activity, 0, 4)

Menggunakan ringkasan untuk mengagregasi grup baris

Gunakan ringkas untuk mengidentifikasi grup baris, berdasarkan satu atau beberapa kolom, dan menerapkan agregasi ke dalamnya. Penggunaan yang paling umum dari ringkas adalah hitung, yang mengembalikan jumlah hasil di setiap grup.

Kueri berikut ini meninjau semua baris Perf dari satu jam terakhir, mengelompokkannya menurut ObjectName, dan menghitung baris di setiap grup:

Perf
| where TimeGenerated > ago(1h)
| summarize count() by ObjectName

Terkadang memungkinkan untuk menentukan grup dengan beberapa dimensi. Setiap kombinasi unik dari nilai-nilai ini menentukan grup terpisah:

Perf
| where TimeGenerated > ago(1h)
| summarize count() by ObjectName, CounterName

Penggunaan umum lainnya adalah untuk melakukan perhitungan matematis atau statistik di setiap kelompok. Contoh berikut ini menghitung rata-rata CounterValue untuk setiap komputer:

Perf
| where TimeGenerated > ago(1h)
| summarize avg(CounterValue) by Computer

Sayangnya, hasil kueri ini tidak ada artinya karena kita mencampurkan penghitung kinerja yang berbeda. Untuk membuatnya lebih berarti, kita harus menghitung rata-rata secara terpisah untuk setiap kombinasi CounterName dan Komputer:

Perf
| where TimeGenerated > ago(1h)
| summarize avg(CounterValue) by Computer, CounterName

Ringkas menurut kolom waktu

Hasil pengelompokan juga dapat didasarkan pada kolom waktu, atau nilai berkelanjutan lainnya. Namun, hanya meringkas by TimeGenerated akan membuat grup untuk setiap milidetik selama rentang waktu, karena ini adalah nilai yang unik.

Untuk membuat grup berdasarkan nilai berkelanjutan, sebaiknya memutus rentang menjadi unit yang dapat dikelola menggunakan bin. Kueri berikut menganalisis baris Perf yang mengukur memori bebas (MByte yang Tersedia) pada komputer tertentu. Langkah ini menghitung nilai rata-rata setiap periode 1 jam selama 7 hari terakhir:

Perf 
| where TimeGenerated > ago(7d)
| where Computer == "ContosoAzADDS2" 
| where CounterName == "Available MBytes" 
| summarize avg(CounterValue) by bin(TimeGenerated, 1h)

Untuk membuat output lebih jelas, Anda dapat memilih untuk menampilkannya sebagai bagan waktu, memperlihatkan memori yang tersedia dari waktu ke waktu:

Screenshot displaying the values of a query memory over time.

Langkah berikutnya