Setup Elasticsearch & Kibana
di VPS Linux

Cari dan visualisasi log ribuan event per detik langsung dari dashboard sendiri.

± 30 menit baca SufaNet
Setup Elasticsearch Kibana di VPS Linux

Pendahuluan

Saat aplikasi kamu sudah production, pertanyaan yang sering muncul adalah: "Error ini datangnya dari mana? Kapan mulai terjadi? Berapa kali per jam?"

Tanpa sistem log yang terstruktur, menjawab pertanyaan itu berarti grep di file log yang ribuan baris.

Elasticsearch + Kibana menghadirkan pencarian full-text dan visualisasi log dalam satu paket. Cari "error 500" dari 30 hari ke belakang dalam hitungan detik.

Apa Itu ELK Stack?

  • Elasticsearch — mesin pencari dan penyimpan dokumen berbasis JSON
  • Kibana — dashboard visualisasi dan query builder untuk Elasticsearch
  • Logstash — pipeline untuk parse dan transform log (opsional)
  • Filebeat/Fluentd — agent ringan untuk kirim log dari server ke Elasticsearch
💡 Setup minimal: Elasticsearch + Kibana sudah cukup untuk banyak use case. Logstash bisa ditambahkan nanti jika perlu transformasi log kompleks.

Persiapan VPS

⚠️ Persyaratan minimum: Elasticsearch butuh minimal 4 GB RAM. Untuk production yang stabil, disarankan 8 GB RAM.

Set parameter kernel yang dibutuhkan Elasticsearch:

# Elasticsearch butuh vm.max_map_count yang cukup besar
echo 'vm.max_map_count=262144' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

# Verifikasi
cat /proc/sys/vm/max_map_count

Pastikan Docker dan Docker Compose sudah terinstall, lalu buat direktori:

mkdir -p /opt/elk
cd /opt/elk

Install Elasticsearch + Kibana dengan Docker Compose

Buat file /opt/elk/.env:

ELASTIC_VERSION=8.12.0
ELASTIC_PASSWORD=password_elastic_kuat
KIBANA_PASSWORD=password_kibana_kuat

Buat file /opt/elk/docker-compose.yml:

version: '3.8'

services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:${ELASTIC_VERSION}
    container_name: elasticsearch
    restart: unless-stopped
    environment:
      - discovery.type=single-node
      - ELASTIC_PASSWORD=${ELASTIC_PASSWORD}
      - xpack.security.enabled=true
      - "ES_JAVA_OPTS=-Xms1g -Xmx1g"
    volumes:
      - es_data:/usr/share/elasticsearch/data
    ports:
      - "9200:9200"
    ulimits:
      memlock:
        soft: -1
        hard: -1

  kibana:
    image: docker.elastic.co/kibana/kibana:${ELASTIC_VERSION}
    container_name: kibana
    restart: unless-stopped
    depends_on:
      - elasticsearch
    environment:
      - ELASTICSEARCH_HOSTS=http://elasticsearch:9200
      - ELASTICSEARCH_USERNAME=kibana_system
      - ELASTICSEARCH_PASSWORD=${KIBANA_PASSWORD}
    ports:
      - "5601:5601"

volumes:
  es_data:
docker compose up -d
docker compose logs -f elasticsearch   # tunggu sampai "started"

Setup Password Kibana di Elasticsearch

Setelah Elasticsearch siap, set password untuk user kibana_system:

docker exec -it elasticsearch \
  elasticsearch-users passwd kibana_system \
  -p password_kibana_kuat

Atau via API:

curl -X POST "localhost:9200/_security/user/kibana_system/_password" \
  -H "Content-Type: application/json" \
  -u "elastic:password_elastic_kuat" \
  -d '{"password": "password_kibana_kuat"}'

Restart Kibana:

docker compose restart kibana

Akses Dashboard Kibana

Buka browser ke http://IP_VPS_KAMU:5601. Login dengan username elastic dan password yang kamu set.

Dari Kibana kamu bisa:

  • Buat index pattern untuk data log
  • Query log dengan Kibana Query Language (KQL)
  • Buat visualisasi dan dashboard
  • Setup alerting jika ada error rate tinggi

Kirim Log Aplikasi ke Elasticsearch

Install Filebeat di server yang mau dikirim lognya:

curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-8.12.0-amd64.deb
sudo dpkg -i filebeat-8.12.0-amd64.deb

Konfigurasi /etc/filebeat/filebeat.yml:

filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/log/nginx/access.log
    - /var/www/myapp/storage/logs/*.log

output.elasticsearch:
  hosts: ["https://IP_VPS_ELASTICSEARCH:9200"]
  username: "elastic"
  password: "password_elastic_kuat"
  ssl.verification_mode: none
sudo systemctl enable filebeat
sudo systemctl start filebeat

Nginx Reverse Proxy untuk Kibana

Agar Kibana bisa diakses via domain dengan HTTPS:

server {
    listen 80;
    server_name kibana.domain-kamu.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name kibana.domain-kamu.com;

    ssl_certificate /etc/letsencrypt/live/kibana.domain-kamu.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/kibana.domain-kamu.com/privkey.pem;

    # Basic auth tambahan (opsional, untuk double protection)
    auth_basic "Kibana Access";
    auth_basic_user_file /etc/nginx/.htpasswd;

    location / {
        proxy_pass http://localhost:5601;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

Alternatif: OpenSearch (100% Open Source)

Elasticsearch sejak versi 7.11 tidak lagi full open source (BSL license). OpenSearch adalah fork yang benar-benar open source, dikembangkan AWS.

Docker image: opensearchproject/opensearch dan opensearchproject/opensearch-dashboards. Konfigurasi hampir identik dengan ELK.

Kenapa VPS SufaNet Cocok untuk ELK?

  • RAM yang cukup — Elasticsearch butuh RAM besar
  • SSD NVMe — indexing data cepat
  • Bisa scale storage sesuai volume log
  • Dedicated resource tanpa noise neighbor

Log management butuh server yang tidak pelit resource

Elasticsearch adalah aplikasi yang haus RAM. VPS dengan resource yang dijamin adalah syarat minimal.

🚀 Lihat VPS Singapore SufaNet

FAQ

Elasticsearch bisa dipakai sebagai database biasa?

Bisa untuk read-heavy use case. Tapi bukan pengganti database relasional — tidak ada foreign keys atau strong consistency seperti PostgreSQL/MySQL.

Berapa lama log sebaiknya disimpan?

Tergantung regulasi dan kapasitas. Kebanyakan setup menyimpan 30-90 hari. Gunakan Index Lifecycle Management (ILM) di Kibana untuk auto-delete index lama.

Elasticsearch vs Loki untuk log?

Loki (dari Grafana) lebih ringan dan cocok untuk log tanpa full-text indexing. Elasticsearch lebih powerful untuk search kompleks tapi butuh resource lebih besar.

Kesimpulan

Elasticsearch + Kibana mengubah cara kamu melihat server dan aplikasi. Dari "coba grep dulu" menjadi "query di dashboard dalam 2 detik".

Investasi RAM dan disk yang dibutuhkan terbayar saat pertama kali kamu berhasil menemukan root cause bug production dalam hitungan menit, bukan jam.