kubernetes container_name mendapatkan null di fluentdconfiguration
Saya mencoba mendapatkan log dari wadah aplikasi saya dan melampirkan agen log fluentd sebagai wadah bantuan dalam proyek saya. Dan saya ingin mendapatkan log mana yang berasal dari aplikasi mana di dasbor Kibana saya. Itu sebabnya saya mengonfigurasi seperti itu di fluentd.
<source>
@id fluentd-containers.log
@type tail
path /var/log/containers/mylog*.log
pos_file /var/log/es-containers.log.pos
time_format %Y-%m-%dT%H:%M:%S.%NZ
tag kubernetes.myapp.container
read_from_head true
<parse>
@type none
</parse>
</source>
<filter kubernetes**>
@type record_transformer
enable_ruby true
<record>
service_name ${tag_parts[1]} instance_name ${record["kubernetes"]["container_name"]}
log_type ${tag_parts[2]} host_name ${hostname}
send_to "ES"
</record>
</filter>
<match kubernetes.**>
@type stdout
</match>
Tetapi ketika saya menerapkannya, ${[record[""]["container_name"]}mendapatkan null saat ditampilkan unknown placeholder ${record["kubernetes"]["container_name"]}. Tolong bantu saya bagaimana mengatasinya, terima kasih.
Mendapat pesan kesalahan itu
0 dump an error event: error_class = RuntimeError error = "gagal untuk memperluas
record[\"kubernetes\"][\"container_name\"]: error = metode tidak ditentukan[]' for nil:NilClass" location="/fluentd/vendor/bundle/ruby/2.6.0/gems/fluentd-1.11.2/lib/fluent/plugin/filter_record_transformer.rb:310:inpenyelamatan di expand '" tag = "kubernetes.myapp.container" time = 2020-09-23 11: 29: 05.705209241 +0000 record = {"message" => "{" log ":" I0923 11: 28: 59.157177 1 main.go: 71] Pemeriksaan kesehatan berhasil \ n "," stream ":" stderr "," time ":" 2020-09- 23T11: 28: 59.157256887Z "}"}
`
Jawaban
Tidak recordberisi bidang wajib yang ingin Anda akses, yaitu record["kubernetes"]["container_name"].
Anda perlu memastikan bahwa itu memiliki bidang tersebut.
Silakan buka Container Deployment dan plugin kubernetes_metadata_filter untuk informasi detailnya.