Elastic stack (Elasticsearch, Kibana dan Logstash) sangat populer dikalangan startup, karena kesusahan setup :) dan kemudahan untuk menggunakannya. Kali ini akan kita bahas cara lengkap untuk menginstall Elasticsearch, Kibana dan Logstash di Debian 11. Dibagian paling akhir kita akan membahas cara mengirim log dari internal ataupun external, sehingga sangat memudahkan bisa menggunakan AWS, GCP ataupun cloud provider yang memberikan akses lokal, ataupun multiple cloud.
Kebutuhan System
Kebutuhan minimal system
Memory : 4 GB
Hardisk : 20 GB
CPU : 1
Update dan Upgrade System
Ingat untuk selalu update system anda agar stabil dan mendapatkan update terbaru.
sudo apt update; sudo apt upgrade -y
ingat untuk menjalankan ini secara berkala, misalkan tiap seminggu sekali.
Install Dependency
Install dependency untuk proses instalasi Elastic Stack ini. Dependency ini dibutuhkan agar proses instalasi lancar
sudo apt install curl wget gnupg apt-transport-https socat -y
Set Server Timezone
Set timezone server ke tempat anda. Ini diperlukan agar memudahkan waktu troubleshooting dan jamnya menyesuaikan jam lokal anda.
sudo timedatectl set-ntp true sudo timedatectl set-timezone "Asia/Jakarta" timedatectl
tampilan dari zona waktu yang sudah disetting
Install Java JRE
Untuk menjalankan Elasticsearch, Logstash dan Kibana kita memerlukan Java, untuk itu kita akan install versi bawaan distro yang tersedia saat ini.
sudo apt install default-jre -y
saat ini bawaan default JAVA di Debian 11 adalah Java 11, untuk verifikasi jalankan
java --version which java readlink -f $(which java)
Repository Elasticsearch
Config file or folder for elasticsearch, kibana and logstash
# | Config File/Folder |
---|---|
Elasticsearch | /etc/elasticsearch and /etc/default/elasticsearch |
Kibana | /etc/kibana and /etc/default/kibana |
Logstash | /etc/logstash and /etc/default/logstash |
Import PGP Key
Untuk memastikan software yang kita install di repository Debian merupakan software yang telah di-sign oleh pembuatnya, dalam hal ini Elasticsearch, maka kita perlu mengimport PGP key.
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | gpg --dearmor | sudo tee /usr/share/keyrings/elasticsearch.gpg
verifikasi ini akan otomatis dijalankan oleh APT.
Tambah Repository
Tambah repository elastic stack versio 8.x
echo "deb [signed-by=/usr/share/keyrings/elasticsearch.gpg] https://artifacts.elastic.co/packages/8.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-8.x.list
Update cache APT agar mengenali repository yang baru ditambahkan
sudo apt update
Install Elasticsearch
Tahap pertama dari instalasi ini adalah menginstall Elasticsearch, elastic search merupakan inti dari Elastic Stack yang menyediakan full-text search engine dan juga HTTP API untuk dikonsumsi oleh client.
sudo apt-get install elasticsearch -y
tunggu sampai muncul
The generated password for the elastic built-in superuser is : bHBIzuVpyMtWmbaye1_4
Aktifkan Elasticsearch dengan Systemd
# aktifkan waktu boot sudo systemctl enable elasticsearch.service # jalankan elasticsearch sudo systemctl start elasticsearch.service
Tes Query
curl -u "elastic:bHBIzuVpyMtWmbaye1_4" https://localhost:9200 -k
hasilnya
{ "name" : "logs", "cluster_name" : "elasticsearch", "cluster_uuid" : "sgt2mCBqSJq5HISN5BoztA", "version" : { "number" : "8.0.0", "build_flavor" : "default", "build_type" : "deb", "build_hash" : "1b6a7ece17463df5ff54a3e1302d825889aa1161", "build_date" : "2022-02-03T16:47:57.507843096Z", "build_snapshot" : false, "lucene_version" : "9.0.0", "minimum_wire_compatibility_version" : "7.17.0", "minimum_index_compatibility_version" : "7.0.0" }, "tagline" : "You Know, for Search" }
Install Kibana
Kibana merupakan web UI untuk mengakses fitur-fitur Elasticsearch, begitu juga untuk membuat tampilan dashboard yang menarik.
sudo apt install kibana -y
Edit file /etc/kibana/kibana.yml
, update bagian
server.port: 5601 server.host: "0.0.0.0"
agar Kibana bisa diakses dari http://domain-atau-ip-server:5601
Generate token Kibana
sudo /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana
token ini akan digunakan untuk inisialisasi kibana dengan elasticsearch.
Buka http://domain-atau-ip-server:5601
masukkan token yang tadi digenerate, klik Configure Elastic
Muncul permintaan verifikasi code
untuk mengambil token tersebut jalankan
sudo /usr/share/kibana/bin/kibana-verification-code
atau bisa juga dengan melihat tokennya dari log kibana
sudo journalctl -u kibana | grep verification
masukkan code tersebut, lalu klik Verify
Tunggu beberapa saat, sampai setup selesai dan anda dihapankan dengan halaman login. Gunakan user elastic dan password dari hasil instalasi Elasticsearch, pada contoh saya passwordnya bHBIzuVpyMtWmbaye1_4
Akses Elasticsearch dari Internet
Elasticsearch hanya bisa diakses dari localhost, agar elasticsearch bisa diakses dari internet kita bisa menggunakan nginx sebagai reverse proxy. Setiap kali domain elasticsearch dipanggil, akan diteruskan oleh nginx ke Elasticsearch. Keuntungan menggunakan metode ini adalah kita bisa membuat banyak aturan (firewall) untuk membatasi akses dan juga menggunakan SSL.
1. Setup DNS
Sebagai contoh saya akan menggunakan DNS elastic.jaranguda.com
Cara konfigurasinya mungkin berbeda tiap provider, yang perlu di setting adalah A record dengan Public IP yang anda miliki. Proses update DNS ini bisa sampai 1 jam, untuk memastikannya bisa digunakan bantuan tool dig
di linux
dig elastic.jaranguda.com +short # dns google dig elastic.jaranguda.com +short @8.8.8.8 # dns cloudflare dig elastic.jaranguda.com +short @1.1.1.1
pastikan IP yang muncul adalah IP public yang sudah anda setting.
2. Generate SSL Let’s Encrypt
Login sebagai root (sudo su
), lalu eksekusi perintah dibawah ini
wget https://raw.githubusercontent.com/acmesh-official/acme.sh/master/acme.sh bash acme.sh install source ~/.bashrc acme.sh --set-default-ca --server letsencrypt
Generate SSL dengan menjalankan
acme.sh --issue --domain elastic.jaranguda.com --standalone
tunggu sampai muncul informasi SSL telah berhasil
[Sun 27 Feb 2022 10:49:29 PM WIB] Your cert is in: /root/.acme.sh/elastic.jaranguda.com/elastic.jaranguda.com.cer [Sun 27 Feb 2022 10:49:29 PM WIB] Your cert key is in: /root/.acme.sh/elastic.jaranguda.com/elastic.jaranguda.com.key [Sun 27 Feb 2022 10:49:29 PM WIB] The intermediate CA cert is in: /root/.acme.sh/elastic.jaranguda.com/ca.cer [Sun 27 Feb 2022 10:49:29 PM WIB] And the full chain certs is there: /root/.acme.sh/elastic.jaranguda.com/fullchain.cer
2. Install Nginx
Install nginx dari repository Debian 11
sudo apt install nginx -y
Buat virtual host untuk elastic.DOMAIN.com (/etc/nginx/sites-enabled/elastic.DOMAIN.com
), yang berisi
server { listen 443 ssl http2; server_name elastic.DOMAIN.com; client_max_body_size 50M; location / { proxy_set_header HOST $host; proxy_set_header X-Real-IP $remote_addr; proxy_redirect off; proxy_pass https://localhost:9200; } ssl_certificate /root/.acme.sh/elastic.DOMAIN.com/fullchain.cer; ssl_certificate_key /root/.acme.sh/elastic.DOMAIN.com/elastic.DOMAIN.com.key; }
restart nginx
sudo nginx -t && sudo systemctl restart nginx
verifikasi SSL
curl -u "elastic:bHBIzuVpyMtWmbaye1_4" https://elastic.jaranguda.com
Mengirim Log dengan Logstash
Di server yang akan kita kirim log aplikasi atau lainnya jalankan tahap “Repository Elasticsearch” agar bisa langsung menginstall logstash dengan apt
sudo apt install logstash -y
Tambah config untuk logstash di /etc/logstash/conf.d/server.conf
yang berisi
input { file { path => [ "/var/log/kern.log", "/var/log/user.log", "/var/log/dpkg.log", "/var/log/auth.log", ] start_position => "beginning" } } output { stdout { codec => rubydebug } elasticsearch { hosts => "https://localhost:9200" user => "elastic" password => "bHBIzuVpyMtWmbaye1_4" index => "server" cacert => "/tmp/ca_1645975245142.crt" } }
karena ini dijalankan di server tempat menginstall elastic stack, jadi kita bisa menggunakan localhost. Untuk digunakan di server lain confignya berubah menjadi
input { file { path => [ "/var/log/kern.log", "/var/log/user.log", "/var/log/dpkg.log", "/var/log/auth.log", ] start_position => "beginning" } } output { stdout { codec => rubydebug } elasticsearch { hosts => "https://elastic.jaranguda.com:443" user => "elastic" password => "bHBIzuVpyMtWmbaye1_4" index => "server" } }
Keterangan
Hosts : server elasticsearch
User : user elasticsearch
Password : password elasticsearch
Index : index di elasticsearch
cacert : cek filenya di /etc/kibana/kibana.yml
Agar logstash bisa mengakses log di /var/log
berikan akses adm
untuk user logstash
sudo usermod -a -G adm logstash
lalu restart logstash
sudo systemctl restart logstash
cek status logstash
sudo journalctl -u logstash -f