Bagikan melalui


Mulai menggunakan kueri log di Log Azure Monitor

Artikel ini menjelaskan dasar-dasar penulisan kueri log di Log Azure Monitor, termasuk cara:

Jika berlaku, artikel ini menyediakan contoh kueri data menggunakan mode sederhana Bahasa Kueri Kusto (KQL) dan Analitik Log.

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.

Video tutorial

Catatan

Video ini menunjukkan versi antarmuka pengguna yang lebih lama, tetapi cuplikan layar di seluruh artikel ini sudah diperbarui dan mencerminkan UI saat ini.


Izin yang diperlukan

Anda harus memiliki Microsoft.OperationalInsights/workspaces/query/*/read izin ke ruang kerja Analitik Log yang Anda kueri, seperti yang disediakan oleh peran bawaan Pembaca Analitik Log, misalnya.

Menyusun kueri

Kueri dapat dimulai dengan nama tabel atau search perintah. Sebaiknya mulai dengan nama tabel karena menentukan cakupan yang jelas untuk kueri. Ini juga meningkatkan performa kueri dan relevansi hasilnya.

Catatan

KQL, yang digunakan oleh 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 Azure.

Identifikasi tabel yang Anda minati, lalu lihat sedikit data:

SecurityEvent
| take 10

Kueri sebelumnya mengembalikan 10 hasil dari SecurityEvent tabel, tanpa urutan tertentu. Cara umum ini untuk melihat sekilas tabel membantu Anda memahami struktur dan kontennya. Mari kita periksa cara pembangunannya:

  • Kueri dimulai dengan nama SecurityEventtabel , yang menentukan cakupan kueri.
  • Karakter pipa (|) memisahkan perintah, sehingga output dari perintah pertama merupakan input berikutnya. Anda dapat menambahkan sejumlah elemen pipa.
  • Mengikuti pipa adalah take operator. Kita dapat menjalankan kueri bahkan tanpa menambahkan | take 10. Perintah masih akan valid, tetapi dapat mengembalikan hingga 30.000 hasil.

Kueri penelusuran

Kueri pencarian kurang terstruktur. Mereka paling cocok untuk menemukan rekaman yang menyertakan nilai tertentu di salah satu kolom tabel tertentu.

Kueri ini mencari SecurityEvent tabel untuk rekaman yang berisi frasa "Kriptografi." Dari rekaman tersebut, 10 rekaman dikembalikan dan ditampilkan:

search in (SecurityEvent) "Cryptographic"
| take 10

Jika Anda menghilangkan in (SecurityEvent) bagian dan hanya search "Cryptographic"menjalankan , pencarian melewati semua tabel. Prosesnya kemudian akan memakan waktu lebih lama dan kurang efisien.

Penting

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

Membatasi hasil

take Gunakan operator untuk melihat sampel kecil rekaman dengan mengembalikan hingga jumlah rekaman yang ditentukan. Contohnya:

SecurityEvent
| take 10

Hasil yang dipilih segan-segan dan ditampilkan dalam urutan tertentu. Jika Anda perlu mengembalikan hasil dalam urutan tertentu, gunakan sort operator dan top .

Urukan hasil

Bagian ini menjelaskan sort operator dan top serta argumen dan asc merekadesc. Meskipun take berguna untuk mendapatkan beberapa rekaman, Anda tidak dapat memilih atau mengurutkan hasilnya dalam urutan tertentu. Untuk mendapatkan tampilan yang diurutkan, gunakan sort dan top.

Sort

Anda bisa menggunakan sort operator untuk mengurutkan hasil kueri menurut kolom yang Anda tentukan. Namun, sort tidak membatasi jumlah rekaman yang dikembalikan oleh kueri.

Misalnya, kueri berikut mengembalikan semua rekaman yang tersedia untuk SecurityEvent tabel, yang maksimal 30.000 rekaman, dan mengurutkannya menurut kolom TimeGenerated.

SecurityEvent	
| sort by TimeGenerated

Kueri sebelumnya dapat mengembalikan terlalu banyak hasil. Selain itu, mungkin juga perlu waktu untuk mengembalikan hasilnya. Kueri mengurutkan seluruh SecurityEvent tabel menurut TimeGenerated kolom. Portal Analitik kemudian membatasi tampilan hanya 30.000 rekaman. Pendekatan ini tidak optimal. Cara terbaik untuk hanya mendapatkan rekaman terbaru adalah dengan menggunakan top operator.

Desc dan asc

desc Gunakan argumen untuk mengurutkan rekaman dalam urutan turun. Turun adalah urutan pengurutan default untuk sort dan top, sehingga Anda biasanya dapat menghilangkan desc argumen.

Misalnya, data yang dikembalikan oleh kedua kueri berikut ini diurutkan menurut kolom TimeGenerated, dalam urutan menurut:

  • SecurityEvent	
    | sort by TimeGenerated desc
    
  • SecurityEvent	
    | sort by TimeGenerated
    

Untuk mengurutkan dalam urutan naik, tentukan asc.

Atas

top Gunakan operator untuk mengurutkan seluruh tabel di sisi server lalu hanya mengembalikan rekaman teratas.

Misalnya, kueri berikut mengembalikan 10 rekaman terbaru:

SecurityEvent
| top 10 by TimeGenerated

Outputnya terlihat seperti contoh ini:

Cuplikan layar yang memperlihatkan 10 rekaman teratas yang diurutkan dalam urutan menurun.

Memfilter hasil

Pemfilteran adalah cara paling umum untuk membatasi hasil kueri ke informasi yang relevan.

Untuk menambahkan filter ke kueri, gunakan where operator diikuti oleh satu atau beberapa kondisi. Misalnya, kueri berikut hanya SecurityEvent mengembalikan rekaman di mana Level equals _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
and, or Diperlukan di antara kondisi Level == 16 or CommandLine != ""

Filter menurut beberapa kondisi

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

Gunakan and, seperti yang ditunjukkan di sini:

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

Pipa beberapa where elemen, 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, SecurityEvent Level kolom berjenis String, jadi Anda harus melemparkannya ke jenis numerik, seperti int atau long, sebelum Anda dapat menggunakan operator numerik di atasnya, seperti yang ditunjukkan di sini: SecurityEvent | where toint(Level) >= 10


Menentukan rentang waktu

Anda dapat menentukan rentang waktu dengan menggunakan pemilih waktu atau filter waktu.

Catatan

Jika Anda menyertakan rentang waktu dalam kueri, pemilih waktu secara otomatis berubah menjadi Atur dalam kueri. Jika Anda mengubah pemilih waktu secara manual ke nilai yang berbeda, Analitik Log menerapkan rentang waktu yang lebih kecil dari dua rentang waktu.

Gunakan pemetik waktu

Pemilih waktu ditampilkan di samping tombol Jalankan dan menunjukkan bahwa Anda mengkueri rekaman hanya dari 24 jam terakhir. Rentang waktu default ini diterapkan ke semua kueri. Untuk mendapatkan rekaman hanya dari satu jam terakhir, pilih Jam terakhir lalu jalankan kueri lagi.

Cuplikan layar yang memperlihatkan pemilih waktu dan daftar perintah rentang waktunya dalam mode KQL.

Menambahkan filter waktu ke kueri

Anda juga bisa menentukan rentang waktu sendiri dengan menambahkan filter waktu ke kueri.

Yang terbaik adalah menempatkan 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." Kueri ini mengembalikan rekaman hanya dari 30 menit terakhir, yang dinyatakan sebagai, misalnya, 30m. Satuan waktu lainnya termasuk hari (misalnya 2h) dan detik (misalnya 10d).

Menyertakan atau mengecualikan kolom dalam hasil kueri

Gunakan project untuk memilih kolom tertentu untuk disertakan dalam hasil:

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

Contoh sebelumnya menghasilkan output berikut:

Cuplikan layar yang memperlihatkan daftar hasil 'proyek' kueri.

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

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

Menentukan dan menggunakan bidang kustom

Anda dapat menggunakan extend untuk menyimpan semua kolom asli dalam tataan hasil dan menentukan kolom lain. Kueri berikut menggunakan extend untuk menambahkan EventCode kolom. Kolom ini mungkin tidak ditampilkan di akhir hasil tabel. Anda perlu memperluas detail rekaman untuk melihatnya.

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

Catatan

extend Gunakan operator untuk komputasi ad hoc dalam kueri. Gunakan transformasi waktu penyerapan atau aturan ringkasan untuk mengubah atau menggabungkan data pada waktu penyerapan untuk kueri yang lebih efisien.

Mengagregasi dan hasil grup

Grup agregat baris

Gunakan summarize untuk mengidentifikasi grup rekaman sesuai dengan satu atau beberapa kolom dan menerapkan agregasi ke dalamnya. Penggunaan summarize yang paling umum adalah count, yang mengembalikan jumlah hasil di setiap grup.

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

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

Mengelompokkan kombinasi nilai unik dalam beberapa kolom

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

Melakukan perhitungan matematika atau statistik

Penggunaan umum lainnya adalah untuk melakukan perhitungan matematis atau statistik di setiap kelompok. Contoh berikut 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 kami menggabungkan penghitung kinerja yang berbeda. Untuk membuat hasilnya lebih bermakna, hitung rata-rata secara terpisah untuk setiap kombinasi CounterName dan Computer:

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 tunggal selama rentang waktu karena nilai-nilai ini unik.

Untuk membuat grup berdasarkan nilai berkelanjutan, yang terbaik adalah memecah rentang menjadi unit yang dapat dikelola dengan menggunakan bin. Kueri berikut menganalisis Perf rekaman yang mengukur memori bebas (Available MBytes) pada komputer tertentu. Langkah ini menghitung nilai rata-rata setiap periode 1 jam selama 7 hari terakhir:

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

Untuk membuat output lebih jelas, Anda dapat memilih untuk menampilkannya sebagai bagan waktu, yang memperlihatkan memori yang tersedia dari waktu ke waktu. Untuk melakukannya, beralihlah ke tampilan Bagan , buka bilah samping Pemformatan bagan di sebelah kanan dan pilih Garis untuk Tipe bagan:

Cuplikan layar yang memperlihatkan nilai memori kueri dari waktu ke waktu dalam mode KQL.

Tanya jawab umum

Bagian ini menyediakan jawaban atas pertanyaan umum.

Mengapa saya melihat rekaman duplikat di Log Azure Monitor?

Terkadang, Anda mungkin melihat rekaman duplikat di Log Azure Monitor. Duplikasi ini biasanya berasal dari salah satu dari dua kondisi berikut:

  • Komponen dalam alur memiliki percobaan ulang untuk memastikan pengiriman yang andal di tempat tujuan. Terkadang, kemampuan ini dapat mengakibatkan duplikat untuk persentase kecil item telemetri.
  • Jika rekaman duplikat berasal dari komputer virtual, Anda mungkin menginstal agen Analitik Log dan Agen Azure Monitor. Jika Anda masih memerlukan agen Analitik Log yang terinstal, konfigurasikan ruang kerja Analitik Log untuk tidak lagi mengumpulkan data yang juga dikumpulkan oleh aturan pengumpulan data yang digunakan oleh Agen Azure Monitor.

Langkah berikutnya