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

Berikut ini contoh log yang dilihat dari Kibana
kubernetes logs per namespace fluentbit

Leave a comment

Your email address will not be published. Required fields are marked *