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 di Bahasa Kueri Kusto (KQL) tetapi perlu membuat kueri yang berguna dengan cepat berdasarkan jenis sumber daya, lihat panel contoh kueri yang disimpan di Menggunakan kueri di Azure Monitor Log Analytics.

Dalam tutorial ini, Anda 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:

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.

Menulis kueri baru

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 Analytics. 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.

Take

take Gunakan operator untuk melihat sampel kecil rekaman dengan mengembalikan hingga jumlah rekaman yang ditentukan. Hasil yang dipilih segan-segan dan ditampilkan dalam urutan tertentu. Jika Anda perlu mengembalikan hasil dalam urutan tertentu, gunakan sort operator dan top .

Kueri penelusuran

Kueri pencarian kurang terstruktur. Mereka lebih cocok untuk menemukan rekaman yang menyertakan nilai tertentu di salah satu kolomnya:

search in (SecurityEvent) "Cryptographic"
| take 10

Kueri ini mencari SecurityEvent tabel untuk rekaman yang berisi frasa "Kriptografi." Dari rekaman tersebut, 10 rekaman dikembalikan dan ditampilkan. 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.

Mengurutkan dan teratas

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.

Desc dan asc

Desc

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
    

Asc

Untuk mengurutkan dalam urutan naik, tentukan asc.

Sort

Anda dapat menggunakan sort operator. sort 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.

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

Output terlihat seperti contoh ini.

Screenshot that shows the top 10 records sorted in descending order.

Operator tempat: Memfilter pada kondisi

Filter, seperti namanya, memfilter data dengan kondisi tertentu. 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:

Expression 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 != ""

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.

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.

Screenshot that shows 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. Menambahkan filter waktu mengambil alih rentang waktu yang dipilih dalam pemilih waktu.

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

Menggunakan proyek dan perluas untuk memilih dan mengomputasi kolom

Gunakan project untuk memilih kolom tertentu untuk disertakan dalam hasil:

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

Contoh sebelumnya menghasilkan output berikut:

Screenshot that shows the query 'project' results list.

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)

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)

Menggunakan ringkasan untuk mengagregasi grup 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

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 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 == "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, yang memperlihatkan memori yang tersedia dari waktu ke waktu.

Screenshot that shows the values of a query memory over time.

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