Bagikan melalui


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

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

Fungsi dinamis dan array

Fungsi Matematika

Fungsi kondisional

Fungsi string

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

Sampel output fungsi parse_cef_dictionary.

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

Cuplikan layar output sampel fungsi geo_location.

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