Cara Install Elastic (ELK) Stack di Ubuntu 20.04
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:
- Elasticsearch: mesin pencari RESTful terdistribusi yang menyimpan semua data yang dikumpulkan
- Logstash: komponen pemrosesan data dari Elastic Stack yang mengirimkan daata masuk ke Elasticsearch
- Kibana: web interface untuk mencari dan memvisualisasikan log
- 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.
1 | sudo apt install openjdk-11-jdk apt-transport-https gnupg2 |
Memverifikasi hasil instalasi Java.
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.
1 | wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add - |
Menambahkan Elasticsearch repository versi 7.x.
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.
1 | sudo apt update |
Install Elasticsearch.
1 | sudo apt install elasticsearch |
Menjalankan elasticserach service.
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.
1 | sudo nano /lib/systemd/system/elasticsearch.service |
Mengubah nilai TimeoutStartSec misalnya 300.
1 | TimeoutStartSec=300 |
Membaca ulang konfigurasi systemd manager.
1 | sudo systemctl daemon-reload |
Menjalankan elasticsearch.
1 | sudo systemctl start elasticsearch |
Mengecek status elasticsearch.
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.
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.
1 | sudo apt install kibana |
Menjalankan Kibana service.
1 2 | sudo systemctl start kibana sudo systemctl enable kibana |
Mengecek status kibana.
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.
1 | sudo apt install nginx |
Membuat username “admin” dan password “rahasia” untuk autentikasi Kibana dashboard dan tersimpan ke dalam file “htpasswd.kibana”.
1 | echo "admin:`openssl passwd -apr1 rahasia`" | sudo tee -a /etc/nginx/htpasswd.kibana |
Membuat file konfigurasi Nginx untuk domain Kibana.
1 | sudo nano /etc/nginx/conf.d/kibana.conf |
Masukkan konfigurasi berikut. Ubah DOMAIN dengan nama domain yang digunakan.
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.
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.
1 | sudo systemctl restart nginx |
Install Let’s Encrypt untuk sertifikat SSL.
1 | sudo apt install certbot python3-certbot-nginx |
Request SSL untuk domain Kibana. Sesuaikan EMAIL dan DOMAIN.
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.
Install Logstash
Install Logstash.
1 | sudo apt install logstash |
Membuat file konfigurasi Filebeat input untuk Logstash.
1 | sudo nano /etc/logstash/conf.d/02-beats-input.conf |
Masukkan konfigurasinya, beats input akan listen di port TCP 5044.
1 2 3 4 5 | input { beats { port => 5044 } } |
Membuat file konfigurasi Elasticsearch output.
1 | sudo nano /etc/logstash/conf.d/30-elasticsearch-output.conf |
Masukkan konfigurasinya.
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.
1 | sudo -u logstash /usr/share/logstash/bin/logstash --path.settings /etc/logstash -t |
Menjalankan Logstash service.
1 2 | sudo systemctl start logstash sudo systemctl enable logstash |
Install Filebeat
Install Filebeat.
1 | sudo apt install filebeat |
Membuka file konfigurasi Filebeat.
1 | sudo nano /etc/filebeat/filebeat.yml |
Disable output.elasticsearch dengan memberikan tanda komentar (#).
1 2 3 | #output.elasticsearch: # Array of hosts to connect to. #hosts: ["localhost:9200"] |
Enable output.logstash dengan menghapus tanda komentar (#).
1 2 3 | output.logstash: # The Logstash hosts hosts: ["localhost:5044"] |
Mengaktifkan Filebeat.
1 | sudo filebeat modules enable system |
Menampilkan Filebeat module yang aktif dan tidak aktif.
1 | sudo filebeat modules list | more |
Load pipeline untuk system module.
1 | sudo filebeat setup --pipelines --modules system |
Load index template ke Elasticsearch.
1 | sudo filebeat setup --index-management -E output.logstash.enabled=false -E 'output.elasticsearch.hosts=["localhost:9200"]' |
Hasil akhirnya.
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.
1 | sudo filebeat setup -E output.logstash.enabled=false -E output.elasticsearch.hosts=['localhost:9200'] -E setup.kibana.host=localhost:5601 |
Hasil perintahnya.
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.
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.
1 | curl -XGET 'http://localhost:9200/filebeat-*/_search?pretty' | more |
Potongan hasil perintahnya.
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.
Selamat mencoba 🙂