Urai data teks dalam log Azure Monitor
Beberapa data log yang dikumpulkan oleh Azure Monitor akan mencakup beberapa informasi dalam satu properti. Mengurai data ini ke dalam beberapa properti membuatnya lebih mudah digunakan dalam kueri. Contoh umumnya adalah log kustom yang mengumpulkan seluruh entri log dengan beberapa nilai ke dalam satu properti. Dengan membuat properti terpisah untuk nilai yang berbeda, Anda dapat mencari dan mengagregasi masing-masing properti.
Artikel ini menjelaskan berbagai opsi untuk menguraikan data log di catatan Azure Monitor saat data dicerna dan saat diambil dalam kueri, membandingkan keunggulan relatif untuk masing-masing data.
Izin yang diperlukan
- Untuk mengurai data pada waktu pengumpulan, Anda memerlukan
Microsoft.Insights/dataCollectionRuleAssociations/*
izin, seperti yang disediakan oleh peran bawaan Kontributor Analitik Log, misalnya. - Untuk mengurai data pada waktu kueri, Anda memerlukan
Microsoft.OperationalInsights/workspaces/query/*/read
izin, seperti yang disediakan oleh peran bawaan Pembaca Analitik Log, misalnya.
Metode penguraian
Anda dapat mengurai data baik pada waktu penyerapan saat data dikumpulkan atau pada waktu kueri saat Anda menganalisis data dengan kueri. Setiap strategi memiliki keunggulan unik.
Uraikan data pada waktu pengumpulan
Gunakan transformasi untuk mengurai data pada waktu pengumpulan dan menentukan kolom mana yang akan dikirimi data yang diurai.
Keuntungan:
- Lebih mudah untuk mengkueri data yang dikumpulkan karena Anda tidak perlu menyertakan perintah penguraian dalam kueri.
- Performa kueri yang lebih baik karena kueri tidak perlu melakukan penguraian.
Kekurangan:
- Harus didefinisikan terlebih dahulu. Tidak dapat menyertakan data yang sudah dikumpulkan.
- Jika Anda mengubah logika penguraian, logika tersebut hanya akan berlaku untuk data baru.
- Meningkatkan waktu latensi untuk mengumpulkan data.
- Kesalahan bisa sulit ditangani.
Uraikan data pada waktu kueri
Saat mengurai data pada waktu kueri, Anda menyertakan logika dalam kueri Anda untuk menguraikan data ke dalam beberapa bidang. Tabel aktual itu sendiri tidak dimodifikasi.
Keuntungan:
- Berlaku untuk data apa pun, termasuk data yang sudah dikumpulkan.
- Perubahan logika dapat segera diterapkan ke semua data.
- Opsi penguraian fleksibel, termasuk logika yang telah ditentukan sebelumnya untuk struktur data tertentu.
Kekurangan:
- Memerlukan kueri yang lebih kompleks. Kelemahan ini dapat dimitigasi dengan menggunakan fungsi untuk mensimulasikan tabel.
- Harus mereplikasi logika penguraian dalam beberapa kueri. Dapat berbagi beberapa logika melalui fungsi.
- Dapat membuat overhead saat Anda menjalankan logika kompleks terhadap kumpulan catatan yang sangat besar (miliaran rekaman).
Uraikan data saat dikumpulkan
Untuk informasi selengkapnya tentang penguraian data saat dikumpulkan, lihat Struktur transformasi di Azure Monitor. Pendekatan ini membuat properti kustom dalam tabel yang dapat digunakan oleh kueri seperti properti lainnya.
Mengurai data dalam kueri dengan menggunakan pola
Ketika data yang ingin Anda uraikan dapat diidentifikasi dengan pola yang diulang di seluruh rekaman, Anda dapat menggunakan operator yang berbeda dalam Bahasa Kueri Kusto untuk mengekstrak bagian data tertentu ke dalam satu atau beberapa properti baru.
Pola teks sederhana
Gunakan operator urai dalam kueri Anda untuk membuat satu atau beberapa properti kustom yang bisa diekstrak dari ekspresi string. Anda menentukan pola yang akan diidentifikasi dan nama properti yang akan dibuat. Pendekatan ini berguna untuk data dengan string kunci-nilai dengan formulir yang mirip key=value
dengan .
Pertimbangkan log kustom dengan data dalam format berikut:
Time=2018-03-10 01:34:36 Event Code=207 Status=Success Message=Client 05a26a97-272a-4bc9-8f64-269d154b0e39 connected
Time=2018-03-10 01:33:33 Event Code=208 Status=Warning Message=Client ec53d95c-1c88-41ae-8174-92104212de5d disconnected
Time=2018-03-10 01:35:44 Event Code=209 Status=Success Message=Transaction 10d65890-b003-48f8-9cfc-9c74b51189c8 succeeded
Time=2018-03-10 01:38:22 Event Code=302 Status=Error Message=Application could not connect to database
Time=2018-03-10 01:31:34 Event Code=303 Status=Error Message=Application lost connection to database
Kueri berikut ini akan menguraikan data ini ke dalam properti individual. Baris dengan project
ditambahkan untuk hanya mengembalikan properti terhitung dan bukan RawData
, yang merupakan properti tunggal yang menyimpan seluruh entri dari log kustom.
MyCustomLog_CL
| parse RawData with * "Time=" EventTime " Event Code=" Code " Status=" Status " Message=" Message
| project EventTime, Code, Status, Message
Contoh ini memecah nama pengguna UPN dalam AzureActivity
tabel.
AzureActivity
| parse Caller with UPNUserPart "@" *
| where UPNUserPart != "" //Remove non UPN callers (apps, SPNs, etc)
| distinct UPNUserPart, Caller
Regex
Jika data Anda dapat diidentifikasi dengan ekspresi reguler, Anda dapat menggunakan fungsi yang menggunakan ekspresi reguler untuk mengekstrak nilai individual. Contoh berikut menggunakan ekstrak untuk memecah UPN
bidang dari AzureActivity
rekaman lalu mengembalikan pengguna yang berbeda.
AzureActivity
| extend UPNUserPart = extract("([a-z.]*)@", 1, Caller)
| distinct UPNUserPart, Caller
Untuk mengaktifkan penguraian efisien dalam skala besar, Azure Monitor menggunakan versi re2 Ekspresi Reguler, yang serupa tetapi tidak identik dengan beberapa varian ekspresi reguler lainnya. Untuk informasi selengkapnya, lihat sintaks ekspresi re2.
Urai data yang dibatasi dalam kueri
Data yang dibatasi memisahkan bidang dengan karakter umum, seperti koma dalam file CSV. Gunakan fungsi pemisah untuk mengurai data yang dibatasi dengan menggunakan pemisah yang Anda tentukan. Anda dapat menggunakan pendekatan ini dengan operator perluas untuk mengembalikan semua bidang dalam data atau untuk menentukan bidang individual yang akan disertakan dalam output.
Catatan
Karena pemisahan mengembalikan objek dinamis, hasilnya mungkin perlu secara eksplisit dilemparkan ke jenis data, seperti string yang akan digunakan dalam operator dan filter.
Pertimbangkan log kustom dengan data dalam format CSV berikut:
2018-03-10 01:34:36, 207,Success,Client 05a26a97-272a-4bc9-8f64-269d154b0e39 connected
2018-03-10 01:33:33, 208,Warning,Client ec53d95c-1c88-41ae-8174-92104212de5d disconnected
2018-03-10 01:35:44, 209,Success,Transaction 10d65890-b003-48f8-9cfc-9c74b51189c8 succeeded
2018-03-10 01:38:22, 302,Error,Application could not connect to database
2018-03-10 01:31:34, 303,Error,Application lost connection to database
Kueri berikut ini akan menguraikan data ini dan meringkas dengan dua properti terhitung. Baris pertama membagi RawData
properti menjadi array string. Setiap baris berikutnya memberikan nama ke properti individual dan menambahkannya ke output dengan menggunakan fungsi untuk mengonversinya ke jenis data yang sesuai.
MyCustomCSVLog_CL
| extend CSVFields = split(RawData, ',')
| extend EventTime = todatetime(CSVFields[0])
| extend Code = toint(CSVFields[1])
| extend Status = tostring(CSVFields[2])
| extend Message = tostring(CSVFields[3])
| where getyear(EventTime) == 2018
| summarize count() by Status,Code
Uraikan struktur yang sudah ditentukan sebelumnya dalam kueri
Jika data Anda diformat dalam struktur yang diketahui, Anda mungkin dapat menggunakan salah satu fungsi dalam Bahasa Kueri Kusto untuk mengurai struktur yang telah ditentukan sebelumnya:
Contoh kueri berikut mengurai Properties
AzureActivity
bidang tabel, yang disusun dalam JSON. Ini menyimpan hasilnya ke properti dinamis yang disebut parsedProp
, yang mencakup nilai bernama individu dalam JSON. Nilai ini digunakan untuk memfilter dan meringkas hasil kueri.
AzureActivity
| extend parsedProp = parse_json(Properties)
| where parsedProp.isComplianceCheck == "True"
| summarize count() by ResourceGroup, tostring(parsedProp.tags.businessowner)
Fungsi penguraian ini dapat menjadi prosesor intensif. Hanya gunakan saat kueri Anda menggunakan beberapa properti dari data yang diformat. Jika tidak, pemrosesan pencocokan pola sederhana lebih cepat.
Contoh berikut menunjukkan perincian jenis pengontrol TGT Preauth
domain. Jenis hanya ada di EventData
bidang , yang merupakan string XML. Tidak diperlukan data lain dari bidang ini. Dalam hal ini penguraian digunakan untuk memilih bagian data yang diperlukan.
SecurityEvent
| where EventID == 4768
| parse EventData with * 'PreAuthType">' PreAuthType '</Data>' *
| summarize count() by PreAuthType
Menggunakan fungsi untuk mensimulasikan tabel
Anda mungkin memiliki beberapa kueri yang melakukan penguraian tabel tertentu yang sama. Dalam hal ini buat fungsi yang mengembalikan data yang diurai alih-alih mereplikasi logika penguraian di setiap kueri. Anda kemudian dapat menggunakan alias fungsi untuk menggantikan tabel asli di kueri lain.
Pertimbangkan contoh log kustom yang dibatasi koma sebelumnya. Untuk menggunakan data yang diurai dalam beberapa kueri, buat fungsi dengan menggunakan kueri berikut dan simpan dengan alias MyCustomCSVLog
.
MyCustomCSVLog_CL
| extend CSVFields = split(RawData, ',')
| extend DateTime = tostring(CSVFields[0])
| extend Code = toint(CSVFields[1])
| extend Status = tostring(CSVFields[2])
| extend Message = tostring(CSVFields[3])
Sekarang Anda dapat menggunakan alias MyCustomCSVLog
sebagai pengganti nama tabel aktual dalam kueri seperti contoh berikut:
MyCustomCSVLog
| summarize count() by Status,Code
Langkah berikutnya
Pelajari tentang kueri log untuk menganalisis data yang dikumpulkan dari sumber data dan solusi.