Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Pengguna Security Information Model (ASIM) menggunakan parser pemersatu bukan nama tabel dalam kueri mereka, untuk melihat data dalam format yang dinormalisasi dan untuk memasukkan semua data yang relevan dengan skema dalam kueri. Parser pemersatu, selanjutnya, menggunakan parser khusus sumber untuk menangani detail spesifik setiap sumber.
Microsoft Sentinel menyediakan pengurai khusus sumber bawaan untuk banyak sumber data. Anda mungkin ingin memodifikasi, atau mengembangkan, parser khusus sumber ini dalam situasi berikut:
Saat perangkat Anda menyediakan peristiwa yang sesuai dengan skema ASIM, tetapi pengurai khusus sumber untuk perangkat Anda dan skema yang relevan tidak tersedia di Microsoft Sentinel.
Saat parser khusus sumber ASIM tersedia untuk perangkat Anda, tetapi perangkat Anda mengirimkan peristiwa dalam metode atau format yang berbeda dari yang diharapkan oleh parser ASIM. Contohnya:
Perangkat sumber Anda dapat dikonfigurasi untuk mengirim peristiwa dengan cara yang tidak standar.
Perangkat Anda mungkin memiliki versi yang berbeda dari yang didukung oleh parser ASIM.
Peristiwa dapat dikumpulkan, dimodifikasi, dan diteruskan oleh sistem perantara.
Untuk memahami bagaimana parser cocok dalam arsitektur ASIM, lihat diagram arsitektur ASIM.
Proses pengembangan pengurai ASIM kustom
Alur kerja berikut menjelaskan langkah-langkah tingkat tinggi dalam mengembangkan ASIM kustom, parser khusus sumber:
Identifikasi skema atau skema-skema yang diwakili oleh peristiwa yang dikirim dari sumber. Untuk informasi selengkapnya, lihat Ringkasan skem.
Petakan bidang peristiwa sumber ke skema atau skema yang diidentifikasi.
Kembangkan satu atau beberapa parser ASIM untuk sumber Anda. Anda harus mengembangkan parser penyaringan dan parser tanpa parameter untuk setiap skema yang relevan dengan sumbernya.
Uji parser Anda.
Terapkan pengurai ke ruang kerja Microsoft Sentinel Anda.
Perbarui parser pemersatu ASIM yang relevan untuk mereferensikan parser kustom baru. Untuk informasi selengkapnya, lihat Mengelola parser ASIM.
Anda mungkin juga ingin berkontribusi parser Anda ke distribusi ASIM utama. Parser yang dikontribusikan juga dapat tersedia di semua ruang kerja sebagai parser bawaan.
Artikel ini memandu Anda melalui langkah-langkah pengembangan, pengujian, dan penyebaran proses.
Kumpulkan log data sampel
Untuk membangun pengurai ASIM yang efektif, Anda memerlukan sekumpulan log yang representatif, yang dalam banyak kasus akan memerlukan pengaturan sistem sumber dan menghubungkannya ke Microsoft Sentinel. Jika Anda tidak memiliki perangkat sumber yang tersedia, layanan bayar sesuai penggunaan cloud memungkinkan Anda menyebarkan banyak perangkat untuk pengembangan dan pengujian.
Selain itu, menemukan dokumentasi vendor dan sampel untuk log dapat membantu mempercepat pengembangan dan mengurangi kesalahan dengan memastikan cakupan format log yang luas.
Sekumpulan log perwakilan harus mencakup:
- Peristiwa dengan hasil peristiwa yang berbeda.
- Peristiwa dengan tindakan respons yang berbeda.
- Format yang berbeda untuk nama pengguna, nama host dan ID, dan bidang lain yang memerlukan normalisasi nilai.
Tip
Mulai parser kustom baru menggunakan parser yang ada untuk skema yang sama. Menggunakan parser yang ada sangat penting untuk memfilter parser untuk memastikan mereka menerima semua parameter yang diperlukan oleh skema.
Merencanakan pemetaan
Sebelum Anda mengembangkan parser, petakan informasi yang tersedia dalam peristiwa sumber atau peristiwa ke skema yang Anda identifikasi:
- Petakan semua bidang wajib dan sebaiknya juga bidang yang direkomendasikan.
- Cobalah untuk memetakan informasi apa pun yang tersedia dari sumber ke bidang yang dinormalisasi. Jika tidak tersedia sebagai bagian dari skema yang dipilih, pertimbangkan pemetaan ke bidang yang tersedia di skema lain.
- Petakan nilai untuk bidang pada sumber ke nilai yang dinormalisasi yang diperbolehkan oleh ASIM. Nilai asli disimpan dalam bidang terpisah, seperti
EventOriginalResultDetails.
Mengembangkan parser
Kembangkan penyaringan dan parser tanpa parameter untuk setiap skema yang relevan.
Pengurai kustom adalah kueri KQL yang dikembangkan di halaman Microsoft Sentinel Logs. Kueri parser memiliki tiga bagian:
Filter>Urai>Siapkan bidang
Penyaringan
Memfilter catatan yang relevan
Dalam banyak kasus, tabel di Microsoft Sentinel menyertakan beberapa jenis peristiwa. Contohnya:
- Tabel Syslog memiliki data dari berbagai sumber.
- Tabel kustom mungkin mencakup informasi dari satu sumber yang menyediakan lebih dari satu jenis kejadian dan dapat memuat berbagai skema.
Oleh karena itu, parser pertama-tama harus memfilter hanya rekaman yang relevan dengan skema target.
Pemfilteran di KQL dilakukan dengan menggunakan operator where. Misalnya, Sysmon event 1 melaporkan pembuatan proses, dan karena itu dinormalisasi ke skema ProcessEvent. Peristiwa Sysmon event 1 adalah bagian dari tabel Event, jadi Anda akan menggunakan filter berikut:
Event | where Source == "Microsoft-Windows-Sysmon" and EventID == 1
Penting
Parser tidak boleh menyaring menurut waktu. Kueri yang menggunakan pengurai akan menerapkan rentang waktu.
Memfilter menurut jenis sumber menggunakan Daftar Pantauan
Dalam beberapa kasus, peristiwa itu sendiri tidak berisi informasi yang akan memungkinkan pemfilteran untuk jenis sumber tertentu.
Misalnya, peristiwa DNS Infoblox dikirim sebagai pesan Syslog, dan sulit dibedakan dari pesan Syslog yang dikirim dari sumber lain. Dalam kasus seperti itu, parser bergantung pada daftar sumber yang menentukan peristiwa yang relevan. Daftar ini dikelola di daftar tonton Sources_by_SourceType.
Untuk menggunakan daftar tonton ASimSourceType di parser Anda, gunakan _ASIM_GetSourceBySourceType fungsi di bagian pemfilteran parser. Misalnya, parser DNS Infoblox menyertakan yang berikut di bagian pemfilteran:
| where Computer in (_ASIM_GetSourceBySourceType('InfobloxNIOS'))
Untuk menggunakan sampel ini di parser Anda:
Ganti
Computerdengan nama bidang yang menyertakan informasi sumber untuk sumber Anda. Anda dapat menyimpan ini sebagaiComputeruntuk setiap parser berdasarkan Syslog.Ganti token
InfobloxNIOSdengan nilai pilihan Anda untuk parser Anda. Beri tahu pengguna parser bahwa mereka harus memperbarui daftar pantauanASimSourceTypemenggunakan nilai yang Anda pilih, serta daftar sumber yang mengirim peristiwa jenis ini.
Pemfilteran berdasarkan parameter pengurai
Saat mengembangkan parser pemfilteran, pastikan parser Anda menerima parameter pemfilteran untuk skema yang relevan, seperti yang didokumentasikan dalam artikel referensi untuk skema tersebut. Menggunakan parser yang ada sebagai titik awal memastikan bahwa parser Anda menyertakan tanda tangan fungsi yang benar. Dalam kebanyakan kasus, kode pemfilteran yang sebenarnya juga serupa untuk memfilter parser untuk skema yang sama.
Saat memfilter, pastikan Anda:
- Filter sebelum melakukan pemrosesan menggunakan bidang fisik. Jika hasil yang disaring tidak cukup akurat, ulangi tes setelah mengurai untuk menyempurnakan hasil Anda. Untuk informasi selengkapnya, lihat pengoptimalan pemfilteran.
- Jangan memfilter jika parameter tidak didefinisikan dan masih memiliki nilai default.
Contoh berikut menunjukkan cara menerapkan pemfilteran untuk parameter string, di mana nilai default biasanya '*', dan untuk parameter daftar, di mana nilai default biasanya berupa daftar kosong.
srcipaddr=='*' or ClientIP==srcipaddr
array_length(domain_has_any) == 0 or Name has_any (domain_has_any)
Lihat informasi selengkapnya tentang item berikut dalam dokumentasi Kusto:
Pengoptimalan pemfilteran
Untuk memastikan performa pengurai, perhatikan rekomendasi pemfilteran berikut:
- Selalu lakukan pemfilteran pada bidang bawaan, bukan pada bidang yang telah dipecah. Meskipun terkadang lebih mudah untuk memfilter menggunakan bidang yang diuraikan, hal itu secara dramatis memengaruhi performa.
-
Gunakan operator yang memberikan performa yang dioptimalkan. Khususnya,
==,has, danstartswith. Menggunakan operator seperticontainsataumatches regexjuga sangat mempengaruhi performa.
Menyaring rekomendasi kinerja mungkin tidak selalu mudah diikuti. Misalnya, menggunakan has tidak lebih akurat dari menggunakan contains. Dalam kasus lain, pencocokan bidang bawaan, seperti SyslogMessage, kurang akurat daripada membandingkan bidang yang diekstraksi, seperti DvcAction. Dalam kasus seperti itu, sebaiknya Anda tetap memfilter menggunakan operator pengoptimal performa melalui bidang bawaan dan ulangi filter menggunakan kondisi yang lebih akurat setelah penguraian.
Misalnya, lihat cuplikan pengurai DNS Infoblox berikut. Pengurai pertama kali memeriksa bahwa bidang SyslogMessage mengandung kata has. Namun, istilah tersebut mungkin digunakan di tempat yang berbeda dalam pesan, jadi setelah menguraikan bidang Log_Type, parser memeriksa kembali bahwa kata client memang merupakan nilai bidang.
Syslog | where ProcessName == "named" and SyslogMessage has "client"
…
| extend Log_Type = tostring(Parser[1]),
| where Log_Type == "client"
Note
pengurai tidak boleh memfilter berdasarkan waktu, karena kueri yang menggunakan pengurai sudah memfilter menurut waktu.
Parsing
Setelah kueri memilih rekaman yang relevan, kueri mungkin perlu untuk mengurainya. Biasanya, penguraian diperlukan jika beberapa bidang acara disampaikan dalam satu bidang teks.
Operator KQL yang melakukan penguraian dicantumkan di bawah, dan diurutkan berdasarkan pengoptimalan performa operator tersebut. Yang pertama memberikan performa yang paling optimal, sedangkan yang terakhir memberikan performa yang paling tidak optimal.
| Operator/fungsi() | Description |
|---|---|
| fungsi split() | Mengurai string nilai yang dibatasi. |
| fungsi parse_csv() | Mengurai serangkaian nilai yang diformat sebagai garis CSV (nilai yang dipisahkan koma). |
| operator parse-kv | Mengekstrak informasi terstruktur dari ekspresi string dan mewakili informasi dalam formulir kunci/nilai. |
| operator penguraian | Mengurai beberapa nilai dari string arbitrer menggunakan pola, yang bisa berupa pola yang disederhanakan dengan performa lebih baik atau ekspresi reguler. |
| extract_all() fungsi | Mengurai nilai tunggal dari string arbitrer menggunakan ekspresi reguler.
extract_all memiliki performa yang mirip dengan parse jika yang kedua menggunakan regex. |
| fungsi extract() | Mengekstrak nilai tunggal dari string arbitrer menggunakan regex. Menggunakan extract menghasilkan performa yang lebih baik daripada parse atau extract_all jika nilai tunggal diperlukan. Namun, menggunakan beberapa aktivasi extract pada string sumber yang sama kurang efisien dibandingkan satu parse atau extract_all dan harus dihindari. |
| fungsi parse_json() | Mengurai nilai dalam string yang diformat JSON. Jika hanya ada beberapa nilai yang dibutuhkan dari JSON, menggunakan parse, extract, atau extract_all akan menghasilkan performa yang lebih baik. |
| fungsi parse_xml() | Mengurai nilai dalam string yang diformat sebagai XML. Jika hanya ada beberapa nilai yang dibutuhkan dari XML, menggunakan parse, extract, atau extract_all akan menghasilkan performa yang lebih baik. |
Normalisasi
Pemetaan nama kolom
Bentuk normalisasi yang paling sederhana adalah mengganti nama bidang asli dengan nama yang dinormalisasi. Gunakan operator project-rename untuk tindakan tersebut. Menggunakan project-rename memastikan bahwa bidang tetap dikelola sebagai bidang fisik dan pengelolaannya menjadi lebih efisien. Contohnya:
| project-rename
ActorUserId = InitiatingProcessAccountSid,
ActorUserAadId = InitiatingProcessAccountObjectId,
ActorUserUpn = InitiatingProcessAccountUpn,
Menormalkan format dan jenis bidang
Dalam banyak kasus, nilai asli yang diekstrak perlu dinormalisasi. Misalnya, di ASIM, alamat MAC menggunakan titik dua sebagai pemisah, sementara sumber dapat mengirim alamat MAC yang dibatasi tanda hubung. Operator utama untuk mengubah nilai adalah extend, bersama dengan banyak fungsi string KQL, numerik, dan tanggal.
Selain itu, memastikan bahwa bidang output parser cocok dengan jenis yang ditentukan dalam skema sangatlah penting agar parser dapat berfungsi. Misalnya, Anda mungkin perlu untuk mengubah string yang mewakili tanggal dan waktu ke bidang tanggal waktu. Fungsi seperti todatetime dan tohex berguna dalam kasus tersebut.
Misalnya, ID peristiwa unik yang asli dapat dikirim sebagai bilangan bulat, tetapi ASIM mengharuskan nilainya menjadi string, untuk memastikan kompatibilitas yang luas di antara sumber data. Oleh karena itu, saat menetapkan bidang sumber, gunakan extend dan tostring, bukan project-rename:
| extend EventOriginalUid = tostring(ReportId),
Bidang dan nilai turunan
Nilai bidang sumber, setelah diekstraksi, mungkin perlu dipetakan ke kumpulan nilai yang ditentukan untuk bidang skema target. Fungsi iff, case, dan lookup dapat membantu memetakan data yang tersedia ke nilai target.
Misalnya, pengurai DNS Microsoft menetapkan bidang EventResult berdasarkan ID Kejadian dan Kode Respons menggunakan pernyataan iff, sebagai berikut:
extend EventResult = iff(EventId==257 and ResponseCode==0 ,'Success','Failure')
Untuk memetakan beberapa nilai, tentukan pemetaan menggunakan operator datatable dan gunakan lookup untuk melakukan pemetaan. Misalnya, beberapa sumber melaporkan kode respons DNS numerik dan protokol jaringan, sementara skema mewajibkan representasi label teks yang lebih umum untuk keduanya. Contoh berikut menunjukkan cara memperoleh nilai yang diperlukan menggunakan datatable dan lookup:
let NetworkProtocolLookup = datatable(Proto:real, NetworkProtocol:string)[
6, 'TCP',
17, 'UDP'
];
let DnsResponseCodeLookup=datatable(DnsResponseCode:int,DnsResponseCodeName:string)[
0,'NOERROR',
1,'FORMERR',
2,'SERVFAIL',
3,'NXDOMAIN',
...
];
...
| lookup DnsResponseCodeLookup on DnsResponseCode
| lookup NetworkProtocolLookup on Proto
Perhatikan bahwa pencarian berguna dan efisien juga ketika pemetaan hanya memiliki dua nilai yang mungkin.
Ketika kondisi pemetaan lebih kompleks, gabungkan iff, case, dan lookup. Contoh di bawah memperlihatkan cara menggabungkan lookup dan case. Contoh lookup di atas mengembalikan nilai kosong di bidang DnsResponseCodeName jika nilai pencarian tidak ditemukan. Contoh case di bawah ini menambahnya dengan menggunakan hasil operasi lookup jika tersedia, dan menentukan kondisi tambahan.
| extend DnsResponseCodeName =
case (
DnsResponseCodeName != "", DnsResponseCodeName,
DnsResponseCode between (3841 .. 4095), 'Reserved for Private Use',
'Unassigned'
)
Microsoft Sentinel menyediakan fungsi yang berguna untuk nilai pencarian umum. Misalnya, pencarian DnsResponseCodeName di atas, dapat diimplementasikan menggunakan salah satu fungsi berikut:
| extend DnsResponseCodeName = _ASIM_LookupDnsResponseCode(DnsResponseCode)
| invoke _ASIM_ResolveDnsResponseCode('DnsResponseCode')
Opsi pertama menerima sebagai parameter nilai untuk mencari dan memungkinkan Anda memilih bidang output dan oleh karena itu berguna sebagai fungsi pencarian umum. Opsi kedua lebih diarahkan kepada parser, yang menerima nama bidang sumber sebagai input dan memperbarui bidang ASIM yang diperlukan, dalam hal ini DnsResponseCodeName.
Untuk daftar lengkap fungsi bantuan ASIM, lihat Fungsi ASIM
Bidang pengayaan
Selain kolom yang tersedia dari sumbernya, sebuah event ASIM yang dihasilkan mencakup kolom pengayaan yang harus dihasilkan oleh parser. Dalam banyak kasus, parser dapat menetapkan nilai konstanta ke bidang, misalnya:
| extend
EventCount = int(1),
EventProduct = 'M365 Defender for Endpoint',
EventVendor = 'Microsoft',
EventSchemaVersion = '0.1.0',
EventSchema = 'ProcessEvent'
Jenis bidang pengayaan lain yang harus diatur parser Anda adalah bidang jenis, yang menunjuk jenis nilai yang disimpan dalam bidang terkait. Misalnya, bidang SrcUsernameType menentukan jenis nilai yang disimpan di bidang SrcUsername. Anda dapat menemukan informasi selengkapnya tentang bidang jenis dalam deskripsi entitas.
Dalam kebanyakan kasus, jenis juga diberi nilai konstanta. Namun, dalam beberapa kasus, jenisnya harus ditentukan berdasarkan nilai aktual, misalnya:
DomainType = iif (array_length(SplitHostname) > 1, 'FQDN', '')
Microsoft Sentinel menyediakan fungsi yang berguna untuk menangani pengayaan. Misalnya, gunakan fungsi berikut untuk secara otomatis menetapkan bidang SrcHostname, SrcDomain, SrcDomainType, dan SrcFQDN berdasarkan nilai di bidang Computer.
| invoke _ASIM_ResolveSrcFQDN('Computer')
Fungsi ini akan mengatur bidang sebagai berikut:
| Bidang komputer | Bidang output |
|---|---|
| server1 | SrcHostname: server1 SrcDomain, SrcDomainType, SrcFQDN semuanya kosong |
| server1.microsoft.com | SrcHostname: server1 SrcDomain: microsoft.com SrcDomainType: FQDN SrcFQDN:server1.microsoft.com |
Fungsi _ASIM_ResolveDstFQDN dan _ASIM_ResolveDvcFQDN melakukan tugas serupa, mengisi bidang terkait Dst dan Dvc. Untuk daftar lengkap fungsi bantuan ASIM, lihat Fungsi ASIM
Memilih bidang dalam kumpulan hasil
Parser dapat secara opsional memilih bidang dalam kumpulan hasil. Menghapus bidang yang tidak diperlukan dapat meningkatkan performa dan menambah kejelasan dengan menghindari kesalahan antara bidang yang dinormalisasi dan bidang sumber yang tersisa.
Operator KQL berikut digunakan untuk memilih bidang dalam set hasil Anda:
| Operator | Description | Kapan menggunakan dalam pengurai |
|---|---|---|
| project-away | Menghapus kolom. | Gunakan project-away untuk bidang tertentu yang ingin Anda hapus dari tataan hasil. Sebaiknya jangan menghapus bidang asli yang tidak dinormalisasi dari kumpulan hasil, kecuali jika membuat kebingungan atau sangat besar dan mungkin memiliki implikasi performa. |
| project | Memilih bidang yang sudah ada sebelumnya, atau dibuat sebagai bagian dari pernyataan, dan menghapus semua bidang lainnya. | Tidak disarankan untuk digunakan dalam pengurai, karena pengurai tidak boleh menghapus bidang lain yang tidak dinormalisasi. Jika Anda perlu menghapus bidang tertentu, seperti nilai sementara yang digunakan selama penguraian, gunakan project-away untuk menghapusnya dari hasil. |
Misalnya, saat mengurai tabel log kustom, gunakan cara berikut ini untuk menghapus bidang asli yang tersisa yang masih memiliki pendeskripsi jenis:
| project-away
*_d, *_s, *_b, *_g
Menangani varian penguraian
Penting
Varian yang berbeda mewakili jenis peristiwa yang berbeda, biasanya dipetakan ke skema yang berbeda dan mengembangkan parser terpisah
Dalam banyak kasus, peristiwa dalam eventstream mencakup varian yang memerlukan logika penguraian yang berbeda. Untuk mengurai varian yang berbeda dalam parser tunggal, gunakan pernyataan kondisional seperti iff dan case, atau gunakan struktur serikat pekerja.
Untuk menggunakan union untuk menangani beberapa varian, buat fungsi terpisah untuk setiap varian dan gunakan pernyataan gabungan untuk menggabungkan hasilnya:
let AzureFirewallNetworkRuleLogs = AzureDiagnostics
| where Category == "AzureFirewallNetworkRule"
| where isnotempty(msg_s);
let parseLogs = AzureFirewallNetworkRuleLogs
| where msg_s has_any("TCP", "UDP")
| parse-where
msg_s with networkProtocol:string
" request from " srcIpAddr:string
":" srcPortNumber:int
…
| project-away msg_s;
let parseLogsWithUrls = AzureFirewallNetworkRuleLogs
| where msg_s has_all ("Url:","ThreatIntel:")
| parse-where
msg_s with networkProtocol:string
" request from " srcIpAddr:string
" to " dstIpAddr:string
...
union parseLogs, parseLogsWithUrls…
Untuk menghindari peristiwa duplikat dan pemrosesan yang berlebihan, pastikan setiap fungsi dimulai dengan penyaringan, menggunakan bidang asli, hanya peristiwa yang dimaksudkan untuk diurai. Selain itu, jika diperlukan, gunakan project-away di setiap cabang, sebelum digabungkan.
Menyebarkan pengurai
Sebarkan pengurai secara manual dengan menyalinnya ke halaman Log Azure Monitor dan menyimpan kueri sebagai fungsi. Metode ini berguna untuk pengujian. Untuk informasi lebih lanjut, lihat Membuat fungsi.
Untuk menyebarkan sejumlah besar parser, sebaiknya gunakan templat ARM parser, sebagai berikut:
Buat file YAML berdasarkan templat yang relevan untuk setiap skema dan sertakan kueri Anda di dalamnya. Mulailah dengan templat YAML yang relevan untuk skema dan jenis parser Anda, pemfilteran, atau tanpa parameter.
Gunakan konverter templat ASIM YAML ke ARM untuk mengonversi file YAML Anda ke templat ARM.
Jika menyebarkan pembaruan, hapus versi fungsi yang lebih lama menggunakan portal atau fungsi hapus alat PowerShell.
Sebarkan templat Anda menggunakan portal Azure atau PowerShell.
Anda juga dapat menggabungkan beberapa templat ke satu proses penyebaran menggunakan templat tertaut
Tip
Templat ARM dapat menggabungkan sumber daya yang berbeda, sehingga parser dapat digunakan bersama konektor, aturan analitik, atau daftar pantauan, untuk menyebutkan beberapa opsi yang berguna. Misalnya, parser Anda dapat mereferensikan daftar pantauan yang digunakan di sampingnya.
Menguji parser
Bagian ini menjelaskan bahwa alat pengujian yang disediakan ASIM yang memungkinkan Anda menguji parser Anda. Meskipun demikian, parser adalah kode, yang terkadang bersifat kompleks, dan praktik standar untuk jaminan kualitas, seperti tinjauan kode, direkomendasikan selain pengujian otomatis.
Menginstal alat pengujian ASIM
Untuk menguji ASIM, deploy alat pengujian ASIM ke ruang kerja Microsoft Sentinel tempat:
- Parser Anda disebarkan.
- Tabel sumber yang digunakan oleh parser tersedia.
- Tabel sumber yang digunakan oleh parser diisi dengan beragam koleksi peristiwa yang relevan.
Validasi skema keluaran
Untuk memastikan bahwa pengurai Anda menghasilkan skema yang valid, gunakan penguji skema ASIM dengan menjalankan kueri berikut di halaman Microsoft Sentinel Logs:
<parser name> | getschema | invoke ASimSchemaTester('<schema>')
Tangani hasilnya sebagai berikut:
| Kesalahan | Action |
|---|---|
| Bidang wajib [<Field>] tidak ada | Tambahkan bidang ini ke parser. Dalam banyak kasus, ini akan menjadi nilai turunan atau nilai konstan, dan bukan bidang yang sudah tersedia dari sumbernya. |
| Bidang [<Bidang>] yang tidak ada bersifat wajib jika kolom wajib [<Bidang>] ada | Tambahkan bidang ini ke parser. Dalam banyak kasus, bidang ini menunjukkan jenis kolom yang ada yang dirujuknya. |
| Bidang [<Bidang>] yang tidak ada bersifat wajib jika kolom [<Bidang>] ada | Tambahkan bidang ini ke parser. Dalam banyak kasus, bidang ini menunjukkan jenis kolom yang ada yang dirujuknya. |
| Alias wajib [<Bidang>] tidak ditemukan untuk kolom yang sudah ada [<Bidang>] | Tambahkan alias ini ke parser |
| Alias [<Bidang>] yang direkomendasikan tidak ada untuk alias kolom [<Bidang>] yang ada | Tambahkan alias ini ke parser |
| Alias [<Bidang>] opsional tidak ada untuk alias kolom [<Bidang>] yang ada | Tambahkan alias ini ke parser |
| Alias [<Bidang>] wajib tidak ada untuk alias kolom [<Bidang>] yang tidak ada | Kesalahan ini menyertai kesalahan serupa untuk bidang alias. Perbaiki kesalahan bidang alias dan tambahkan alias ini ke parser Anda. |
| Tipe ketidakcocokan untuk bidang [<Bidang>]. Saat ini [<Jenis>] dan seharusnya menjadi [<Jenis>] | Pastikan jenis bidang yang dinormalisasi sudah benar, biasanya menggunakan fungsi konversi seperti tostring. |
| Info | Action |
|---|---|
| Bidang [<Bidang>] yang direkomendasikan tidak ada | Pertimbangkan untuk menambahkan bidang ini ke parser Anda. |
| Info | Action |
|---|---|
| Alias [<Field>] yang direkomendasikan hilang untuk mengaliasi kolom tidak ada [<Field>] | Jika Anda menambahkan bidang alias ke parser, pastikan untuk menambahkan alias ini juga. |
| Alias opsional yang hilang [<Bidang>] merujuk ke kolom yang tidak ada [<Bidang>] | Jika Anda menambahkan bidang alias ke parser, pastikan untuk menambahkan alias ini juga. |
| Bidang opsional [<Field>] tidak ditemukan | Meskipun bidang opsional sering tidak ada, ada baiknya meninjau daftar untuk menentukan apakah ada bidang opsional yang dapat dipetakan dari sumbernya. |
| Bidang tambahan yang tidak dinormalisasi [<Field>] | Meskipun bidang yang tidak dinormalisasi valid, ada baiknya meninjau daftar untuk menentukan apakah salah satu nilai yang tidak dinormalisasi dapat dipetakan ke bidang opsional. |
Note
Kesalahan akan mencegah konten yang menggunakan parser berfungsi dengan benar. Peringatan tidak akan mencegah konten berfungsi, tetapi dapat mengurangi kualitas hasil.
Memvalidasi nilai output
Untuk memastikan bahwa pengurai Anda menghasilkan nilai yang valid, gunakan penguji data ASIM dengan menjalankan kueri berikut di halaman Microsoft Sentinel Logs:
<parser name> | limit <X> | invoke ASimDataTester ('<schema>')
Menentukan skema bersifat opsional. Jika skema tidak ditentukan, bidang EventSchema digunakan untuk mengidentifikasi skema yang harus dipatuhi peristiwa. Jika suatu peristiwa tidak menyertakan bidang EventSchema, maka hanya bidang umum yang akan diverifikasi. Jika skema ditentukan sebagai parameter, skema ini akan digunakan untuk menguji semua rekaman. Ini berguna untuk pengurai lama yang tidak mengatur bidang EventSchema.
Note
Bahkan ketika skema tidak ditentukan, tanda kurung kosong diperlukan setelah nama fungsi.
Pengujian ini intensif sumber daya dan mungkin tidak berfungsi pada seluruh himpunan data Anda. Atur X ke angka terbesar yang mana waktu kuerinya tidak akan habis, atau atur rentang waktu untuk kueri tersebut menggunakan pemilih rentang waktu.
Tangani hasilnya sebagai berikut:
| Pesan | Action |
|---|---|
| (0) Kesalahan: ketidakcocokan tipe untuk Kolom [<Bidang>]. Saat ini [<Jenis>] dan seharusnya menjadi [<Jenis>] | Pastikan jenis bidang yang dinormalisasi sudah benar, biasanya menggunakan fungsi konversi seperti tostring. |
| (0) Kesalahan: Nilai tidak valid (hingga 10 terdaftar) untuk bidang [<Bidang>] dari jenis [<Jenis Logika>] | Pastikan parser memetakan bidang sumber yang benar ke bidang output. Jika dipetakan dengan benar, perbarui parser untuk mengubah nilai sumber ke jenis, nilai, atau format yang benar. Lihat daftar jenis logis untuk informasi selengkapnya tentang nilai dan format yang benar untuk setiap jenis logis. Perhatikan bahwa alat pengujian hanya mencantumkan sampel dari 10 nilai yang tidak valid. |
| (1) Peringatan: Nilai kosong di bidang [<Bidang>] wajib | Bidang wajib harus diisi, bukan hanya didefinisikan. Periksa apakah bidang dapat diisi dari sumber lain untuk rekaman yang sumber saat ini kosong. |
| (2) Info: Nilai kosong di bidang [<Bidang>] yang direkomendasikan | Bidang yang disarankan biasanya harus diisi. Periksa apakah bidang dapat diisi dari sumber lain untuk rekaman yang sumber saat ini kosong. |
| (2) Info: Nilai kosong di bidang [<Bidang>] opsional | Periksa apakah bidang alias wajib atau direkomendasikan, dan jika demikian, apakah itu dapat diisi dari sumber lain. |
Banyak pesan juga melaporkan jumlah catatan yang menghasilkan pesan dan persentasenya dari total sampel. Persentase ini adalah indikator yang baik tentang pentingnya masalah. Misalnya, untuk bidang yang direkomendasikan:
- Nilai kosong sebesar 90% dapat menunjukkan masalah penguraian umum.
- Nilai kosong sebesar 25% dapat menunjukkan varian peristiwa yang tidak diurai dengan benar.
- Beberapa nilai kosong mungkin merupakan masalah yang dapat diabaikan.
Note
Kesalahan akan mencegah konten yang menggunakan parser berfungsi dengan benar. Peringatan tidak akan mencegah konten berfungsi, tetapi dapat mengurangi kualitas hasil.
Berpartisipasi dalam pengembangan parser
Anda mungkin ingin berkontribusi parser ini ke distribusi ASIM utama. Jika diterima, parser akan tersedia untuk setiap pelanggan sebagai parser bawaan ASIM.
Untuk berkontribusi dengan parser Anda:
- Kembangkan pengurai pemfilteran dan pengurai tanpa parameter.
- Buat file YAML untuk pengurai seperti yang dijelaskan dalam Menyebarkan Parser di atas.
- Pastikan pengurai Anda lulus semua pengujian tanpa kesalahan. Jika ada peringatan yang dibiarkan, dokumentasikan dalam file YAML parser.
- Buat permintaan pull terhadap repositori Microsoft Sentinel GitHub, termasuk:
Mendokumentasikan peringatan yang diterima
Jika peringatan yang tercantum oleh alat pengujian ASIM dianggap valid untuk parser, dokumentasikan peringatan yang diterima dalam file YAML parser menggunakan bagian Pengecualian seperti yang ditunjukkan pada contoh di bawah ini.
Exceptions:
- Field: DnsQuery
Warning: Invalid value
Exception: May have values such as "1164-ms-7.1440-9fdc2aab.3b2bd806-978e-11ec-8bb3-aad815b5cd42" which are not valid domains names. Those are related to TKEY RR requests.
- Field: DnsQuery
Warning: Empty value in mandatory field
Exception: May be empty for requests for root servers and for requests for RR type DNSKEY
Peringatan yang ditentukan dalam file YAML harus berupa bentuk singkat dari pesan peringatan yang mengidentifikasi secara unik. Nilai digunakan untuk mencocokkan pesan peringatan saat melakukan pengujian otomatis dan mengabaikannya.
Pedoman pengiriman sampel
Data sampel diperlukan saat menangani masalah pengurai dan untuk memastikan kesesuaian pembaruan di masa mendatang dengan sampel yang lebih lama. Sampel yang Anda kirimkan harus menyertakan varian peristiwa apa pun yang didukung pengurai. Pastikan bahwa peristiwa sampel mencakup semua kemungkinan jenis peristiwa, format peristiwa, dan variasi seperti peristiwa yang mewakili aktivitas yang berhasil dan gagal. Pastikan juga bahwa variasi dalam format nilai diwakili. Misalnya, jika nama host dapat direpresentasikan sebagai FQDN atau nama host sederhana, peristiwa sampel harus menyertakan kedua format.
Untuk mengirimkan sampel peristiwa, gunakan langkah-langkah berikut:
-
LogsDi layar, jalankan kueri yang akan mengekstrak dari tabel sumber hanya peristiwa yang dipilih oleh pengurai. Misalnya, untuk pengurai DNS Infoblox, gunakan kueri berikut:
Syslog
| where ProcessName == "named"
Ekspor hasil menggunakan opsi Ekspor ke CSV ke file bernama
<EventVendor>_<EventProduct>_<EventSchema>_IngestedLogs.csv, WhereEventProduct,EventProduct, danEventSchemaadalah nilai yang ditetapkan oleh pengurai ke bidang tersebut.LogsDi layar, jalankan kueri yang akan menghasilkan skema atau tabel input pengurai. Misalnya, untuk pengurai DNS Infoblox yang sama, kuerinya adalah:
Syslog
| getschema
Ekspor hasil menggunakan opsi Ekspor ke CSV ke file bernama
<TableName>_schema.csv, di manaTableNameadalah nama tabel sumber yang digunakan pengurai.Sertakan kedua file dalam PR Anda di folder
/Sample Data/ASIM. Jika file sudah ada, tambahkan handel GitHub Anda ke nama, misalnya:<EventVendor>_<EventProduct>_<EventSchema>_SchemaTest_<GitHubHandle>.csv
Pedoman pengiriman hasil pengujian
Hasil pengujian penting untuk memverifikasi kebenaran pengurai dan memahami pengecualian yang dilaporkan.
Untuk mengirimkan hasil pengujian Anda, gunakan langkah-langkah berikut:
Jalankan pengujian pengurai dan jelaskan di bagian pengujian .
dan ekspor hasil pengujian menggunakan opsi Ekspor ke CSV ke file bernama
<EventVendor>_<EventProduct>_<EventSchema>_SchemaTest.csvdan<EventVendor>_<EventProduct>_<EventSchema>_DataTest.csvmasing-masing.Sertakan kedua file dalam PR Anda di folder
/Parsers/ASim<schema>/Tests.
Konten terkait
Pelajari selengkapnya tentang parser ASIM:
- Gambaran umum pengurai ASIM
- Gunakan parser ASIM
- Mengelola parser ASIM
- Daftar parser ASIM
Pelajari selengkapnya tentang ASIM secara umum: