Struktur transformasi di Azure Monitor

Transformasi dalam Azure Monitor memungkinkan Anda memfilter atau memodifikasi data yang masuk sebelum disimpan di ruang kerja Log Analytics. 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 yang masuk dengan pernyataan di mana
  • Menambahkan kolom baru menggunakan operator perpanjang
  • Memformat output agar sesuai dengan kolom tabel target menggunakan operator proyek
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 yang 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.

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 akan 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

Gunakan fungsi parse_json 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. Misalnya:
source
| where ActivityId == "383112e4-a7a8-4b94-a701-4266dfc18e41"
| project PreciseTimeStamp, Message
  • operator cetak, yang selalu menghasilkan satu baris. Misalnya:
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.

  • ==
  • !=
  • =~
  • !~
  • mengandung
  • !contains
  • contains_cs
  • !contains_cs
  • has
  • !Hsa
  • 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

Sample output of parse_cef_dictionary function.

geo_location

Mengingat string yang berisi alamat IP (IPv4 dan IPv6 didukung), geo_location fungsi mengembalikan perkiraan lokasi geografis, termasuk atribut berikut:

  • Negara
  • Wilayah
  • Provinsi
  • Kota
  • Garis Lintang
  • Garis bujur
| extend GeoLocation = geo_location("1.0.0.5")

Screenshot of sample output of geo_location function.

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