Elastic Stack atau ELK Stack adalah sekumpulan open source software yang memungkinkan kita untuk mencari, menganalisis, dan memvisualisasikan log. Praktik seperti ini biasanya disebut sebagai centralized logging. Centralized logging berguna ketika mencoba mengidentifikasi masalah yang terjadi pada server atau aplikasi.
Elastic Stack memiliki 4 komponen utama, yaitu:
1. *Elasticsearch*: mesin pencari RESTful terdistribusi yang menyimpan semua data yang dikumpulkan 2. *Logstash*: komponen pemrosesan data dari Elastic Stack yang mengirimkan daata masuk ke Elasticsearch 3. *Kibana*: web interface untuk mencari dan memvisualisasikan log 4. *Beats*: pengirim data yang bertugas untuk mengirim data dari mesin-mesin ke Logstash atau Elasticsearch
Pada tutorial ini, kita akan belajar bagaimana cara install Elastic Stack di Ubuntu 20.04. Filebeat, Beat yang bertugas untuk meneruskan dan memusatkan log dan file, mengonfigurasinya untuk mengumpulkan dan memvisualisasikan log sistem. Selain itu Kibana biasanya hanya tersedia di localhost, agar dapat mengaksesnya menggunakan domain akan mengonfigurasi Nginx sebagai reverse proxy ke Kibana.
*Hardware Requirements*
Minimum spesifikasi server yang direkomendasikan yaitu 2 CPU 4GB RAM dengan sistem operasi Ubuntu 20.04.
*Install Java*
Install Java dan paket lain yang dibutuhkan.
[INPUT]1 sudo apt install openjdk-11-jdk apt-transport-https gnupg2
Memverifikasi hasil instalasi Java.
[INPUT]1 2 3 4 musa@ubuntu:~$ java -version openjdk version “11.0.13” 2021-10-19 OpenJDK Runtime Environment (build 11.0.13+8-Ubuntu-0ubuntu1.20.04) OpenJDK 64-Bit Server VM (build 11.0.13+8-Ubuntu-0ubuntu1.20.04, mixed mode, sharing)
*Install Elasticsearch*
Import GPG key Elasticsearch.
[INPUT]1 wget -qO – https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add –
Menambahkan Elasticsearch repository versi 7.x.
[INPUT]1 echo “deb https://artifacts.elastic.co/packages/7.x/apt stable main” | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list
Update package list.
[INPUT]1 sudo apt update
Install Elasticsearch.
[INPUT]1 sudo apt install elasticsearch
Menjalankan elasticserach service.
[INPUT]1 2 sudo systemctl start elasticsearch sudo systemctl enable elasticsearch
Jika terjadi kegagalan pada saat *start elasticsearch* dengan pesan error *Failed with result ‘timeout’*, artinya service dihentikan karena tidak dapat berjalan setelah waktu default yang diberikan, waktunya perlu dinaikkan.
Membuka file konfigurasi elasticsearch.service.
[INPUT]1 sudo nano /lib/systemd/system/elasticsearch.service
Mengubah nilai *TimeoutStartSec* misalnya 300.
[INPUT]1 TimeoutStartSec=300
Membaca ulang konfigurasi systemd manager.
[INPUT]1 sudo systemctl daemon-reload
Menjalankan elasticsearch.
[INPUT]1 sudo systemctl start elasticsearch
Mengecek status elasticsearch.
[INPUT]1 2 3 4 5 6 7 8 musa@ubuntu:~$ sudo systemctl status elasticsearch.service “ elasticsearch.service – Elasticsearch Loaded: loaded (/lib/systemd/system/elasticsearch.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2022-02-10 23:09:26 UTC; 24s ago Docs: https://www.elastic.co Main PID: 8725 (java) Tasks: 64 (limit: 4612) Memory: 2.2G
Menguji Elasticsearch dengan mengirimkan HTTP request melalui curl. Elasticsearch secara default berjalan di localhost dengan port 9200.
[INPUT]1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 musa@ubuntu:~$ curl -X GET “localhost:9200” { “name” : “ubuntu”, “cluster_name” : “elasticsearch”, “cluster_uuid” : “R2z1Qa7wQaSl05W2X2IbuQ”, “version” : { “number” : “7.17.0”, “build_flavor” : “default”, “build_type” : “deb”, “build_hash” : “bee86328705acaa9a6daede7140defd4d9ec56bd”, “build_date” : “2022-01-28T08:36:04.875279988Z”, “build_snapshot” : false, “lucene_version” : “8.11.1”, “minimum_wire_compatibility_version” : “6.8.0”, “minimum_index_compatibility_version” : “6.0.0-beta1” }, “tagline” : “You Know, for Search” }
*Install Kibana*
Install Kibana.
[INPUT]1 sudo apt install kibana
Menjalankan Kibana service.
[INPUT]1 2 sudo systemctl start kibana sudo systemctl enable kibana
Mengecek status kibana.
[INPUT]1 2 3 4 5 6 7 8 9 musa@ubuntu:~$ sudo systemctl status kibana “ kibana.service – Kibana Loaded: loaded (/etc/systemd/system/kibana.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2022-02-10 23:16:46 UTC; 4min 4s ago Docs: https://www.elastic.co Main PID: 9258 (node) Tasks: 11 (limit: 4612) Memory: 626.5M CGroup: /system.slice/kibana.service
*Install Nginx*
Install Nginx.
[INPUT]1 sudo apt install nginx
Membuat username “admin” dan password “rahasia” untuk autentikasi Kibana dashboard dan tersimpan ke dalam file “htpasswd.kibana”.
[INPUT]1 echo “admin:`openssl passwd -apr1 rahasia`” | sudo tee -a /etc/nginx/htpasswd.kibana
Membuat file konfigurasi Nginx untuk domain Kibana.
[INPUT]1 sudo nano /etc/nginx/conf.d/kibana.conf
Masukkan konfigurasi berikut. Ubah DOMAIN dengan nama domain yang digunakan.
[INPUT]1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 server { listen 80; server_name DOMAIN; auth_basic “Restricted Access”; auth_basic_user_file /etc/nginx/htpasswd.kibana; location / { proxy_pass http://localhost:5601; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection ‘upgrade’; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } }
Mengecek konfigurasi Nginx apakah ada kesalahan.
[INPUT]1 2 3 musa@ubuntu:~$ sudo nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
Restart Nginx.
[INPUT]1 sudo systemctl restart nginx
Install Let’s Encrypt untuk sertifikat SSL.
[INPUT]1 sudo apt install certbot python3-certbot-nginx
Request SSL untuk domain Kibana. Sesuaikan EMAIL dan DOMAIN.
[INPUT]1 sudo certbot –redirect –hsts –staple-ocsp –agree-tos –no-eff-email –email trial@musaamin.web.id –nginx -d kibana.musaamin.my.id
Browse https://domain-kibana.
Kibana web interface
*Install Logstash*
Install Logstash.
[INPUT]1 sudo apt install logstash
Membuat file konfigurasi Filebeat input untuk Logstash.
[INPUT]1 sudo nano /etc/logstash/conf.d/02-beats-input.conf
Masukkan konfigurasinya, beats input akan listen di port TCP 5044.
[INPUT]1 2 3 4 5 input { beats { port => 5044 } }
Membuat file konfigurasi Elasticsearch output.
[INPUT]1 sudo nano /etc/logstash/conf.d/30-elasticsearch-output.conf
Masukkan konfigurasinya.
[INPUT]1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 output { if [@metadata][pipeline] { elasticsearch { hosts => [“localhost:9200”] manage_template => false index => “%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}” pipeline => “%{[@metadata][pipeline]}” } } else { elasticsearch { hosts => [“localhost:9200”] manage_template => false index => “%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}” } } }
Menguji konfigurasi Logstash. Hasil akhirnya *Configuration OK*.
[INPUT]1 sudo -u logstash /usr/share/logstash/bin/logstash –path.settings /etc/logstash -t
Menjalankan Logstash service.
[INPUT]1 2 sudo systemctl start logstash sudo systemctl enable logstash
*Install Filebeat*
Install Filebeat.
[INPUT]1 sudo apt install filebeat
Membuka file konfigurasi Filebeat.
[INPUT]1 sudo nano /etc/filebeat/filebeat.yml
Disable output.elasticsearch dengan memberikan tanda komentar (#).
[INPUT]1 2 3 #output.elasticsearch: # Array of hosts to connect to. #hosts: [“localhost:9200”]
Enable output.logstash dengan menghapus tanda komentar (#).
[INPUT]1 2 3 output.logstash: # The Logstash hosts hosts: [“localhost:5044”]
Mengaktifkan Filebeat.
[INPUT]1 sudo filebeat modules enable system
Menampilkan Filebeat module yang aktif dan tidak aktif.
[INPUT]1 sudo filebeat modules list | more
Load pipeline untuk system module.
[INPUT]1 sudo filebeat setup –pipelines –modules system
Load index template ke Elasticsearch.
[INPUT]1 sudo filebeat setup –index-management -E output.logstash.enabled=false -E ‘output.elasticsearch.hosts=[“localhost:9200”]’
Hasil akhirnya.
[INPUT]1 Index setup finished.
Saat dashboard di-load, Filebeat terhubung ke Elasticsearch untuk memeriksa infomasi versi. Untuk load dashboard saat Logstash aktif, nonaktifkan Logstash output dan aktifkan Elasticsearch output.
[INPUT]1 sudo filebeat setup -E output.logstash.enabled=false -E output.elasticsearch.hosts=[‘localhost:9200’] -E setup.kibana.host=localhost:5601
Hasil perintahnya.
[INPUT]1 2 3 4 5 6 7 8 9 10 Overwriting ILM policy is disabled. Set `setup.ilm.overwrite: true` for enabling. Index setup finished. Loading dashboards (Kibana must be running and reachable) Loaded dashboards Setting up ML using setup –machine-learning is going to be removed in 8.0.0. Please use the ML app instead. See more: https://www.elastic.co/guide/en/machine-learning/current/index.html It is not possble to load ML jobs into an Elasticsearch 8.0.0 or newer using the Beat. Loaded machine learning job configurations Loaded Ingest pipelines
Menjalankan Filebeat service.
[INPUT]1 2 3 sudo systemctl start filebeat sudo systemctl enable filebeat sudo systemctl status filebeat
Memverifikasi Elasticsearch apakah menerima data denga melakukan query terhadap Filebeat index.
[INPUT]1 curl -XGET ‘http://localhost:9200/filebeat-*/_search?pretty’ | more
Potongan hasil perintahnya.
[INPUT]1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 … “hostname” : “ubuntu”, “os” : { “kernel” : “5.4.0-99-generic”, “codename” : “focal”, “name” : “Ubuntu”, “type” : “linux”, “family” : “debian”, “version” : “20.04.3 LTS (Focal Fossa)”, “platform” : “ubuntu” }, “containerized” : false, “ip” : [ “170.187.225.19”, “2400:8901::f03c:93ff:fe26:308c”, “fe80::f03c:93ff:fe26:308c” ], “name” : “ubuntu”, “id” : “573ee716df0149c3a745f77c66d37ce7”, “mac” : [ “f2:3c:93:26:30:8c” ], “architecture” : “x86_64” }, “event” : { “ingested” : “2022-02-11T00:01:25.977653416Z”, “timezone” : “+00:00”, “kind” : “event”, “module” : “system”, “dataset” : “system.syslog” …
*Kibana Dashboard*
Kembali ke Kibana dashboard dan siap dieskplorasi.
Kibana dashboard
Selamat mencoba ð