Mengonfigurasi pengumpulan log kontainer dengan ConfigMap

Kluster Kubernetes menghasilkan sejumlah besar data yang dikumpulkan oleh Azure Monitor. Karena Anda dikenakan biaya untuk penyerapan dan retensi data ini, Anda dapat secara signifikan mengurangi biaya pemantauan dengan memfilter data yang tidak Anda butuhkan. Artikel ini menjelaskan cara menggunakan ConfigMap untuk mengonfigurasi dan memfilter kumpulan log kontainer dan variabel lingkungan dari kluster Anda. Anda juga dapat menggunakan ConfigMap untuk mengaktifkan pengumpulan log platform dari namespace sistem Kubernetes dan untuk mengaktifkan pemfilteran berbasis anotasi untuk workload.

Tip

Sebelum menerapkan salah satu opsi pemfilteran yang dijelaskan dalam artikel ini, pastikan Anda memilih profil koleksi log yang sesuai dengan kebutuhan Anda. Gunakan informasi dalam artikel ini untuk lebih menyempurnakan pengaturan pengumpulan data untuk kluster Anda.

Prasyarat

  • Versi agen minimum yang didukung untuk mengumpulkan variabel stdout, stderr, dan lingkungan dari beban kerja kontainer adalah ciprod06142019 atau yang lebih baru.

Important

Mulai Juni 2026, kluster AKS Otomatis baru secara default akan mengaktifkan kumpulan simpul sistem terkelola. Untuk mempelajari detail dan manfaat utama fitur ini, lihat Kluster Otomatis AKS dengan kumpulan simpul sistem terkelola. Kluster AKS Otomatis dengan kumpulan simpul sistem terkelola diaktifkan tidak mendukung konfigurasi pengumpulan log kontainer dengan ConfigMap.

Mengonfigurasi dan menyebarkan ConfigMap

Gunakan prosedur berikut untuk mengonfigurasi dan menyebarkan file konfigurasi ConfigMap Anda ke kluster Anda:

  1. Unduh templat ConfigMap konfigurasi agen di https://aka.ms/container-azm-ms-agentconfig dan buka di editor.

  2. Edit file YAML ConfigMap dengan kustomisasi Anda. Templat mencakup semua pengaturan yang valid dengan deskripsi. Untuk mengaktifkan pengaturan, hapus karakter komentar (#) dan atur nilainya.

  3. Buat ConfigMap dengan menjalankan perintah kubectl berikut:

    kubectl config set-context <cluster-name>
    kubectl apply -f <configmap_yaml_file.yaml>
    
    # Example: 
    kubectl config set-context my-cluster
    kubectl apply -f container-azm-ms-agentconfig.yaml
    

    Perubahan konfigurasi dapat memakan waktu beberapa menit untuk selesai sebelum diterapkan. Kemudian semua pod Agen Azure Monitor di dalam kluster akan dimulai ulang. Pengaktifan ulang adalah pengaktifan ulang bertahap untuk semua pod Agen Azure Monitor, jadi tidak semuanya diaktifkan ulang pada saat yang sama. Setelah proses mulai ulang selesai, Anda akan menerima pesan yang mirip dengan hasil berikut:

    configmap "container-azm-ms-agentconfig" created`.
    

Verifikasi konfigurasi

Untuk memverifikasi konfigurasi berhasil diterapkan ke kluster, gunakan perintah berikut untuk meninjau log dari pod agen.

kubectl logs ama-logs-fdf58 -n kube-system -c ama-logs

Jika ada kesalahan konfigurasi dari pod Agen Azure Monitor, output akan menampilkan kesalahan yang mirip dengan yang berikut:

***************Start Config Processing******************** 
config::unsupported/missing config schema version - 'v21' , using defaults

Gunakan opsi berikut untuk melakukan lebih banyak pemecahan masalah perubahan konfigurasi:

  • Dari pod agen, gunakan perintah yang sama kubectl logs.

  • Tinjau log langsung untuk kesalahan yang mirip dengan yang berikut ini:

    config::error::Exception while parsing config map for log collection/env variable settings: \nparse error on value \"$\" ($end), using defaults, please check config map for errors
    

Data dikirim ke tabel KubeMonAgentEvents di ruang kerja Log Analytics Anda setiap jam dengan tingkat keparahan kesalahan untuk kesalahan konfigurasi. Jika tidak ada kesalahan, entri dalam tabel akan memiliki data dengan info tingkat keparahan, yang melaporkan tidak ada kesalahan. Kolom Tags berisi informasi lebih lanjut tentang pod dan ID kontainer tempat kesalahan terjadi dan juga kemunculan pertama, kemunculan terakhir, dan hitungan dalam satu jam terakhir.

Memverifikasi versi skema

Versi skema konfigurasi yang didukung tersedia sebagai anotasi pod (schema-versions) pada pod Azure Monitor Agent. Anda dapat melihatnya dengan perintah kubectl berikut.

kubectl describe pod ama-logs-fdf58 -n=kube-system.

Filter log kontainer

Log kontainer adalah log stderr dan stdout yang dihasilkan oleh kontainer di kluster Kubernetes Anda. Log ini disimpan di tabel ContainerLogV2 di ruang kerja Log Analytics Anda. Secara default semua log kontainer dikumpulkan, tetapi Anda dapat memfilter log dari namespace tertentu atau menonaktifkan pengumpulan log kontainer sepenuhnya.

Edit bagian log_collection_settings ConfigMap untuk mengonfigurasi pengumpulan log stderr dan stdout secara terpisah untuk kluster. Contoh berikut menunjukkan pengaturan ConfigMap untuk mengumpulkan stdout dan stderr dengan mengecualikan namespace kube-system dan gatekeeper-system.

[log_collection_settings]
    [log_collection_settings.stdout]
        enabled = true
        exclude_namespaces = ["kube-system","gatekeeper-system"]

    [log_collection_settings.stderr]
        enabled = true
        exclude_namespaces = ["kube-system","gatekeeper-system"]

    [log_collection_settings.enrich_container_logs]
        enabled = true

Nota

Anda juga dapat mengonfigurasi pemfilteran namespace di profil log untuk kluster, tetapi ini tidak berlaku untuk data yang dikirim ke ContainerLogV2. Data ini hanya dapat difilter menggunakan ConfigMap.

Pemfilteran log platform (namespace Sistem Kubernetes)

Secara pengaturan awal, log kontainer dari namespace sistem tidak disertakan dalam pengumpulan untuk meminimalkan biaya Log Analytics. Log kontainer sistem bisa sangat penting, terutama dalam skenario pemecahan masalah tertentu. Fitur ini dibatasi untuk namespace sistem berikut:

  • kube-system
  • gatekeeper-system
  • calico-system
  • azure-arc
  • kube-public
  • kube-node-lease.

Edit pengaturan collect_system_pod_logs di bagian log_collection_settings dalam ConfigMap untuk mengaktifkan log platform pada kluster. Anda juga harus memastikan bahwa namespace sistem tidak ada dalam setelan exclude_namespaces.

Contoh berikut menunjukkan pengaturan ConfigMap untuk mengumpulkan log stdout dan stderr dari kontainer di dalam namespace coredns.

[log_collection_settings]
    [log_collection_settings.stdout]
        enabled = true
        exclude_namespaces = ["gatekeeper-system"]
        collect_system_pod_logs = ["kube-system:coredns"]

    [log_collection_settings.stderr]
        enabled = true
        exclude_namespaces = ["kube-system","gatekeeper-system"]
        collect_system_pod_logs = ["kube-system:coredns"]

Pemfilteran berbasis anotasi untuk beban kerja

Pemfilteran berbasis anotasi memungkinkan Anda mengecualikan koleksi log untuk pod dan kontainer tertentu dengan membuat anotasi pod. Ini dapat mengurangi biaya pengolahan log Anda secara signifikan dan memungkinkan Anda untuk fokus pada informasi yang relevan tanpa harus memilah kebisingan.

filter_using_annotations Edit pengaturan di bagian log_collection_settings ConfigMap untuk mengaktifkan pemfilteran berbasis anotasi.

[log_collection_settings.filter_using_annotations]
   enabled = true

Anda juga harus menambahkan anotasi yang diperlukan pada spesifikasi pod beban kerja Anda. Tabel berikut menyoroti berbagai kemungkinan anotasi pod.

Annotation Description
fluentbit.io/exclude: "true" Mengecualikan aliran stdout dan stderr di semua kontainer pada Pod
fluentbit.io/exclude_stdout: "true" Hanya mengecualikan saluran stdout pada semua kontainer dalam Pod
fluentbit.io/exclude_stderr: "true" Mengecualikan hanya aliran stderr pada semua kontainer dalam Pod
fluentbit.io/exclude-container1: "true" Mengecualikan kedua aliran stdout & stderr hanya untuk kontainer1 di pod
fluentbit.io/exclude_stdout-container1: "true" Kecualikan hanya stdout untuk kontainer1 di pod

Nota

Anotasi ini berbasis bit fasih. Jika Anda menggunakan solusi pengumpulan log berbasis fluent-bit Anda sendiri dengan filter plugin Kubernetes dan pengecualian berbasis anotasi, hal ini akan menyebabkan penghentian pengumpulan log dari Container Insights maupun solusi Anda sendiri.

Berikut ini adalah contoh anotasi fluentbit.io/exclude: "true" dalam spesifikasi Pod:

apiVersion: v1 
kind: Pod 
metadata: 
 name: apache-logs 
 labels: 
  app: apache-logs 
 annotations: 
  fluentbit.io/exclude: "true" 
spec: 
 containers: 
 - name: apache 
  image: edsiper/apache_logs 

Menyaring variabel lingkungan

Edit log_collection_settings.env_var pengaturan di bagian log_collection_settings dari ConfigMap untuk mengaktifkan pengumpulan variabel lingkungan di semua pod dan simpul.

[log_collection_settings.env_var]
    enabled = true

Jika pengumpulan variabel lingkungan diaktifkan secara global, Anda dapat menonaktifkannya untuk kontainer tertentu dengan mengatur variabel AZMON_COLLECT_ENV lingkungan ke False baik dengan pengaturan Dockerfile atau dalam file konfigurasi untuk Pod di bawah bagian .env: Jika kumpulan variabel lingkungan dinonaktifkan secara global, Anda tidak dapat mengaktifkan koleksi untuk kontainer tertentu. Satu-satunya penggantian yang dapat diterapkan pada tingkat kontainer adalah menonaktifkan pengumpulan ketika sudah diaktifkan secara global.

Pengaturan ConfigMap

Tabel berikut menjelaskan pengaturan yang dapat Anda konfigurasi untuk mengontrol pengumpulan data dengan konfigurasi agen ConfigMap.

Setting Jenis data Nilai Description
schema-version String (peka terhadap huruf besar dan kecil) v1 Digunakan oleh agen saat mengurai ConfigMap ini. Versi skema yang saat ini didukung adalah v1. Mengubah nilai ini tidak didukung dan akan ditolak saat ConfigMap dievaluasi.
config-version String Memungkinkan Anda melacak versi file konfigurasi ini di sistem/repositori kontrol sumber Anda. Karakter maksimum yang diizinkan adalah 10, dan semua karakter lainnya terpotong.
[pengaturan_koleksi_log]
[stdout]
enabled
Boolean true
false
Mengontrol apakah pengumpulan log kontainer stdout diaktifkan. Ketika diatur ke true dan tidak ada namespace yang dikecualikan untuk pengumpulan log stdout, log stdout akan dikumpulkan dari setiap kontainer di semua pod dan node dalam kluster. Jika tidak ditentukan dalam ConfigMap, nilai defaultnya adalah true.
[stdout]
exclude_namespaces
String Array yang dipisahkan koma Array namespace Kubernetes yang log stdout-nya tidak akan dikumpulkan. Pengaturan ini hanya efektif jika enabled diatur ke true. Jika tidak ditentukan dalam ConfigMap, nilai defaultnya adalah
["kube-system","gatekeeper-system"].
[stderr]
enabled
Boolean true
false
Mengontrol apakah pengumpulan log kontainer stderr diaktifkan. Ketika disetel ke true dan tidak ada namespace yang dikecualikan untuk pengumpulan log stderr, log stderr akan dikumpulkan dari semua kontainer di semua pod dan simpul dalam kluster. Jika tidak ditentukan dalam ConfigMap, nilai defaultnya adalah true.
[stderr]
exclude_namespaces
String Array yang dipisahkan koma Array namespace Kubernetes untuk mana log stderr tidak akan dikumpulkan. Pengaturan ini hanya efektif jika enabled diatur ke true. Jika tidak ditentukan dalam ConfigMap, nilai defaultnya adalah
["kube-system","gatekeeper-system"].
[env_var]
enabled
Boolean true
false
Mengontrol pengumpulan variabel lingkungan di semua pod dan simpul dalam kluster. Jika tidak ditentukan dalam ConfigMap, nilai defaultnya adalah true.
[enrich_container_logs]
enabled
Boolean true
false
Mengontrol pengayaan log kontainer untuk mengisi nilai properti Name dan Image pada setiap rekaman log yang ditulis ke dalam tabel ContainerLog untuk semua log kontainer di kluster. Jika tidak ditentukan dalam ConfigMap, nilai defaultnya adalah false.
[collect_all_kube_events]
enabled
Boolean true
false
Mengontrol apakah peristiwa Kube dari semua jenis dikumpulkan. Secara default, peristiwa Kube dengan jenis Normal tidak dikumpulkan. Ketika pengaturan ini adalah true, peristiwa Normal tidak lagi difilter, dan semua peristiwa dikumpulkan. Jika tidak ditentukan dalam ConfigMap, nilai defaultnya adalah false.
[schema]
containerlog_schema_version
String (peka terhadap huruf besar dan kecil) v2
v1
Mengatur format pemrosesan log. Jika v2, tabel ContainerLogV2 digunakan. Jika v1, tabel ContainerLog digunakan (tabel ini tidak digunakan lagi). Untuk kluster yang mengaktifkan wawasan kontainer menggunakan Azure CLI versi 2.54.0 atau yang lebih tinggi, pengaturan defaultnya adalah v2. Lihat Log Wawasan Kontainer untuk detailnya.
[enable_multiline_logs]
enabled
Boolean true
false
Mengatur apakah log kontainer dengan banyak baris diaktifkan. Lihat Pengelogan multibaris di Container Insights untuk lebih jelasnya. Jika tidak ditentukan dalam ConfigMap, nilai defaultnya adalah false. Ini mengharuskan schema pengaturan menjadi v2.
[metadata_collection]
enabled
Boolean true
false
Mengontrol apakah metadata dikumpulkan dalam KubernetesMetadata kolom ContainerLogV2 tabel.
[metadata_collection]
include_fields
String Array yang dipisahkan koma Daftar bidang metadata yang akan disertakan. Jika pengaturan tidak digunakan, semua kolom dikumpulkan. Nilai yang valid adalah ["podLabels","podAnnotations","podUid","image","imageID","imageRepo","imageTag"]
[log_collection_settings.multi_tenancy]
enabled
Boolean true
false
Mengontrol apakah multitenansi diaktifkan. Lihat Logging terkelola multitenancy untuk detailnya. Jika tidak ditentukan dalam ConfigMap, nilai defaultnya adalah false.
[pengaturan_koleksi_metrik]
[collect_kube_system_pv_metrics]
enabled
Boolean true
false
Memungkinkan pengumpulan metrik penggunaan volume persisten (PV) di namespace kube-system. Secara bawaan, metrik penggunaan untuk volume persisten dengan klaim volume tetap di namespace kube-system tidak dikumpulkan. Ketika pengaturan ini diatur ke true, metrik penggunaan PV untuk semua namespace akan dikumpulkan. Jika tidak ditentukan dalam ConfigMap, nilai defaultnya adalah false.
[agent_settings]
[proxy_config]
ignore_proxy_settings
Boolean true
false
Ketika true, pengaturan proksi diabaikan. Untuk lingkungan AKS dan Kubernetes berkemampuan Arc, jika kluster Anda dikonfigurasi dengan proksi penerusan, pengaturan proksi akan diterapkan secara otomatis dan digunakan oleh agen. Untuk konfigurasi tertentu, seperti dengan AMPLS + Proxy, Anda mungkin ingin konfigurasi proksi diabaikan. Jika tidak ditentukan dalam ConfigMap, nilai defaultnya adalah false.
[agent_settings.fbit_config]
enable_internal_metrics Boolean true
false
Mengontrol apakah pengumpulan metrik internal diaktifkan. Jika tidak ditentukan dalam ConfigMap, nilai defaultnya adalah false.

Dampak pada visualisasi dan pemberitahuan

Jika Anda memiliki pemberitahuan atau buku kerja kustom menggunakan data wawasan Kontainer, maka mengubah pengaturan pengumpulan data Anda mungkin menurunkan pengalaman tersebut. Jika Anda mengecualikan namespaces atau mengurangi frekuensi pengumpulan data, tinjau peringatan, dasbor, dan buku kerja yang sudah ada menggunakan data ini.

Untuk memindai pemberitahuan yang mereferensikan tabel ini, jalankan kueri Azure Resource Graph berikut:

resources
| where type in~ ('microsoft.insights/scheduledqueryrules') and ['kind'] !in~ ('LogToMetric')
| extend severity = strcat("Sev", properties["severity"])
| extend enabled = tobool(properties["enabled"])
| where enabled in~ ('true')
| where tolower(properties["targetResourceTypes"]) matches regex 'microsoft.operationalinsights/workspaces($|/.*)?' or tolower(properties["targetResourceType"]) matches regex 'microsoft.operationalinsights/workspaces($|/.*)?' or tolower(properties["scopes"]) matches regex 'providers/microsoft.operationalinsights/workspaces($|/.*)?'
| where properties contains "Perf" or properties  contains "InsightsMetrics" or properties  contains "ContainerInventory" or properties  contains "ContainerNodeInventory" or properties  contains "KubeNodeInventory" or properties  contains"KubePodInventory" or properties  contains "KubePVInventory" or properties  contains "KubeServices" or properties  contains "KubeEvents" 
| project id,name,type,properties,enabled,severity,subscriptionId
| order by tolower(name) asc

Langkah selanjutnya