Fluent Bit digunakan untuk Observability mengambil logs dari berbagai sumber, merubah log tersebut baik menambah ataupun menghapus beberapa bagian lalu mengirimkannya ke Log Aggregator seperti Elasticsearch, Datadog, Sumo Logic atau pun yang lainnya.

Untuk saat ini fluent bit bukan pengganti yang cocok untuk fluentd, karena banyak plugin yang ada di fluentd tidak ada di fluentbit, apalagi untuk fitur plugin kubernetes, ada beberapa bagian yang kurang di fluentbit, yaitu seperti labels.

Tulisan ini merupakah versi fluentbit dari fluentd

Konfigurasi Fluentbit

Kita akan membuat folder baru tempat menyimpan konfigurasi Fluent Bit

mkdir -p $HOME/fluentbit/logs

Berikut ini isi file file $HOME/fluentbit/fluentbit.conf

[SERVICE]
    Log_Level   info
 
[INPUT]
    Name    forward
    Listen  0.0.0.0
    Port    24224
 
[FILTER]
    Name    grep
    Match   *
    Exclude log /kerang/
 
[FILTER]
    Name        record_modifier
    Match       *
    Record      hostname cassandra-cluster-ap-southeast-3
    Remove_key  container_id
    Remove_key  source
    Remove_key  container_name
 
[OUTPUT]
    Name    file
    Match   *
    Path    /fluentbit/logs
 
[OUTPUT]
    Name  stdout
    Match *
 
[OUTPUT]
    Name  es
    Match *
    Host  elasticsearch.jaranguda.com
    Port  443
    Index cassandra-prod
    Type  my_type

Alur kerja fluentbit
fluentbit workflow

jalankan Fluent Bit dengan docker

docker run -p 24224:24224 -v $HOME/fluentbit/logs:/fluentbit/logs -v $HOME/fluentbit/fluentbit-config.conf:/fluent-bit/etc/fluent-bit.conf fluent/fluent-bit

Mari kita bahas konfigurasi fluentbit.conf diatas

[INPUT]
    Name    forward
    Listen  0.0.0.0
    Port    24224

kita menggunakan port 24224, karena port tersebut adalah port default untuk logging docker. Contoh logs yang akan kita tangkap dikirim dari docker lain

Filter fluentbit

Ada banyak filter fluentbit yang bisa kita gunakan. Salah satunya adalah grep, kita akan membahas contoh penggunaan grep disini

[FILTER]
    Name    grep
    Match   *
    Exclude log /kerang/

Berikut ini contoh log yang akan kita proses $HOME/fluentbit/sample.log

docker run -v $HOME/fluentbit/sample.log:/tmp/sample.log --log-driver=fluentd alpine cat /tmp/sample.log
[0] 512ad55797d7: [[1705679988.000000000, {}], {"log"=>"{"time": "2024-01-19T14:52:13.136+0000", "level": "info", "msg": "something goes wrong, server timeout", "server": "match011", "status": "degraded"}", "hostname"=>"cassandra-cluster-ap-southeast-3"}]

semua log yang memiliki kata kerang, tapi baik akerang, kerangan, dan varian lainnya akan dilewatkan. Bila anda ingin specific ke kata kerang, maka ubah menjadi

[FILTER]
    Name    grep
    Match   *
    Exclude log /\bkerang\b/

hanya kata kerang yang di-ignore

[0] a71589f05ad4: [[1705680281.000000000, {}], {"log"=>"{"time": "2024-01-19T14:52:13.136+0000", "level": "info", "msg": "something goes wrong, server timeout", "server": "match011", "status": "degraded"}", "hostname"=>"cassandra-cluster-ap-southeast-3"}]
[1] a71589f05ad4: [[1705680281.000000000, {}], {"log"=>"{"time": "2021-12-04T14:52:13.137+0000", "level": "info", "msg": "dimana kerangan dia berada"}", "partial_message"=>"true", "partial_id"=>"45e1428e5ed0af13edbca5abfdabcfb76c86a6e790a8960f3543f75c49c41d04", "partial_ordinal"=>"1", "partial_last"=>"false", "hostname"=>"cassandra-cluster-ap-southeast-3"}]
[FILTER]
    Name        record_modifier
    Match       *
    Record      hostname cassandra-cluster-ap-southeast-3
    Remove_key  container_id
    Remove_key  source
    Remove_key  container_name

Filter record_modifier diatas digunakan untuk menambah hostname cassandra-cluster-ap-southeast-3 disetiap logs. Sedangkan Remove_key berguna untuk menghapus key dari log, bila tidak dihapus maka setiap log akan menambah metadata container_id, source, container_name

[0] aa9817638fa6: [[1705681034.000000000, {}], {"container_name"=>"/busy_nobel", "source"=>"stdout", "log"=>"{"foo": "bar"}", "container_id"=>"aa9817638fa6bca9f274f1dbe62351d804e212d39d0e3aca9b6e4056775120f4", "hostname"=>"cassandra-cluster-ap-southeast-3"}]

Output fluentbit

Setelah mem-format log di fluentbit langkah terakhir adalah mengirimkan log tersebut ke suatu tempat, ada banyak tempat penyimpanan logs, salah satunya adalah menyimpan logs di direktori tertentu

[OUTPUT]
    Name    file
    Match   *
    Path    /fluentbit/logs

Pada contoh diatas semua logs yang diterima oleh fluentbit akan disimpan di folder /fluentbit/logs

[OUTPUT]
    Name  stdout
    Match *

stdout akan menampilkan log di terminal yang memudahkan untuk debug logs

[OUTPUT]
    Name  es
    Match *
    Host  elasticsearch.jaranguda.com
    Port  443
    Index cassandra-prod
    Type  my_type

Contoh diatas adalah untuk mengirim semua logs ke Elasticsearch.

Mengirim Log Ke fluentbit

Setelah fluentbit berjalan kirim log dengan menambahkan --log-driver

docker run --log-driver=fluentd alpine echo '{"foo": "bar"}'

Leave a comment

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