Bila anda pindah dari Fluentd ke Fluentbit anda mungkin melihat ada satu keterbatasan dari plugin OpenSearch/ElasticSearch untuk fluentbit, index yang digunakan bersifat static dan tidak mudah untuk dikonfigurasi, tetapi kita bisa menggunakan Logstash_Prefix_Key
untuk mendapatkan hasil yang mirip dengan fluentd.
Untuk tutorial kali ini kita akan menggunakan namespace dari Kubernetes, yang bisa diambil dengan Record Accessor $kubernetes['namespace_name']
, contoh metadata dari deployment anda
metadata: creationTimestamp: "2024-10-10T13:41:34Z" generateName: superset-6fcb5f597c- labels: app: superset pod-template-hash: 6fcb5f597c release: superset name: superset-6fcb5f597c-wvbrn namespace: monitoring ownerReferences: - apiVersion: apps/v1 blockOwnerDeletion: true controller: true kind: ReplicaSet name: superset-6fcb5f597c uid: adf7b126-7c25-4a46-85a8-4f106671d693 resourceVersion: "948264" uid: 32d3f317-d321-4db5-a1c5-daf6f9dedd5e
bisa ingin menggunakan format index nama aplikasi anda bisa menggunakan $kubernetes['labels']['app']
, agar cara ini berhasil dan menjadi mudah semua deployment anda harus menggunakan label yang sama, karena bila tidak ada label tersebut fluentbit akan menggunakan logstash
sebagai index, kecuali bila anda mengkonfigurasi Logstash_Prefix
Konfigurasi plugin Kubernetes seperti dibawah ini, bila anda menggunakan helm chart dari Fluentbit, bila tidak install plugin kubernetes
[Filter] Name kubernetes Match kube.* Kube_URL https://kubernetes.default.svc:443 Kube_CA_File /var/run/secrets/kubernetes.io/serviceaccount/ca.crt Kube_Token_File /var/run/secrets/kubernetes.io/serviceaccount/token K8S-Logging.Exclude true Labels false Annotations false
Update output untuk Elasticsearch sebagai berikut
[Output] Name es Match kube.* Host elasticsearch.jaranguda.com Port 443 Buffer_Size 10MB HTTP_User ${ELASTIC_USER} HTTP_Passwd ${ELASTIC_PASSWORD} Logstash_Format true Logstash_DateFormat eks Replace_Dots true Trace_Output true Trace_Error true Logstash_Prefix k8s Logstash_Prefix_Key $kubernetes['namespace_name'] Suppress_Type_Name true tls On tls.verify false
Contoh untuk YAML config
es: bufferSize: 10MB host: elasticsearch.jaranguda.com port: 443 httpPassword: valueFrom: secretKeyRef: key: password name: elasticsearch-secret httpUser: valueFrom: secretKeyRef: key: username name: elasticsearch-secret logstashFormat: true logstashPrefix: k8s logstashDateFormat: eks logstashPrefixKey: $kubernetes['namespace_name'] traceOutput: true traceError: true replaceDots: true suppressTypeName: "true" tls: verify: false match: 'kube.*'
bagian yang berpengaruh sebagai index adalah
Logstash_Format true Logstash_DateFormat eks Logstash_Prefix_Key $kubernetes['namespace_name']
Sebagai contoh, bila namespace anda adalah monitoring, maka index yang akan dibuat oleh fluentbit adalah monitoring-eks
, bila tidak ditemukan object $kubernetes['namespace_name']
tersebut maka akan menggunakan Logstash_Prefix
+ Logstash_DateFormat
, pada contoh diatas k8s-eks