Struktur transformasi di Azure Monitor
Transformasi di Azure Monitor memungkinkan Anda memfilter atau memodifikasi data masuk sebelum disimpan di ruang kerja Analitik Log. Mereka diimplementasikan sebagai pernyataan Bahasa Kueri Kusto (KQL) dalam aturan pengumpulan data (DCR). Artikel ini menyediakan detail tentang bagaimana kueri ini disusun dan batasan pada bahasa KQL yang diizinkan.
Struktur transformasi
Pernyataan KQL diterapkan secara individu ke setiap entri di sumber data. Transformasi data harus memahami format data yang masuk dan buat output dalam struktur dari tabel target. Tabel virtual bernama source
mewakili aliran input. source
kolom tabel cocok dengan definisi aliran data input. Berikut ini adalah contoh khas dari transformasi. Contoh ini mencakup fungsionalitas berikut:
- Memfilter data masuk dengan
where
pernyataan. - Menambahkan kolom baru menggunakan
extend
operator. - Memformat output agar sesuai dengan kolom tabel target menggunakan
project
operator.
source
| where severity == "Critical"
| extend Properties = parse_json(properties)
| project
TimeGenerated = todatetime(["time"]),
Category = category,
StatusDescription = StatusDescription,
EventName = name,
EventId = tostring(Properties.EventId)
Batasan KQL
Karena transformasi diterapkan pada setiap rekaman secara individual, maka tidak dapat menggunakan operator KQL mana pun yang bertindak berdasarkan beberapa catatan. Hanya operator yang mengambil satu baris sebagai input dan mengembalikannya tidak lebih dari satu baris yang didukung. Misalnya, merangkum tidak didukung karena merangkum beberapa catatan. Lihat Fitur KQL yang didukung untuk daftar lengkap fitur yang didukung.
Transformasi dalam aturan pengumpulan data (DCR) memungkinkan Anda memfilter atau memodifikasi data masuk sebelum disimpan di ruang kerja Analitik Log. Artikel ini menjelaskan cara membangun transformasi dalam DCR, termasuk detail dan batasan Bahasa Kueri Kusto (KQL) yang digunakan untuk pernyataan transformasi.
Perintah Uraikan
Perintah penguraian dalam transformasi dibatasi hingga 10 kolom per pernyataan karena alasan performa. Jika transformasi Anda memerlukan penguraian lebih dari 10 kolom, bagi menjadi beberapa pernyataan seperti yang dijelaskan dalam perintah Pisahkan penguraian besar.
Kolom yang diperlukan
Output setiap transformasi harus berisi tanda waktu yang valid dalam kolom yang disebut TimeGenerated
jenis datetime
. Pastikan untuk menyertakannya di akhir extend
atau project
blok! Membuat atau memperbarui DCR tanpa TimeGenerated
dalam output transformasi menyebabkan kesalahan.
Menangani data dinamis
Pertimbangkan input berikut dengan data dinamis:
{
"TimeGenerated" : "2021-11-07T09:13:06.570354Z",
"Message": "Houston, we have a problem",
"AdditionalContext": {
"Level": 2,
"DeviceID": "apollo13"
}
}
Untuk mengakses properti di AdditionalContext, tentukan sebagai kolom jenis dinamis di aliran input:
"columns": [
{
"name": "TimeGenerated",
"type": "datetime"
},
{
"name": "Message",
"type": "string"
},
{
"name": "AdditionalContext",
"type": "dynamic"
}
]
Konten kolom AdditionalContext sekarang dapat diurai dan digunakan dalam transformasi KQL:
source
| extend parsedAdditionalContext = parse_json(AdditionalContext)
| extend Level = toint (parsedAdditionalContext.Level)
| extend DeviceId = tostring(parsedAdditionalContext.DeviceID)
Literal dinamis
parse_json
Gunakan fungsi untuk menangani literal dinamis.
Misalnya, kueri berikut menyajikan fungsionalitas serupa:
print d=dynamic({"a":123, "b":"hello", "c":[1,2,3], "d":{}})
print d=parse_json('{"a":123, "b":"hello", "c":[1,2,3], "d":{}}')
Fitur KQL yang didukung
Pernyataan yang didukung
Pernyataan let
Sisi kanan let
bisa berupa ekspresi skalar, ekspresi tabular, atau fungsi yang ditentukan pengguna. Hanya fungsi yang ditentukan pengguna dengan argumen skalar yang didukung.
Pernyataan ekspresi tabular
Sumber data yang didukung untuk pernyataan KQL hanya:
sumber, yang mewakili data sumber. Contohnya:
source | where ActivityId == "383112e4-a7a8-4b94-a701-4266dfc18e41" | project PreciseTimeStamp, Message
print
operator, yang selalu menghasilkan satu baris. Contohnya:print x = 2 + 2, y = 5 | extend z = exp2(x) + exp2(y)
Operator tabular
extend
project
print
where
parse
project-away
project-rename
datatable
columnifexists
(gunakan columnifexists alih-alih column_ifexists)
Operator skalar
Operator numerik
Semua Operator numerik didukung.
Operator aritmatika Tanggalwaktu dan Rentangwaktu
Semua operator aritmatika Tanggalwaktu dan Rentangwaktu didukung.
Operator string
Operator berikut Operator string didukung.
==
!=
=~
!~
contains
!contains
contains_cs
!contains_cs
has
!has
has_cs
!has_cs
startswith
!startswith
startswith_cs
!startswith_cs
endswith
!endswith
endswith_cs
!endswith_cs
matches regex
in
!in
Operator bitwise
Operator berikut Operator Bitwise didukung.
binary_and()
binary_or()
binary_xor()
binary_not()
binary_shift_left()
binary_shift_right()
Fungsi bernilai skalar
Fungsi Bitwise
Fungsi konversi
Fungsi TanggalWaktu dan RentangWaktu
ago
datetime_add
datetime_diff
datetime_part
dayofmonth
dayofweek
dayofyear
endofday
endofmonth
endofweek
endofyear
getmonth
getyear
hourofday
make_datetime
make_timespan
now
startofday
startofmonth
startofweek
startofyear
todatetime
totimespan
weekofyear
Fungsi dinamis dan array
Fungsi Matematika
Fungsi kondisional
Fungsi string
base64_encodestring
(gunakan base64_encodestring alih-alih base64_encode_tostring)base64_decodestring
(gunakan base64_decodestring alih-alih base64_decode_tostring)countof
extract
extract_all
indexof
isempty
isnotempty
parse_json
replace
split
strcat
strcat_delim
strlen
substring
tolower
toupper
hash_sha256
Fungsi jenis
Fungsi khusus
parse_cef_dictionary
Mengingat string yang berisi pesan CEF, parse_cef_dictionary
mengurai properti Ekstensi pesan ke dalam objek kunci/nilai dinamis. Titik koma adalah karakter cadangan yang harus diganti sebelum meneruskan pesan mentah ke dalam metode , seperti yang ditunjukkan dalam contoh.
| extend cefMessage=iff(cefMessage contains_cs ";", replace(";", " ", cefMessage), cefMessage)
| extend parsedCefDictionaryMessage =parse_cef_dictionary(cefMessage)
| extend parsecefDictionaryExtension = parsedCefDictionaryMessage["Extension"]
| project TimeGenerated, cefMessage, parsecefDictionaryExtension
geo_location
Mengingat string yang berisi alamat IP (IPv4 dan IPv6 didukung), geo_location
fungsi mengembalikan perkiraan lokasi geografis, termasuk atribut berikut:
- Negara
- Wilayah
- Status
- Kota
- Garis Lintang
- Garis bujur
| extend GeoLocation = geo_location("1.0.0.5")
Penting
Karena sifat layanan geolokasi IP yang digunakan oleh fungsi ini, ini dapat memperkenalkan latensi penyerapan data jika digunakan secara berlebihan. Berhati-hatilah saat menggunakan fungsi ini lebih dari beberapa kali per transformasi.
Kuotasi pengidentifikasi
Gunakan Kuotasi pengidentifikasi sesuai kebutuhan.
Langkah berikutnya
- Buat aturan pengumpulan data dan kaitannya dari komputer virtual menggunakan agen Azure Monitor.