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.
Artikel ini menjelaskan cara mengimplementasikan transformasi data dengan data log kontainer dari kluster Kubernetes Anda. Transformasi di Azure Monitor memungkinkan Anda memodifikasi atau memfilter data sebelum diserap di ruang kerja Analitik Log Anda. Mereka memungkinkan Anda melakukan tindakan seperti memfilter data yang dikumpulkan dari kluster Anda untuk menghemat biaya atau memproses data masuk untuk membantu kueri data Anda.
- Memfilter baris berdasarkan kriteria tertentu
- Menghapus atau mengganti nama kolom
- Menutupi bidang sensitif
- Tambahkan bidang terhitung secara kalkulatif
Tip
Meskipun transformasi adalah fitur yang kuat dan andal, transformasi harus digunakan hanya setelah menggunakan metode pemfilteran lain untuk log Kubernetes Anda. Transformasi lebih kompleks untuk menerapkan dan meningkatkan penggunaan jaringan karena data dikirim dari kluster sebelum difilter. Lihat Memfilter dan menyesuaikan pengumpulan data untuk kluster Kubernetes untuk deskripsi konfigurasi yang berbeda
Aturan pengumpulan data
Transformasi diterapkan dalam aturan pengumpulan data (DCR) yang digunakan untuk mengonfigurasi pengumpulan data di Azure Monitor. Saat Anda mengaktifkan pemantauan metrik Prometheus dan pencatatan kontainer untuk kluster Kubernetes di Azure Monitor, DCR terpisah dibuat untuk setiap jenis data. Transformasi dapat ditambahkan ke DCR yang mengumpulkan log kontainer.
Catatan
Lihat DCR dan sumber daya terkait untuk daftar terperinci DCR yang dibuat untuk kluster Kubernetes.
Untuk membuat transformasi, lakukan salah satu tindakan berikut:
- Kluster baru. Gunakan templat ARM yang ada untuk menghubungkan kluster AKS ke Container Insights. Ubah DCR dalam templat tersebut dengan konfigurasi yang diperlukan, termasuk transformasi yang mirip dengan salah satu sampel di bawah ini.
- DCR yang sudah ada. Setelah kluster di-onboard ke Container Insights dan pengumpulan data telah dikonfigurasi, edit DCR-nya untuk menyertakan transformasi menggunakan salah satu metode dalam Mengedit Aturan Pengumpulan Data.
Catatan
Saat ini ada antarmuka pengguna minimal untuk mengedit DCR, yang diperlukan untuk menambahkan transformasi. Dalam kebanyakan kasus, Anda perlu mengedit DCR secara manual. Artikel ini menjelaskan struktur DCR yang akan diterapkan. Lihat Membuat dan mengedit aturan pengumpulan data (DCR) di Azure Monitor untuk panduan tentang cara menerapkan struktur tersebut.
Sumber data
Bagian Sumber data DCR menentukan berbagai jenis data masuk yang akan diproses DCR. Untuk wawasan kontainer, ini adalah ekstensi wawasan kontainer, yang mencakup satu atau lebih yang telah ditentukan sebelumnya dan dimulai dengan awalan streams.
Daftar aliran wawasan kontainer dalam DCR bergantung pada prasetel Biaya yang Anda pilih untuk kluster. Jika Anda mengumpulkan semua tabel, DCR akan menggunakan aliran Microsoft-ContainerInsights-Group-Default, yang merupakan aliran grup yang menyertakan semua aliran yang tercantum dalam Stream values. Anda harus mengubahnya menjadi aliran individual jika Anda akan menggunakan transformasi. Pengaturan prasetel biaya lainnya sudah akan menggunakan aliran individual.
Sampel di bawah ini menunjukkan Microsoft-ContainerInsights-Group-Default stream. Lihat bagian di bawah ini untuk contoh menggunakan stream individual.
"dataSources": {
"extensions": [
{
"streams": [
"Microsoft-ContainerInsights-Group-Default"
],
"name": "ContainerInsightsExtension",
"extensionName": "ContainerInsights",
"extensionSettings": {
"dataCollectionSettings": {
"interval": "1m",
"namespaceFilteringMode": "Off",
"namespaces": null,
"enableContainerLogV2": true
}
}
}
]
}
Aliran data
Bagian Aliran data DCR mencocokkan aliran dengan tujuan yang ditentukan di bagian destinations DCR. Nama tabel tidak harus ditentukan untuk aliran yang diketahui jika data dikirim ke tabel default. Aliran yang tidak memerlukan transformasi dapat dikelompokkan bersama dalam satu entri yang hanya mencakup tujuan ruang kerja. Masing-masing akan dikirim ke tabel defaultnya.
Buat entri terpisah untuk aliran yang memerlukan transformasi. Ini harus mencakup tujuan ruang kerja dan properti transformKql. Jika Anda mengirim data ke tabel alternatif, maka Anda perlu menyertakan outputStream properti yang menentukan nama tabel tujuan.
Sampel di bawah ini menunjukkan bagian dataFlows untuk satu aliran dengan transformasi. Lihat sampel di bawah ini untuk beberapa aliran data dalam satu DCR.
"dataFlows": [
{
"streams": [
"Microsoft-ContainerLogV2"
],
"destinations": [
"ciworkspace"
],
"transformKql": "source | where PodNamespace == 'kube-system'"
}
]
Penyaringan data
Contoh berikut memfilter data dari ContainerLogV2 berdasarkan kolom LogLevel. Hanya rekaman dengan LogLevel atau errorcritical yang akan dikumpulkan karena ini adalah entri yang mungkin Anda gunakan untuk memperingatkan dan mengidentifikasi masalah dalam kluster. Mengumpulkan dan menyimpan tingkat lain seperti info dan debug menghasilkan biaya tanpa nilai yang signifikan.
Anda bisa mengambil rekaman ini menggunakan kueri log berikut.
ContainerLogV2 | where LogLevel in ('error', 'critical')
Logika ini diperlihatkan dalam diagram berikut.
Dalam transformasi, nama source tabel digunakan untuk mewakili data masuk. Berikut ini adalah kueri yang dimodifikasi untuk digunakan dalam transformasi.
source | where LogLevel in ('error', 'critical')
Sampel berikut menunjukkan transformasi ini ditambahkan ke DCR Container Insights. Perhatikan bahwa aliran data terpisah digunakan untuk Microsoft-ContainerLogV2 karena ini adalah satu-satunya aliran masuk yang harus diaplikasikan transformasi. Aliran data terpisah digunakan untuk aliran lain.
{
"properties": {
"location": "eastus2",
"kind": "Linux",
"dataSources": {
"syslog": [],
"extensions": [
{
"streams": [
"Microsoft-ContainerLogV2",
"Microsoft-KubeEvents",
"Microsoft-KubePodInventory"
],
"extensionName": "ContainerInsights",
"extensionSettings": {
"dataCollectionSettings": {
"interval": "1m",
"namespaceFilteringMode": "Off",
"enableContainerLogV2": true
}
},
"name": "ContainerInsightsExtension"
}
]
},
"destinations": {
"logAnalytics": [
{
"workspaceResourceId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/my-resource-group/providers/microsoft.operationalinsights/workspaces/my-workspace",
"workspaceId": "00000000-0000-0000-0000-000000000000",
"name": "ciworkspace"
}
]
},
"dataFlows": [
{
"streams": [
"Microsoft-KubeEvents",
"Microsoft-KubePodInventory"
],
"destinations": [
"ciworkspace"
],
},
{
"streams": [
"Microsoft-ContainerLogV2"
],
"destinations": [
"ciworkspace"
],
"transformKql": "source | where LogLevel in ('error', 'critical')"
}
],
},
}
Mengirim data ke tabel yang berbeda
Dalam contoh di atas, hanya rekaman yang memiliki LogLevel bernilai error atau critical yang dikumpulkan. Strategi alternatif alih-alih tidak mengumpulkan rekaman ini sama sekali adalah mengonfigurasi ContainerLogV2 untuk log Dasar dan mengirim rekaman ini ke tabel alternatif.
Untuk strategi ini, diperlukan dua transformasi. Transformasi pertama mengirimkan rekaman dengan LogLevel atau errorcritical ke tabel kustom bernama ContainerLogV2_CL. Transformasi kedua mengirimkan rekaman lain ke standar ContainerLogV2. Kueri untuk masing-masing ditunjukkan di bawah ini menggunakan source untuk data masuk seperti yang dijelaskan dalam contoh sebelumnya.
# Return error and critical logs
source | where LogLevel in ('error', 'critical')
# Return logs that aren't error or critical
source | where LogLevel !in ('error', 'critical')
Logika ini diperlihatkan dalam diagram berikut.
Penting
Sebelum menginstal DCR dalam sampel ini, Anda harus membuat tabel baru dengan skema ContainerLogV2yang sama dengan . Beri nama ContainerLogV2_CL.
Sampel berikut menunjukkan transformasi ini ditambahkan ke DCR Container Insights. Ada dua aliran data untuk Microsoft-ContainerLogV2 dalam DCR ini, satu untuk setiap transformasi. Yang pertama dikirim ke tabel default yang tidak perlu Anda tentukan nama tabelnya. Yang kedua memerlukan outputStream properti untuk menentukan tabel tujuan.
{
"properties": {
"location": "eastus2",
"kind": "Linux",
"dataSources": {
"syslog": [],
"extensions": [
{
"streams": [
"Microsoft-ContainerLogV2",
"Microsoft-KubeEvents",
"Microsoft-KubePodInventory"
],
"extensionName": "ContainerInsights",
"extensionSettings": {
"dataCollectionSettings": {
"interval": "1m",
"namespaceFilteringMode": "Off",
"enableContainerLogV2": true
}
},
"name": "ContainerInsightsExtension"
}
]
},
"destinations": {
"logAnalytics": [
{
"workspaceResourceId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/my-resource-group/providers/microsoft.operationalinsights/workspaces/my-workspace",
"workspaceId": "00000000-0000-0000-0000-000000000000",
"name": "ciworkspace"
}
]
},
"dataFlows": [
{
"streams": [
"Microsoft-KubeEvents",
"Microsoft-KubePodInventory"
],
"destinations": [
"ciworkspace"
],
},
{
"streams": [
"Microsoft-ContainerLogV2"
],
"destinations": [
"ciworkspace"
],
"transformKql": "source | where LogLevel !in ('error', 'critical')"
},
{
"streams": [
"Microsoft-ContainerLogV2"
],
"destinations": [
"ciworkspace"
],
"transformKql": "source | where LogLevel in ('error','critical')",
"outputStream": "Custom-ContainerLogV2_CL"
}
],
},
}
Langkah berikutnya
- Baca selengkapnya tentang transformasi dan aturan pengumpulan data di Azure Monitor.