Installare ELK in Docker
Prima di tutto specifichiamo bene cosa si intende per ELK: è uno stack composto da Elastisearch, Logstash e Kibana:
- Elasticsearch archivia tutti i dati che arrivano da Logstash; non è un database relazionale classico (come MySQL), ma un database documentale (JSON) ottimizzato per la ricerca testuale ultra-rapida
- Logstash riceve i dati grezzi da varie sorgenti, li "pulisce" e li invia a Elasticsearch; funziona come una pipeline con tre stadi:
- Input (prende i dati)
- Filter (li modifica/arricchisce)
- Output (li spedisce)
- Kibana si collega a Elasticsearch per permetterti di esplorare i dati visivamente; senza Kibana, dovresti interrogare Elasticsearch tramite linee di comando complicate
Riporto un'analogia che ho trovato online; immagina di gestire una biblioteca:
-
Logstash è il bibliotecario che riceve i camion carichi di libri (dati), mette l'etichetta corretta a ogni libro e lo pulisce dalla polvere
-
Elasticsearch è l'immenso archivio con scaffali infiniti dove i libri sono ordinati in modo da essere trovati all'istante
-
Kibana è il catalogo digitale (il computer all'ingresso) che permette ai lettori di fare ricerche e vedere statistiche su quanti libri ci sono
Detto ciò vediamo come usare lo stack in Docker.
Prima di tutto creiamo delle cartelle:
$ mkdir test_elk
$ cd test_elk/
$ mkdir logstash-config
Poi create il file logstash-config/logstash.conf con questo dentro:
input {
http {
port => 5044
}
tcp {
port => 5000
}
}
output {
elasticsearch {
hosts => ["http://elasticsearch:9200"]
index => "logstash-%{+YYYY.MM.dd}"
}
stdout { codec => rubydebug }
}
Poi create il file docker-compose.yml:
services:
# Database per indicizzare i dati
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:8.12.0
container_name: elasticsearch
environment:
- discovery.type=single-node
- xpack.security.enabled=false
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ports:
- "9200:9200"
# Interfaccia grafica per vedere i dati
kibana:
image: docker.elastic.co/kibana/kibana:8.12.0
container_name: kibana
ports:
- "5601:5601"
environment:
- ELASTICSEARCH_HOSTS=http://elasticsearch:9200
depends_on:
- elasticsearch
# Motore di elaborazione dati
logstash:
image: docker.elastic.co/logstash/logstash:8.12.0
container_name: logstash
volumes:
- ./logstash-config/logstash.conf:/usr/share/logstash/pipeline/logstash.conf
ports:
- "5044:5044"
- "5000:5000"
environment:
- LS_JAVA_OPTS=-Xms256m -Xmx256m
depends_on:
- elasticsearch
networks:
default:
name: elk-network
A questo punto installiamo il tutto:
$ docker-compose up -d
Alla fine potete andare su http://localhost:5601/ per accedere a Kibana.
Se volete iniziare a giocarci potete inviare questi dati e poi andare a cercarli nella sezione Discover:
curl -XPOST localhost:5044 -d '{"user":"Mario", "messaggio":"Ciao ELK!"}' -H "Content-Type: application/json"
Enjoy!
software docker kibana logstash elastisearch
Commentami!