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:

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 🙂

Leave a Reply

Your email address will not be published.