Agar mudah dipahami dan dicoba, kita akan belajar menggunakan filter di fluentd dengan bantuan Docker. Secara sederhana cara kerja fluentd
input -> parse -> output
Contoh log yang akan kita kirim
server reboot | oracle-cloud-vm server shutdown | oracle-cloud-vm
dari data diatas ada dua informasi yang kita dapatkan “server reboot” atau “server shutdown” adalah informasi server, dan “oracle-cloud-vm” adalah nama servernya.
Buat folder baru, contoh fluentd (~/fluentd)
mkdir ~/fluentd
buat file baru dalam folder tersebut dengan nama fluentd.conf
Cara menjalankan docker
docker run -it -p 24224:24224 -v ~/fluentd/fluentd.conf:/fluentd/etc/fluentd.conf -e FLUENTD_CONF=fluentd.conf fluent/fluentd
cara paling mudah untuk restart fluentd adalah dengan mengakses shell docker
1. Ambil ID Container docker
docker ps | grep fluentd # contoh output a7097e84152a fluent/fluentd "/bin/entrypoint.sh …" 30 seconds ago Up 29 seconds 5140/tcp, 0.0.0.0:24224->24224/tcp, :::24224->24224/tcp sad_mclean
pada contoh diatas a7097e84152a, adalah ID container tersebut.
2. Akses shell container tersebut
docker exec -it a7097e84152a sh
3. Restart fluentd
Jalankan perintah ini setiap ada perubahan fluentd.conf
, agar perubahan tersebut dijalankan oleh fluentd
kill -HUP 7
Contoh Filter REGEXP
Sebagai contoh untuk filter regexp
(regular expression), biasa juga disingkat dengan regex, kita akan mencari kata kunci (keyword) oracle-cloud-vm di tiap baris log yang ada, bila ada akan akan kita tampilkan.
Isi fluentd.conf
dengan file
<source> @type forward </source> <filter **> @type grep <regexp> key log pattern /oracle-cloud-vm/ </regexp> </filter> <match **> @type stdout </match>
Jalankan docker fluentd, seperti contoh diatas
buka satu terminal
docker run --log-driver=fluentd alpine:latest echo "server shutdown | oracle-cloud-vm"
di terminal yang menjalankan docker fluentd, anda harusnya melihat log menjadi
2022-04-14 14:41:30.000000000 +0000 d0e16301f91b: {"log":"server shutdown | oracle-cloud-vm","container_id":"d0e16301f91b1c50303bfad2f17683fdd7e9f68d9548fff9bde0300d4db6c3d0","container_name":"/determined_mcnulty","source":"stdout"}
Bila anda mengirim log
server shutdown | oracle-cloud-onpremise
fluentd tidak akan memproses data tersebut, karena keywork “oracle-cloud-vm” tidak ditemukan
Beberapa variasi log yang tetap akan diproses fluentd
server shutdown, oracle-cloud-onpremise {"log_info": "server shutdown", "server": "oracle-cloud-onpremise"} oracle-cloud-onpremise, server shutdown
Contoh Filter EXCLUDE
Sesuai dengan namanya, exclude akan melewatkan log yang sesuai dengan pattern (pola) yang sudah dibuat. Contoh kita akan melewatkan semua log yang memiliki string oracle-cloud-vm
Ubah fluentd.conf
dengan
<source> @type forward </source> <filter **> @type grep <exclude> key log pattern /oracle-cloud-vm/ </exclude> </filter> <match **> @type stdout </match>
Coba kirim log
# log ini tidak akan ditampilkan docker run --log-driver=fluentd alpine:latest echo "server shutdown | oracle-cloud-vm" # log ini akan ditampilkan docker run --log-driver=fluentd alpine:latest echo "server shutdown | oracle-cloud-onpremise"
Jangan Biarkan Log Terlewat
Tergantung dengan kebutuhan sistem anda, dengan cara diatas ada kemungkinan log akan terlewatkan bila tidak sesuai dengan pattern yang sudah disetting. Dari contoh diatas, bila kita menemukan oracle-cloud-vm
maka akan kita tambahkan key:value (server: oracle-cloud-vm), diluar itu server: unknown
Ubah fluentd.conf
, menjadi
<source> @type forward </source> <match **> @type copy <store> @type relabel @label oracle-cloud-vm </store> @type copy <store> @type relabel @label others </store> </match> <label oracle-cloud-vm> # filter pattern <filter **> @type grep <regexp> key log pattern /oracle-cloud-vm/ </regexp> </filter> # add server key <filter **> @type record_modifier <record> server oracle-cloud-vm </record> </filter> <match **> @type stdout </match> </label> <label others> # filter pattern <filter **> @type grep <exclude> key log pattern /oracle-cloud-vm/ </exclude> </filter> # add server key <filter **> @type record_modifier <record> server unknown </record> </filter> <match **> @type stdout </match> </label>
Untuk itu kita akan membutuhkan plugin record-modifier
, mari kita build docker disertain dengan plugin tersebut. Buat file Dockerfile
yang berisi
FROM fluent/fluentd RUN gem install fluent-plugin-record-modifier
build docker tersebut
docker build . -t fluentd-local
lalu jalankan kembali container docker dengan mengganti image dari fluent/fluentd menjadi fluentd-local
docker run -it -p 24224:24224 -v ~/fluentd/fluentd.conf:/fluentd/etc/fluentd.conf -e FLUENTD_CONF=fluentd.conf fluentd-local
coba kirim log ke fluentd tersebut
docker run --log-driver=fluentd alpine:latest echo "server shutdown | oracle-cloud-onpremise" docker run --log-driver=fluentd alpine:latest echo "server shutdown | oracle-cloud-vm" docker run --log-driver=fluentd alpine:latest echo "server reboot | debian-linux"
bila dilihat di fluentd, akan sesuai dengan keluaran yang diinginkan