Transformasi pengumpulan data di Azure Monitor

Dengan transformasi di Azure Monitor, Anda dapat memfilter atau memodifikasi data masuk sebelum dikirim ke ruang kerja Analitik Log. Artikel ini menyediakan deskripsi dasar transformasi dan cara penerapannya. Ini menyediakan tautan ke konten lain untuk membuat transformasi.

Transformasi dilakukan di Azure Monitor dalam alur penyerapan data setelah sumber data mengirimkan data dan sebelum dikirim ke tujuan. Sumber data mungkin melakukan pemfilterannya sendiri sebelum mengirim data tetapi kemudian mengandalkan transformasi untuk manipulasi lebih lanjut sebelum dikirim ke tujuan.

Transformasi didefinisikan dalam aturan pengumpulan data (DCR) dan menggunakan pernyataan Bahasa Kueri Kusto (KQL) yang diterapkan secara individual ke setiap entri dalam data masuk. Transformasi data harus memahami format data yang masuk dan membuat output dalam struktur yang diharapkan dari tujuan.

Diagram berikut mengilustrasikan proses transformasi untuk data masuk dan memperlihatkan kueri sampel yang mungkin digunakan. Lihat Struktur transformasi di Azure Monitor untuk detail tentang membangun kueri transformasi.

Diagram yang memperlihatkan transformasi waktu penyerapan untuk data masuk.

Mengapa menggunakan transformasi

Tabel berikut ini menjelaskan berbagai tujuan yang dapat Anda capai dengan menggunakan transformasi.

Kategori Detail
Menghapus data sensitif Anda mungkin memiliki sumber data yang mengirim informasi yang tidak ingin Anda simpan karena alasan privasi atau kesiapan.

Memfilter informasi sensitif. Memfilter seluruh baris atau kolom tertentu yang berisi informasi sensitif.

Mengaburkan informasi sensitif. Ganti informasi seperti digit dalam alamat IP atau nomor telepon dengan karakter umum.

Kirim ke tabel alternatif. Kirim rekaman sensitif ke tabel alternatif dengan konfigurasi kontrol akses berbasis peran yang berbeda.
Memperkaya data dengan informasi lebih lanjut atau terhitung Gunakan transformasi untuk menambahkan informasi ke data yang menyediakan konteks bisnis atau menyederhanakan kueri data nanti.

Tambahkan kolom dengan informasi selengkapnya. Misalnya, Anda dapat menambahkan kolom yang mengidentifikasi apakah alamat IP di kolom lain bersifat internal atau eksternal.

Tambahkan informasi khusus bisnis. Misalnya, Anda dapat menambahkan kolom yang menunjukkan divisi perusahaan berdasarkan informasi lokasi di kolom lain.
Mengurangi biaya data Karena Anda dikenakan biaya penyerapan untuk data apa pun yang dikirim ke ruang kerja Analitik Log, Anda ingin memfilter data apa pun yang tidak diperlukan untuk mengurangi biaya Anda.

Hapus seluruh baris. Misalnya, Anda mungkin memiliki pengaturan diagnostik untuk mengumpulkan log sumber daya dari sumber daya tertentu tetapi tidak memerlukan semua entri log yang dihasilkannya. Buat transformasi yang memfilter rekaman yang sesuai dengan kriteria tertentu.

Hapus kolom dari setiap baris. Misalnya, data Anda mungkin menyertakan kolom dengan data yang berlebihan atau memiliki nilai minimal. Buat transformasi yang memfilter kolom yang tidak diperlukan.

Mengurai data penting dari kolom. Anda mungkin memiliki tabel dengan data berharga yang terkubur di kolom tertentu. Gunakan transformasi untuk mengurai data berharga ke kolom baru dan menghapus yang asli.

Kirim baris tertentu ke log dasar. Kirim baris dalam data Anda yang memerlukan kemampuan kueri dasar ke tabel log dasar untuk biaya penyerapan yang lebih rendah.
Memformat data untuk tujuan Anda mungkin memiliki sumber data yang mengirim data dalam format yang tidak cocok dengan struktur tabel tujuan. Gunakan transformasi untuk memformat ulang data ke skema yang diperlukan.

Tabel yang didukung

Lihat Tabel yang mendukung transformasi di Log Azure Monitor untuk daftar tabel yang dapat digunakan dengan transformasi. Anda juga dapat menggunakan referensi data Azure Monitor yang mencantumkan atribut untuk setiap tabel, termasuk apakah itu mendukung transformasi. Selain tabel ini, tabel kustom apa pun (akhiran _CL) juga didukung.

  • Tabel Azure apa pun yang tercantum dalam Tabel yang mendukung transformasi di Log Azure Monitor. Anda juga dapat menggunakan referensi data Azure Monitor yang mencantumkan atribut untuk setiap tabel, termasuk apakah itu mendukung transformasi.
  • Tabel kustom apa pun yang dibuat untuk Agen Azure Monitor. (Tabel kustom MMA tidak dapat menggunakan transformasi)

Membuat transformasi

Ada beberapa metode untuk membuat transformasi tergantung pada metode pengumpulan data. Tabel berikut ini mencantumkan panduan untuk metode yang berbeda dalam membuat transformasi.

Kumpulan data Referensi
API penyerapan log Mengirim data ke Log Azure Monitor dengan menggunakan REST API (portal Azure)
Mengirim data ke Log Azure Monitor dengan menggunakan REST API (templat Azure Resource Manager)
Komputer virtual dengan agen Azure Monitor Menambahkan transformasi ke Log Azure Monitor
Kluster Kubernetes dengan wawasan Kontainer Transformasi data dalam wawasan Kontainer
Azure Event Hubs Tutorial: Menyerap peristiwa dari Azure Event Hubs ke log Azure Monitor (Pratinjau Umum)

Beberapa tujuan

Dengan transformasi, Anda dapat mengirim data ke beberapa tujuan di ruang kerja Analitik Log dengan menggunakan satu DCR. Anda menyediakan kueri KQL untuk setiap tujuan, dan hasil setiap kueri dikirim ke lokasi yang sesuai. Anda dapat mengirim kumpulan data yang berbeda ke tabel yang berbeda atau menggunakan beberapa kueri untuk mengirim kumpulan data yang berbeda ke tabel yang sama.

Misalnya, Anda dapat mengirim data peristiwa ke Azure Monitor dengan menggunakan API Penyerapan Log. Sebagian besar peristiwa harus dikirim tabel analitik di mana peristiwa tersebut dapat dikueri secara teratur, sementara peristiwa audit harus dikirim ke tabel kustom yang dikonfigurasi untuk log dasar untuk mengurangi biaya Anda.

Untuk menggunakan beberapa tujuan, saat ini Anda harus membuat DCR baru secara manual atau mengedit yang sudah ada. Lihat bagian Sampel untuk contoh DCR yang menggunakan beberapa tujuan.

Penting

Saat ini, tabel di DCR harus berada di ruang kerja Analitik Log yang sama. Untuk mengirim ke beberapa ruang kerja dari satu sumber data, gunakan beberapa DCR dan konfigurasikan aplikasi Anda untuk mengirim data ke masing-masing.

Diagram yang memperlihatkan transformasi mengirim data ke beberapa tabel.

Memantau transformasi

Lihat Memantau dan memecahkan masalah pengumpulan data DCR di Azure Monitor untuk detail tentang log dan metrik yang memantau kesehatan dan performa transformasi. Ini termasuk mengidentifikasi kesalahan apa pun yang terjadi di KQL dan metrik untuk melacak durasi berjalannya.

Biaya untuk transformasi

Meskipun transformasi itu sendiri tidak dikenakan biaya langsung, skenario berikut dapat mengakibatkan biaya tambahan:

  • Jika transformasi meningkatkan ukuran data masuk, seperti dengan menambahkan kolom terhitung, Anda akan dikenakan tarif penyerapan standar untuk data tambahan.
  • Jika transformasi mengurangi data yang diserap lebih dari 50%, Anda akan dikenakan biaya untuk jumlah data yang difilter di atas 50%.

Untuk menghitung biaya pemrosesan data yang dihasilkan dari transformasi, gunakan rumus berikut:
[GB difilter berdasarkan transformasi] - ([data GB yang diserap oleh alur] / 2). Tabel berikut ini memperlihatkan contoh.

Data yang diserap oleh alur Data yang dihilangkan oleh transformasi Data yang diserap oleh ruang kerja Analitik Log Biaya pemrosesan data Biaya penyerapan
20 GB 12 GB 8 GB 2 GB 1 8 GB
20 GB 8 GB 12 GB 0 GB 12 GB

1 Biaya ini tidak termasuk biaya untuk data yang diserap oleh ruang kerja Analitik Log.

Untuk menghindari biaya ini, Anda harus memfilter data yang diserap menggunakan metode alternatif sebelum menerapkan transformasi. Dengan demikian, Anda dapat mengurangi jumlah data yang diproses oleh transformasi dan, oleh karena itu, meminimalkan biaya tambahan.

Lihat Harga Azure Monitor untuk biaya saat ini untuk penyerapan dan retensi data log di Azure Monitor.

Penting

Jika Azure Sentinel diaktifkan untuk ruang kerja Analitik Log, tidak ada biaya penyerapan pemfilteran terlepas dari berapa banyak data yang difilter transformasi.

Sampel

Templat Resource Manager berikut menunjukkan sampel DCR dengan pola yang berbeda. Anda dapat menggunakan templat ini sebagai titik awal untuk membuat DCR dengan transformasi untuk skenario Anda sendiri.

Tujuan tunggal

Contoh berikut adalah DCR untuk Agen Azure Monitor yang mengirim data ke Syslog tabel. Dalam contoh ini, transformasi memfilter data untuk rekaman dengan error dalam pesan.

{ 
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "resources" : [
        {
            "type": "Microsoft.Insights/dataCollectionRules", 
            "name": "singleDestinationDCR", 
            "apiVersion": "2021-09-01-preview", 
            "location": "eastus", 
            "properties": { 
              "dataSources": { 
                "syslog": [ 
                  { 
                    "name": "sysLogsDataSource", 
                    "streams": [ 
                      "Microsoft-Syslog" 
                    ], 
                    "facilityNames": [ 
                      "auth",
                      "authpriv",
                      "cron",
                      "daemon",
                      "mark",
                      "kern",
                      "mail",
                      "news",
                      "syslog",
                      "user",
                      "uucp"
                    ], 
                    "logLevels": [ 
                      "Debug", 
                      "Critical", 
                      "Emergency" 
                    ] 
                  } 
                ] 
              }, 
              "destinations": { 
                "logAnalytics": [ 
                  { 
                    "workspaceResourceId": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/my-resource-group/providers/Microsoft.OperationalInsights/workspaces/my-workspace", 
                    "name": "centralWorkspace" 
                  } 
                ] 
              }, 
              "dataFlows": [ 
                { 
                  "streams": [ 
                    "Microsoft-Syslog" 
                  ], 
                  "transformKql": "source | where message has 'error'", 
                  "destinations": [ 
                    "centralWorkspace" 
                  ] 
                } 
              ] 
            }
        }
    ]
} 

Beberapa tabel Azure

Contoh berikut adalah DCR untuk data dari API Penyerapan Log yang mengirim data ke Syslog tabel dan SecurityEvent . DCR ini memerlukan terpisah dataFlow untuk masing-masing dengan yang berbeda transformKql dan OutputStream untuk masing-masing. Dalam contoh ini, semua data masuk dikirim ke Syslog tabel sementara data berbahaya juga dikirim ke SecurityEvent tabel. Jika Anda tidak ingin mereplikasi data berbahaya di kedua tabel, Anda bisa menambahkan where pernyataan ke kueri pertama untuk menghapus rekaman tersebut.

{ 
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "resources" : [
        { 
            "type": "Microsoft.Insights/dataCollectionRules", 
            "name": "multiDestinationDCR", 
            "location": "eastus", 
            "apiVersion": "2021-09-01-preview", 
            "properties": { 
                "dataCollectionEndpointId": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/my-resource-group/providers//Microsoft.Insights/dataCollectionEndpoints/my-dce",
                "streamDeclarations": { 
                    "Custom-MyTableRawData": { 
                        "columns": [ 
                            { 
                                "name": "Time", 
                                "type": "datetime" 
                            }, 
                            { 
                                "name": "Computer", 
                                "type": "string" 
                            }, 
                            { 
                                "name": "AdditionalContext", 
                                "type": "string" 
                            } 
                        ] 
                    } 
                }, 
                "destinations": { 
                    "logAnalytics": [ 
                        { 
                            "workspaceResourceId": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/my-resource-group/providers/Microsoft.OperationalInsights/workspaces/my-workspace", 
                            "name": "clv2ws1" 
                        }, 
                    ] 
                }, 
                "dataFlows": [ 
                    { 
                        "streams": [ 
                            "Custom-MyTableRawData" 
                        ], 
                        "destinations": [ 
                            "clv2ws1" 
                        ], 
                        "transformKql": "source | project TimeGenerated = Time, Computer, Message = AdditionalContext", 
                        "outputStream": "Microsoft-Syslog" 
                    }, 
                    { 
                        "streams": [ 
                            "Custom-MyTableRawData" 
                        ], 
                        "destinations": [ 
                            "clv2ws1" 
                        ], 
                        "transformKql": "source | where (AdditionalContext has 'malicious traffic!' | project TimeGenerated = Time, Computer, Subject = AdditionalContext", 
                        "outputStream": "Microsoft-SecurityEvent" 
                    } 
                ] 
            } 
        }
    ]
}

Kombinasi Tabel Azure dan kustom

Contoh berikut adalah DCR untuk data dari API Penyerapan Log yang mengirim data ke Syslog tabel dan tabel kustom dengan data dalam format yang berbeda. DCR ini memerlukan terpisah dataFlow untuk masing-masing dengan yang berbeda transformKql dan OutputStream untuk masing-masing. Saat menggunakan tabel kustom, penting untuk memastikan bahwa skema tujuan (tabel kustom Anda) berisi kolom kustom (cara menambahkan atau menghapus kolom kustom) yang cocok dengan skema rekaman yang Anda kirim. Misalnya, jika rekaman Anda memiliki bidang yang disebut SyslogMessage, tetapi tabel kustom tujuan hanya memiliki TimeGenerated dan RawData, Anda akan menerima peristiwa dalam tabel kustom hanya dengan bidang TimeGenerated yang diisi dan bidang RawData akan kosong. Bidang SyslogMessage akan dihilangkan karena skema tabel tujuan tidak berisi bidang string yang disebut SyslogMessage.

{ 
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "resources" : [
        { 
            "type": "Microsoft.Insights/dataCollectionRules", 
            "name": "multiDestinationDCR", 
            "location": "eastus", 
            "apiVersion": "2021-09-01-preview", 
            "properties": { 
                "dataCollectionEndpointId": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/my-resource-group/providers//Microsoft.Insights/dataCollectionEndpoints/my-dce",
                "streamDeclarations": { 
                    "Custom-MyTableRawData": { 
                        "columns": [ 
                            { 
                                "name": "Time", 
                                "type": "datetime" 
                            }, 
                            { 
                                "name": "Computer", 
                                "type": "string" 
                            }, 
                            { 
                                "name": "AdditionalContext", 
                                "type": "string" 
                            } 
                        ] 
                    } 
                }, 
                "destinations": { 
                    "logAnalytics": [ 
                        { 
                            "workspaceResourceId": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/my-resource-group/providers/Microsoft.OperationalInsights/workspaces/my-workspace", 
                            "name": "clv2ws1" 
                        }, 
                    ] 
                }, 
                "dataFlows": [ 
                    { 
                        "streams": [ 
                            "Custom-MyTableRawData" 
                        ], 
                        "destinations": [ 
                            "clv2ws1" 
                        ], 
                        "transformKql": "source | project TimeGenerated = Time, Computer, SyslogMessage = AdditionalContext", 
                        "outputStream": "Microsoft-Syslog" 
                    }, 
                    { 
                        "streams": [ 
                            "Custom-MyTableRawData" 
                        ], 
                        "destinations": [ 
                            "clv2ws1" 
                        ], 
                        "transformKql": "source | extend jsonContext = parse_json(AdditionalContext) | project TimeGenerated = Time, Computer, AdditionalContext = jsonContext, ExtendedColumn=tostring(jsonContext.CounterName)", 
                        "outputStream": "Custom-MyTable_CL" 
                    } 
                ] 
            } 
        }
    ]
}

Langkah berikutnya