Elasticsearch, Logstash & Kibana
ELK adalah singkatan dari Elasticsearch, Logstash, dan Kibana
tiga komponen utama yang biasa dipakai bersama untuk mengumpulkan,
menyimpan, memproses, dan memvisualisasikan log serta data
observability. Kadang-kadang ditambahkan Beats (mis. Filebeat,
Metricbeat) sehingga disebut Elastic Stack.
- Elasticsearch: Mesin pencarian dan penyimpanan dokumen berbasis Lucene. Menyimpan log dalam indeks, memberikan kemampuan pencarian, agregasi, dan analitik.
- Logstash: Pipeline pemrosesan data --- menerima input (file, beats, syslog, dll), memfilter/transform, lalu mengirim ke Elasticsearch atau output lain.
- Kibana: UI web untuk query, visualisasi, dashboard, dan manajemen indeks Elasticsearch.
- Beats: Agen ringan yang dikirim ke host untuk mengirim log/metric ke Logstash atau Elasticsearch (Filebeat, Metricbeat, Packetbeat, dll).
Arsitektur Singkat
Filebeat bisa juga langsung mengirim ke Elasticsearch jika tidak gunakan Logstash.
Kapan gunakan ELK?
- Centralized logging (kumpulkan log dari banyak server)
- Analisis dan troubleshooting (cari pola, error rate, latensi)
- Monitoring & observability (gabungkan metrics & log)
- Pencarian teks penuh terhadap data log
Prasyarat
- Mesin dengan RAM cukup (Elasticsearch butuh memori; minimal 2-4 GB untuk uji, produksi butuh lebih)
- Java (untuk versi Elasticsearch yang butuh JDK; modern Elasticsearch bundling JDK)
- Port terbuka: Elasticsearch (9200), Kibana (5601), Logstash (opsional 5044 untuk beats)
Quickstart (Docker Compose)
Berikut docker-compose.yml:
version: '3.8'
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:8.8.0
environment:
- discovery.type=single-node
- ELASTIC_PASSWORD=devopstsg2025
- xpack.security.enabled=false
- "ES_JAVA_OPTS=-Xms1g -Xmx1g"
volumes:
- esdata:/usr/share/elasticsearch/data
ports:
- 9200:9200
kibana:
image: docker.elastic.co/kibana/kibana:8.8.0
environment:
- ELASTICSEARCH_HOSTS=http://elasticsearch:9200
- ELASTICSEARCH_USERNAME=elastic
- ELASTICSEARCH_PASSWORD=devopstsg2025
- SERVER_NAME=kibana
ports:
- 5601:5601
depends_on:
- elasticsearch
logstash:
image: docker.elastic.co/logstash/logstash:8.8.0
volumes:
- ./logstash/pipeline:/usr/share/logstash/pipeline
ports:
- 5044:5044
depends_on:
- elasticsearch
volumes:
esdata:
Pipeline Logstash (pipeline/logstash.conf)
input {
beats {
port => 5044
}
}
filter {
grok {
match => { "message" => "%{COMMONAPACHELOG}" }
overwrite => ["message"]
}
date {
match => [ "timestamp", "dd/MMM/yyyy:HH:mm:ss Z" ]
}
mutate {
remove_field => ["@version", "host"]
}
}
output {
elasticsearch {
hosts => ["http://elasticsearch:9200"]
user => "elastic"
password => "changeme"
index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}"
}
stdout { codec => rubydebug }
}
Konfigurasi Elasticsearch (elasticsearch.yml)
cluster.name: my-elk-cluster
node.name: node-1
network.host: 0.0.0.0
http.port: 9200
# discovery.type: single-node # bisa di-set untuk single-node
# path.data: /var/lib/elasticsearch
# path.logs: /var/log/elasticsearch
# xpack.security.enabled: true
Konfigurasi Kibana (kibana.yml)
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://elasticsearch:9200"]
# elasticsearch.username: "kibana"
# elasticsearch.password: "devopstsg2025"
Filebeat (agent) untuk mengirim log ke Logstash (filebeat.yml)
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/*.log
output.logstash:
hosts: ["localhost:5044"]
# monitoring
setup.kibana:
host: "http://localhost:5601"
Jika Filebeat dikirimkan ke Logstash pada alamat remote, sesuaikan hosts.