Installare ELK in Docker

Mattepuffo's logo
Installare ELK in Docker

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!


Condividi

Commentami!