Fluentd banyak digunakan dimana-mana sebagai tukang kirim log dan tukang proses/format log. Untuk testing berbagai versi Fluentd, menggunakan docker akan sangat membantu, karena tidak perlu menginstall berbagai dependency Ruby, dan bisa cepat melakukan testing.

Tergantung kebutuhan anda, kita bisa build docker image yang akan digunakan untuk kebutuhan spesifik, sebagai contoh dalam images docker tersebut diperlukan plugin Elasticsearch, Grafana dan lain sebagainya. Disini saya akan build Fluentd dengan plugin ElasticSearch, Sumologic dan Datadog, karena lagi melakukan testing ketiga service tersebut.

Untuk project ini kita akan buat folder baru ~/fluentd

mkdir ~/fluentd

semua file yang akan dibuat diletakkan didalam folder ini.

Buat file Dockerfile

FROM fluent/fluentd
RUN gem install fluent-plugin-elasticsearch
RUN gem install fluent-plugin-sumologic_output
RUN gem install fluent-plugin-datadog

contoh kita akan build dengan tag fluentd-jaranguda

docker build . -t fluentd-jaranguda

untuk memastikan semuanya sudah berjalan dengan lancar, kita perlu membuat config sederhana fluentd.conf

<source>
  @type forward
</source>
 
<match **>
  @type stdout
</match>

lalu jalankan fluentd

docker run -it -p 24224:24224 -v ~/fluentd/fluentd.conf:/fluentd/etc/fluentd.conf -e FLUENTD_CONF=fluentd.conf fluentd-jaranguda:latest

kita menggunakan port 24224, karena port tersebut adalah port default untuk logging docker.

buka terminal satu lagi, lalu jalankan

docker run --log-driver=fluentd -v ~/fluentd:/tmp -it alpine:latest echo "testing log"

testing fluentd config from docker
di terminal anda mejalankan fluentd, harusnya muncul output kurang lebih

2021-12-04 08:24:38.000000000 +0000 335f2a001f26: {"log":"testing log\r","container_id":"335f2a001f26f26d4d86434cd64eadc5b42784bac7236cab9906138e8b2782ad","container_name":"/dazzling_haslett","source":"stdout"}

untuk mengirim log tersebut ke elasticsearch, tinggal ubah confignya

<source>
  @type forward
</source>
 
<match **>
  @type elasticsearch
  host      172.17.0.1 #ganti dengan IP/Host
  scheme    http
  port      9200 
  index_name docker-log
  include_timestamp true
</match>

lalu jalankan ulang container fluentd

Untuk mengirim ke 2 Log Collector sekaligus, gunakan contoh config ini

<source>
  @type forward
</source>
 
 
<match **>
  @type copy
  <store>
    @type relabel
    @label @sumologic
  </store>
  <store>
    @type relabel
    @label @elasticsearch
  </store>
</match>
 
<label @elasticsearch>
  <match **>
    @type elasticsearch
    host      172.17.0.1
    scheme    http
    port      9200
    index_name ns-data-sumo
    include_timestamp true
  </match>
</label>
 
<label @sumologic>
  <match **>
    @type sumologic
    endpoint https://collectors.sumologic.com/receiver/v1/http/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    log_format json
    source_category docker/testing
    source_name sgp
    open_timeout 10
  </match>
</label>

dengan menggunakan docker ini, proses troubleshooting menjadi jauh lebih mudah karena kita bisa mereplica yang terjadi di server lain. Simpan contoh log dibawah ini di file log.log

{"time": "2021-12-04T14:52:13.136+0000", "level": "info", "msg": "something goes wrong, server timeout", "server": "match011", "status": "degraded"}
{"time": "2021-12-04T14:52:13.137+0000", "level": "info", "msg": "something goes wrong, server timeout", "server": "match012", "status": "degraded"}
{"time": "2021-12-04T14:52:13.138+0000", "level": "info", "msg": "something goes wrong, server timeout", "server": "match013", "status": "degraded"}
{"time": "2021-12-04T14:52:13.139+0000", "level": "info", "msg": "something goes wrong, server timeout", "server": "match014", "status": "degraded"}
{"time": "2021-12-04T14:52:13.139+0000", "level": "info", "msg": "something goes wrong, server timeout", "server": "match015", "status": "degraded"}
{"time": "2021-12-04T14:52:13.139+0000", "level": "info", "msg": "something goes wrong, server timeout", "server": "sumo015", "status": "degraded"}
{"time": "2021-12-04T14:52:13.140+0000", "level": "info", "msg": "something goes wrong, server timeout", "server": "sumo015", "status": "degraded"}

lalu kirim ke fluentd

docker run --log-driver=fluentd -v ~/fluentd:/tmp -it alpine:latest cat /tmp/log.log

Leave a comment

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