Membangun Log Event Management Server pada CentOS 7 dengan ELK-Stack
Pada tulisan kali ini saya ingin berbagi hasil percobaaan saya dalam membangun sebuah log event management server dalam contoh kasus log ssh server.
Sebetulnya percobaan ini ter-inspirasi dari beberapa tutorial seperti: Magazine CDEF I, ELK-Stack Tutorial Digital Ocean, dll. Jadi saya ingin menambahkan sedikit hal yang baru dari tutorial tersebut :D
Percobaan ini saya buatkan dalam Topologi Jaringan seperti berikut:
Terdapat 3 buah Server Client (yang nanti nya server tersebut akan kita pantau log ssh nya) dan 1 buah Server ELK-Stack.
Server Client menggunakan OS Ubuntu Server 14.04, dan Server ELK-Stack menggunakan OS CentOS 7.
Sebelum lebih jauh, saya akan menerangkan apa saja komponen yang digunakan dalam membangun ELK-Stack ini dan bagaimana alur proses nya
Jadi pada Server ELK-Stack tentu komponen nya dari si ELK-Stack itu sendiri yaitu Elasticsearch, Logstash, Kibana.
Kemudian pada Server Client kita hanya menggunakan Filebeat (bagian dari ELK komponen) dan tentunya SSH server sebagai percobaan log yang nantinya kita pantau.
Untuk alur prosesnya, seperti berikut ini:
Terlihat pada proses tersebut, log services SSH di server-client akan dikirim oleh Filebeat ke Logstash, jadi Filebeat berguna sebagai log shipper nya disini dan Logstash menjadi gerbang awal ketika Log Server Client masuk ke Server ELK-Stack. Logstash sendiri nantinya berfungsi sebagai filterisasi log yang sudah dikirim, tujuannya adalah membuat log tersebut bisa dibagi jadi beberapa kategori.
Kemudian setelah diproses pada Logstash, log tersebut akan dikirim ke Elasticsearch untuk ditampung, dan terakhir divisualisasikan pada Kibana.
Oke kita mulai masuk tahap konfigurasinya sekarang~
Konfigurasi yang pertama akan kita lakukan pada Server ELK-Stack terlebih dahulu, yaitu kita install paket-paket aplikasi ELK-Stack nya. Saya sudah buatkan simple bash script untuk otomatis install aplikasi ELK-Stack berikut ini:
Setelah semuanya selesai di-install, kita konfigurasikan yang pertama pada elasticsearch dengan mengkonfigurasi pada file /etc/elasticsearch/elasticsearch.yml untuk mengatur url port dan host elasticsearch kita
Kemudian pada file /usr/lib/systemd/system/elasticsearch.service tambahkan LimitMEMLOCK=infinity tujuannya adalah agar elasticsearch kita memlock nya tidak terbatas
Selanjutnya pada file /etc/sysconfig/elasticsearch hilangkan tanda pagar / uncomment pada bagian berikut ini
Jalankan perintah berikut ini untuk autostart elasticsearch ketika server di-restart
systemctl daemon-reload
systemctl enable elasticsearch
systemctl start elasticsearch
Konfigurasi selanjutnya pada Kibana, yang pertama pada file /etc/kibana/kibana.yml untuk mengatur port dan host kibana kita nantinya dan elasticsearch url kita
Seperti biasa kita buat Kibana autostart dengan perintah berikut ini
systemctl enable kibana
systemctl start kibana
Oiya kita install nginx terlebih dahulu supaya Kibana kita dapat kita akses ketika kita buka url IP dari Server-ELK Stack kita nantinya.
Kemudian setting nginx.conf nya agar web server default nginx nya kita matikan dan kita ganti oleh kibana.
Lalu buat 1 file lagi pada /etc/nginx/conf.d/ dengan nama kibana.conf
Kemudian jalankan perintah berikut ini untuk membuat user&pass untuk mengakses Kibana kita
sudo htpasswd -c /etc/nginx/.kibana-user NAMAUSER
Lalu jalankan nginx dan kita buat autostart nginx ketika di-restart
nginx -t
systemctl enable nginx
systemctl start nginx
Dan konfigurasi yang terakhir yaitu pada Logstash. Konfigurasi pada Logstash ini terbagi menjadi 3 bagian, yaitu Input, Filter, dan Output. Pertama, konfigurasikan untuk input pada Logstash yang bertujuan menerima input dari Filebeat dari masing-masing server-client.
Lalu kita buat konfigurasi filter pada Logstash, disini saya menggunakan grok dalam proses filter nya. Sebetulnya masih banyak lagi filter pada Logstash kalian bisa baca disini.
Dalam proses filter dengan grok untuk lebih detailnya bagaimana bisa dibaca pada tautan link diatas, nanti juga akan saya buatkan sedikit mengenai grok parse (kamingsun :D)
Pada dasarnya tujuan dilakukan filter ini adalah ketika log tersebut masuk elasticsearch sudah ada beberapa tag yang akan membedakan tiap log, dan nantinya kita bisa visualisasikan pada Kibana sesuai apa yang sudah kita kategorikan tersebut.
Kemudian yang terakhir kita buat untuk output Logstash nya ke elasticsearch
Kalau kita lihat pada bagian file konfigurasi input logstash diatas, terdapat bagian ssl_certificate dan ssl_key maka kita akan generate ssl certificate dan key tersebut, sebelum itu kita konfigurasikan file /etc/pki/tls/openssl.cnf untuk memasukkan IP Server ELK-Stack nya
Lalu generate ssl certificate dan key dengan perintah berikut
openssl req -config /etc/pki/tls/openssl.cnf -x509 -days 3650 -batch -nodes -newkey rsa:2048 -keyout /etc/pki/tls/private/logstash-forwarder.key -out /etc/pki/tls/certs/logstash-forwarder.crt
Kemudian start logstash
systemctl enable logstash
systemctl start logstash
Okee sampai sini kita sudah selesai untuk konfigurasi pada Server ELK-Stack nya. Selanjutnya kita konfigurasikan pada sisi Server Client nya.
Konfigurasi pada sisi clientnya, kita hanya konfigurasikan pada Filebeat tadi dengan tujuan mengatur log apa saja yang ingin dikirim, lalu output nya akan dikirimkan kemana.
Pertama tentunya kita install terlebih dahulu Filebeat nya.
wget -qO — https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-5.1.1-amd64.deb
dpkg -i filebeat-5.1.1-amd64.deb
Kemudian konfigurasikan Filebeat pada /etc/filebeat/filebeat.yml
Lalu kita copy kan file ssl certificate logstash-forwarder.crt yang sudah di-generate pada Server ELK-Stack sebelumnya, bisa menggunakan scp
scp root@192.168.1.100:~/logstash-forwarder.crt .
Kemudian buat folder certs pada /etc/pki/tls/ dan copy file logstash-forwarder.crt ke folder tersebut.
mv logstash-forwarder.crt /etc/pki/tls/certs/
Terakhir kita jalankan Filebeat
service filebeat start
Kemudian lakukan hal yang sama pada 2 server client berikutnya
Setelah semua konfigurasi selesai baik pada Server ELK-Stack maupun 3 Server Client nya, langkah selanjutnya adalah kita setup Kibana nya. Karena pada defaultnya kibana harus kita setting terlebih dahulu index-pattern nya.
Kita buka url kibana nya dengan mengakses http://192.168.1.100 (ip server elk-stack) kemudian akan muncul tampilan awal berikut, dan klik pada Set up Index Pattern
Lalu akan muncul form Define Index Pattern, dan masukkan filebeat-*
Setelah Set up index pattern, kita sebetulnya bisa langsung melihat log-log server client yang sudah masuk ke Server ELK-Stack pada menu Discover Kibana
Namun karena kita sudah melakukan filter pada log tersebut, kita buat visualisasi nya sesuai dengan kategorinya.
Berikut ini adalah nama visualisasi dan type chart visualisasinya:
Kemudian setelah dibuat visualisasinya, kita masukkan juga visualisasi tersebut ke dalam Dashboard agar kita bisa memantau lewat 1 halaman Dashboard tersebut. Berikut ini adalah hasil Dashboard nyaa~
Terakhir kita tinggal uji coba beberapa kesalahan login ssh pada server-client, dan lihat hasilnya pada Kibana.
FYI! Ketika kita sudah buat Log Event Management ini, walaupun log asli nya pada server-client dihapus tidak akan merubah keadaan yang ada pada server elk-stack nya lho. Jadi akan tetap seperti terakhir kali log itu terjadi :D
Sekian tutorial kali ini, semoga bermanfaat yaa!
Apabila ada pertanyaan lebih lanjut bisa menghubungi saya di Telegram ( @iPinn)