Pemantauan dan analisis log menjadi sangat penting saat ini, baik untuk aplikasi atau infrastruktur server/wadah. Salah satu tumpukan perangkat lunak paling populer untuk analisis dan pemantauan log yang dapat Anda pilih adalah Elasticsearch, Fluentd, dan Kibana (tumpukan EFK).
EFK stack adalah mesin pencari terdistribusi dan skalabel yang memungkinkan pencarian terstruktur dan analitik. Dan dalam tutorial ini, Anda akan mempelajari cara menyiapkan pemantauan log tumpukan EFK dengan Docker dan memusatkan log kontainer ke tumpukan EFK.
Siap? Baca terus dan permudah analisis log Anda!
Prasyarat
Tutorial ini terdiri dari demonstrasi langsung. Untuk mengikuti, pastikan Anda memiliki yang berikut:
- Host Linux – Contoh ini menggunakan server Debian 11 Bullseye dengan kapasitas memori 6GB.
- Docker CE (Edisi Komunitas) dan Docker Compose diinstal pada host Linux Anda.
Menyiapkan Proyek Stack EFK
EFK Stack adalah kerangka kerja agregasi log dan analisis log yang siap untuk perusahaan untuk infrastruktur bare-metal dan container. Namun sebelum men-deploy EFK stack, Anda terlebih dahulu menyiapkan direktori proyek dan membuat konfigurasi Docker untuk men-deploy EFK Stack di host Docker Anda.
Untuk contoh ini, Anda akan menggunakan gambar Docker dengan spesifikasi berikut:
- Elasticsearch 7.17.0 – Mampu menyimpan data dengan kemampuan pencarian cepat berbasis Apache Lucene
- Kibana 7.17.0 – Pengumpul dan pengumpulan data sumber terbuka yang mendukung data JSON, dan
- Fluentd Gambar khusus berdasarkan v1.14.1 – Perangkat lunak visualisasi data untuk Elasticsearch.
Untuk menyiapkan proyek tumpukan EFK Anda:
1. Buka terminal dan masuk ke server Anda.
2. Jalankan perintah di bawah ini untuk memverifikasi bahwa Docker dan Docker Compose diinstal pada sistem Anda.
# Checking Docker version
docker --version
# Checking docker-compose version
docker-compose version
Seperti yang Anda lihat di bawah, versi terinstal dari Docker CE (Edisi Komunitas) v20.10.12 dan Docker Compose v1.29.2.
3. Jalankan perintah berikut untuk membuat direktori proyek baru (mkdir
) dan atur sebagai direktori kerja (cd
).
Anda dapat memberi nama direktori sesuai keinginan, tetapi dalam tutorial ini, direktori tersebut diberi nama efk. Direktori ini akan menyimpan semua file konfigurasi EFK Stack dalam tutorial ini.
mkdir -p ~/efk; cd ~/efk
4. Sekarang, buat file konfigurasi baru (docker-compose.yml
) menggunakan editor pilihan Anda dan isi konfigurasi berikut.
Konfigurasi di bawah ini menggunakan skrip Docker Compose v3 dan mendefinisikan semua wadah tumpukan EFK.
version: "3"
# Define the Docker volume named esdata for the Elasticsearch container.
volumes:
esdata:
# Deploying three container services (fluentd, elasticsearch, and kibana)
services:
# Deploy using the custom image automatically be created during the build process.
fluentd:
build: ./fluentd
links: # Sends incoming logs to the elasticsearch container.
- elasticsearch
depends_on:
- elasticsearch
ports: # Exposes the port 24224 on both TCP and UDP protocol for log aggregation
- 24224:24224
- 24224:24224/udp
# Created using the Docker image elasticsearch:7.17.0
elasticsearch:
image: elasticsearch:7.17.0
expose: # Exposes the default port 9200
- 9200
environment:
- discovery.type=single-node # Runs as a single-node
volumes: # Stores elasticsearch data locally on the esdata Docker volume
- esdata:/usr/share/elasticsearch/data
# Created using the Docker image kibana:7.17.0
kibana:
image: kibana:7.17.0
links: # Links kibana service to the elasticsearch container
- elasticsearch
depends_on:
- elasticsearch
ports: # Runs kibana service on default port 5601
- 5601:5601
environment: # Defined host configuration
- ELASTICSEARCH_HOSTS=http://elasticsearch:9200
5. Jalankan perintah di bawah ini untuk membuat direktori baru fluentd
dan arahkan ke direktori itu. fluentd
direktori akan menyimpan fluentd
konfigurasi layanan.
mkdir -p fluentd/; cd fluentd/
6. Di dalam ~/efk/fluentd direktori, buat Dockerfile baru menggunakan editor pilihan Anda dan mengisi konfigurasi berikut.
Konfigurasi ini membuat gambar kustom fasih yang berisi driver klien elasticsearch dan fasih-plugin-elasticsearch.
Pastikan untuk menggunakan versi yang sama antara driver klien elasticsearch dan elasticsearch — tutorial ini menggunakan versi 7.17.0.
# image based on fluentd v1.14-1
FROM fluentd:v1.14-1
# Use root account to use apk
USER root
# below RUN includes plugin as examples elasticsearch is not required# you may customize including plugins as you wish
RUN apk add --no-cache --update --virtual .build-deps \
sudo build-base ruby-dev \
&& gem uninstall -I elasticsearch \
&& gem install elasticsearch -v 7.17.0 \
&& sudo gem install fluent-plugin-elasticsearch \
&& sudo gem sources --clear-all \
&& apk del .build-deps \
&& rm -rf /tmp/* /var/tmp/* /usr/lib/ruby/gems/*/cache/*.gem
# copy fluentd configuration from host image
COPY ./conf/fluent.conf /fluentd/etc/
# copy binary start file
COPY entrypoint.sh /bin/
RUN chmod +x /bin/entrypoint.sh
USER fluent
7. Selanjutnya, buat file konfigurasi lain (entrypoint.sh
) menggunakan editor pilihan Anda dan isi konfigurasi berikut. Skrip ini dijalankan ketika fluentd
layanan kontainer dimulai.
Di bawah ini adalah skrip starter untuk layanan container fasih, yang menjalankan perintah dasar fasih –config /fluentd/etc/fluentd.conf –plugin /etc/fluentd/plugins.
#!/bin/sh
#source vars if file exists
DEFAULT=/etc/default/fluentd
if [ -r $DEFAULT ]; then
set -o allexport
. $DEFAULT
set +o allexport
fi
# If the user has supplied only arguments append them to `fluentd` commandif [ "${1#-}" != "$1" ]; then
set -- fluentd "[email protected]"
fi
# If user does not supply config file or plugins, use the defaultif [ "$1" = "fluentd" ]; then
if ! echo [email protected] | grep -e ' \-c' -e ' \-\-config' ; then
set -- "[email protected]" --config /fluentd/etc/${FLUENTD_CONF}
fi
if ! echo [email protected] | grep -e ' \-p' -e ' \-\-plugin' ; then
set -- "[email protected]" --plugin /fluentd/plugins
fi
fi
8. Jalankan perintah di bawah ini untuk membuat direktori baru conf
di bawah ~/efk/fluentd direktori.
mkdir -p conf
9. Sekarang, buat konfigurasi yang lancar (conf/fluentd.conf ) menggunakan editor pilihan Anda dan isi konfigurasi berikut.
Konfigurasi ini memungkinkan layanan container yang lancar untuk menerima pesan log, dan meneruskannya ke layanan container elasticsearch.
# bind fluentd on IP 0.0.0.0
# port 24224
<source>
@type forward
port 24224
bind 0.0.0.0
</source>
# sendlog to the elasticsearch
# the host must match to the elasticsearch
# container service
<match *.**>
@type copy
<store>
@type elasticsearch
host elasticsearch
port 9200
logstash_format true
logstash_prefix fluentd
logstash_dateformat %Y%m%d
include_tag_key true
type_name access_log
tag_key @log_name
flush_interval 300s
</store>
<store>
@type stdout
</store>
</match>
10. Terakhir, jalankan perintah di bawah ini untuk memeriksa struktur direktori proyek EFK Stack.
Jika Anda tidak memiliki perintah pohon, instal menggunakan perintah berikut:apt install tree -y
# Checking list of files and directory
ls
# Checking directory structure
tree
Di bawah ini adalah struktur lengkap direktori proyek EFK Stack.
Menerapkan EFK Stack dengan Docker
Anda sekarang telah membuat semua file konfigurasi untuk menerapkan EFK Stack menggunakan Docker dan Docker Compose. Langkah selanjutnya adalah men-deploy EFK Stack menggunakan docker-compose
perintah, dan penerapan akan terjadi di direktori proyek Anda (~/efk ).
1. Pertama, jalankan perintah di bawah ini untuk mengubah direktori kerja menjadi efk
direktori proyek.
cd ~/efk/
2. Selanjutnya, jalankan docker-compose
perintah di bawah ini untuk menerapkan (up
) analisis log EFK Stack dan sistem pemantauan log.
Perintah ini secara otomatis mengunduh gambar Docker Elasticsearch dan Kibana. Dan image Fluentd Docker secara otomatis dibuat menggunakan Dockerfile di fasih direktori.
Deployment mungkin memakan waktu, tergantung pada spesifikasi host Docker.
docker-compose up -d
Di bawah ini adalah tangkapan layar dari proses pembuatan untuk gambar Fluentd Docker.
Dan di bawah ini adalah tangkapan layar yang menunjukkan penerapan selesai, dan layanan kontainer Kibana sedang berjalan.
3. Jalankan setiap perintah di bawah ini untuk memeriksa log proses pembuatan tumpukan EFK. Selalu jalankan perintah ini setiap kali Anda mendapatkan kesalahan dalam proses penerapan.
# Checking logs for service fluentd
docker-compose logs fluentd
# Checking logs for service kibana
docker-compose logs kibana
Di bawah ini adalah pesan log saat layanan container yang lancar berjalan.
Dan di bawah ini adalah log untuk wadah kibana.
4. Sekarang, jalankan perintah di bawah ini untuk memeriksa semua status layanan kontainer (ps
).
docker-compose ps
Seperti yang Anda lihat di bawah, layanan container EFK Stack sudah Up. Catat nama penampung elasticsearch (efk_elasticsearch_1) untuk memverifikasi lebih lanjut bahwa penampung berjalan dengan benar di langkah berikutnya.
5. Selain itu, jalankan perintah di bawah ini untuk memverifikasi layanan container elasticsearch. Perintah ini mencetak pengaturan rinci efk_elasticsearch_1
wadah.
docker inspect efk_elasticsearch_1
Seperti yang Anda lihat di bawah, wadah efk_elasticsearch_1 mendapatkan alamat IP 172.18.0.2.
6. Terakhir, jalankan perintah di bawah ini untuk mengakses dan memverifikasi wadah elasticsearch berdasarkan alamat IP (172.18.0.2
). Port 9200
adalah port default untuk wadah elasticsearch.
curl 172.18.0.2:9200
Anda akan melihat output yang mirip dengan yang di bawah ini jika wadah elasticsearch di mesin Anda berjalan.
Mengonfigurasi Pola Indeks Kibana
Sekarang setelah Anda selesai men-deploy EFK Stack di lingkungan Docker, Anda akan membuka Kibana dari browser web Anda. Anda akan menyiapkan pola indeks untuk pemantauan dan analisis log.
1. Buka browser web favorit Anda dan navigasikan ke alamat IP server diikuti oleh port layanan Kibana 5601 (yaitu, http://172.16.1.10:5601).
2. Selanjutnya, klik tombol Jelajahi sendiri tombol pada halaman selamat datang di bawah ini.
3. Klik Manajemen Tumpukan opsi untuk mengatur pola indeks Kibana di bagian Manajemen.
4. Di Kibana bagian menu kiri, klik menu Pola Indeks dan klik Buat Pola Indeks tombol untuk membuat pola indeks baru.
5. Sekarang, masukkan pola indeks Nama sebagai fluentd- *, setel bidang stempel waktu ke @cap waktu , dan klik Buat pola indeks untuk mengonfirmasi pengaturan pola indeks.
Di sisi kanan, Anda dapat melihat pola indeks yang tersedia dari fasih seperti fasih-%Y%m%d. Format tanggal %Y%m%d didasarkan pada konfigurasi lancar (fluentd.conf ).
6. Terakhir, klik menu kiri atas (elipsis), lalu klik tombol Discover menu untuk menampilkan log pemantauan.
Di bawah ini adalah tangkapan layar dari dasbor pemantauan dan analisis log Kibana. Semua log yang terdaftar diambil dari Elasticsearch dan dikirimkan oleh agregasi log Fluentd.
Menjalankan Container Docker dengan Fluentd Log Driver
Setelah mengonfigurasi pola indeks Kibana, Anda akan menjalankan container Docker dengan drive log Fluentd, yang secara otomatis mengirimkan log ke tumpukan EFK.
1. Jalankan perintah di bawah ini untuk mengunduh gambar NGINX. alpine
versi lebih kecil dari gambar normal berdasarkan Ubuntu, CentOS, atau Fedora.
docker pull nginx:alpine
2. Selanjutnya, jalankan perintah di bawah ini untuk memulai wadah NGINX baru (nginx_container
) dalam mode terpisah (-d
).
Perintah tersebut juga menyetel drive log ke Fluentd (–log-driver=fluentd) dan mengekspos port 8080 pada mesin host Docker untuk container (nginx_container).
docker run --name nginx_container -d --log-driver=fluentd -p 8080:80 nginx:alpine
3. Setelah menjalankan container, jalankan docker
perintah di bawah ini untuk memeriksa semua container yang sedang berjalan.
docker ps
Anda akan melihat bahwa nginx_container Aktif dan berjalan pada port host 8080.
4. Sekarang, jalankan perintah di bawah ini untuk mengakses nginx_container
dan menghasilkan log akses.
curl localhost:8080
Atau, buka tab baru di browser web Anda dan ketik alamat IP server diikuti dengan port 8080 (yaitu, http://172.168.1.10:8080).
Jika semuanya berjalan dengan baik, Anda akan melihat index.html default halaman dari nginx_container.
5. Terakhir, beralih kembali ke dasbor Kibana, dan klik tombol Temukan menu di sisi kiri.
Klik kueri container_name :nginx_container pada bidang KQL (Kibana Query Language), dan Anda akan melihat log dari nginx_container, seperti yang ditunjukkan di bawah ini.
Kesimpulan
Anda telah mempelajari cara menerapkan EFK Stack (Elasticsearch, Fluentd, dan Kibana) di seluruh tutorial ini untuk pemantauan dan analisis log menggunakan Docker. Anda juga telah mempelajari cara menyiapkan logging untuk container Docker menggunakan driver log Fluentd. Dan pada titik ini, Anda sekarang memiliki pemantauan log yang berfungsi penuh untuk aplikasi dan layanan.
Untuk tahap selanjutnya, Anda mungkin tertarik menggunakan KQL (Kibana Query Language) untuk memvisualisasikan pemantauan dan analisis log.