Il tuo server è un armadio chiuso. Quando qualcosa si rompe — un errore 500, un memory leak, un attacco — non hai tempo per aprire file di log sparsi su tre macchine diverse. Ogni minuto perso a cercare è un cliente perso. Noi, di Meteora Web, abbiamo visto troppe aziende perdere ore in debugging manuale. Con l'ELK Stack i log diventano un database centrale, ricercabile e visualizzabile in tempo reale. Qui ti mostriamo come funziona davvero.
Cos'è l'ELK Stack e perché centralizzare i log?
ELK sta per Elasticsearch, Logstash, Kibana. Tre strumenti che lavorano insieme per raccogliere, elaborare e visualizzare log e metriche da qualsiasi sorgente: server, applicazioni, database, dispositivi di rete.
Il problema: log in file sparsi, formato diverso per ogni applicazione, nessuna correlazione temporale. Un errore in un servizio PHP può dipendere da un timeout in un database MySQL, ma se ogni log sta su una macchina diversa, non lo vedi.
La soluzione: un'unica pipeline che raccoglie tutto in Elasticsearch (il motore di ricerca e storage), lo trasforma con Logstash (il processore di dati) e lo rende visibile in Kibana (l'interfaccia di analisi). Risultato: debug in secondi, non ore.
Sponsored Protocol
Un esempio che abbiamo visto
Un nostro cliente aveva un sito WooCommerce che andava in crash ogni sera. Nessun log visibile. Abbiamo configurato un filebeat (un agente di log) per spedire i log PHP e Apache a un Logstash centrale. In pochi minuti abbiamo visto un pattern: allowed memory size exhausted alle 22:00. Un cron job pesante. Risolto in un'ora. Senza ELK sarebbe stata una caccia al tesoro.
Come funziona Elasticsearch nella gestione dei log?
Elasticsearch è un database NoSQL basato su Apache Lucene. Non è un database relazionale: non devi definire schemi rigidi. I documenti JSON arrivano e vengono indicizzati automaticamente. Per i log è perfetto: ogni riga di log diventa un documento con campi dinamici (@timestamp, level, message, host, ecc.).
Performance reale: Elasticsearch può gestire centinaia di milioni di documenti con ricerche full-text sub-secondo. Noi l'abbiamo usato per indicizzare oltre 500 GB di log al giorno su un piccolo cluster a 3 nodi.
Mappatura di base per un log
Non devi creare mappature a mano? No, ma se vuoi ottimizzare, una mappatura esplicita per i campi numerici o geo previene errori. Ecco un esempio di mapping per un campo response_time in millisecondi:
Sponsored Protocol
{
"mappings": {
"properties": {
"@timestamp": { "type": "date" },
"response_time": { "type": "integer" },
"status": { "type": "keyword" },
"message": { "type": "text" }
}
}
}
Puoi applicarlo con una chiamata API PUT a /index_name. Senza mappatura, Elasticsearch assegnerà tipi di default — funziona, ma per campi come IP o status a volte serve keyword invece di text.
Come Logstash trasforma i dati dei log?
Logstash è il tubo di raccolta. Prende input da file, socket, database, li trasforma con filtri (grok, mutate, date) e li spedisce a Elasticsearch o altri output.
Perché usarlo? I log raw sono sporchi: timestamp in formato diverso, campi mischiati, messaggi multilinea (stack trace). Logstash li normalizza. Noi abbiamo visto file di log Apache con date in formato 03/May/2025:12:00 che diventano 2025-05-03T12:00:00 in un secondo.
Configurazione Logstash di base per Nginx
input {
beats {
port => 5044
}
}
filter {
if [fields][log_type] == "nginx" {
grok {
match => { "message" => "%{COMBINEDAPACHELOG}" }
}
date {
match => ["timestamp", "dd/MMM/yyyy:HH:mm:ss Z"]
}
mutate {
convert => ["response", "integer"]
convert => ["bytes", "integer"]
}
}
}
output {
elasticsearch {
hosts => ["http://localhost:9200"]
index => "nginx-logs-%{+YYYY.MM.dd}"
}
}
Attenzione: Logstash può diventare un collo di bottiglia. Noi lo abbiamo scalato distribuendo i carichi con Kafka o Redis come buffer. Per volumi enormi, considera di usare Elastic Agent (la nuova generazione) che integra filebeat e metricbeat.
Sponsored Protocol
Come Kibana visualizza e analizza i log?
Kibana è il cruscotto. Non serve solo per vedere i log: fa analisi aggregata, alert, dashboard. Puoi cercare errori HTTP 5xx, raggruppare per URL, vedere la latenza media nel tempo.
Esempio concreto: Un cliente voleva sapere quanti visitatori italiani riceveva e quali pagine causavano più crash. Con Kibana abbiamo creato una dashboard che mostrava una mappa delle sessioni (basata su IP geolocalizzati) e un istogramma dei codici di errore. Decisione presa: ottimizzare le pagine con più errori prima di lanciare una campagna Ads.
Query Lucene per trovare errori in tempo reale
# In Kibana, nel campo di ricerca:
response:[500 TO 599] AND host:"web-01"
Puoi salvare queste ricerche come Saved Search e usarle per alert (con Watcher o ElastAlert).
Sponsored Protocol
Qual è la configurazione tipica di una pipeline ELK?
Una pipeline completa per log centralizzati ha quattro componenti:
- Agenti (Beats) — Filebeat, Metricbeat, Winlogbeat. Installati su ogni server, inviano log al.
- Logstash — Centralizza e trasforma. Puoi metterne uno o più in cluster.
- Elasticsearch — Memorizza e indicizza. Puoi avere un singolo nodo per test, cluster per produzione.
- Kibana — Interfaccia web per esplorare e creare dashboard.
Noi consigliamo: per almeno 3 server, usa due nodi Elasticsearch in cluster e un Logstash dedicato. Per volumi alti, aggiungi Kafka come coda. Mai mettere Logstash e Kibana sullo stesso server di Elasticsearch in produzione – la memoria è preziosa.
Esempio di docker-compose per ambiente di sviluppo
version: '3'
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:8.11.0
environment:
- discovery.type=single-node
- ES_JAVA_OPTS=-Xms1g -Xmx1g
ports:
- "9200:9200"
logstash:
image: docker.elastic.co/logstash/logstash:8.11.0
volumes:
- ./logstash.conf:/usr/share/logstash/pipeline/logstash.conf
ports:
- "5044:5044"
environment:
- LS_JAVA_OPTS=-Xms512m -Xmx512m
kibana:
image: docker.elastic.co/kibana/kibana:8.11.0
ports:
- "5601:5601"
environment:
- ELASTICSEARCH_HOSTS=http://elasticsearch:9200
Nota: in produzione abilita sempre HTTPS e autenticazione. L'immagine base di ELK è sicura di default dalla versione 8.0.
Sponsored Protocol
Cosa fare adesso
- Installa Filebeat su uno dei tuoi server di produzione e invia i log di sistema (syslog, auth.log). Segui la guida ufficiale Elastic.
- Crea un indice temporaneo su Elasticsearch con il mapping per i campi numerici (response time, status code).
- Configura Logstash con un filtro grok per il formato dei tuoi log (Apache, Nginx, applicativi).
- Crea una dashboard Kibana per visualizzare gli errori HTTP e le risposte lente.
- Imposta un alert (usando il watcher integrato o ElastAlert) per errori ricorrenti — non appena succede, ricevi una notifica.
- Leggi la nostra guida madre sul monitoring e observability per inquadrare ELK nel contesto più ampio.