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
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"}'