Dec 022012
 

La registrazione dei log è una cosa fondamentale per tutti gli amministratori di sistema, se si registrano troppo cose e non si riescono a gestire i file si potrebbe riempire una partizione o anche peggio si potrebeb avere un arresto di qualche servizio, se non si registrano abbastanza informazioni non si avranno le informazioni quando qualcosa va male, in generale una buona soluzione per questo è di inviare tutti i log ad un server centrale che memorizza tutti i dati per il tempo che serve, e tenere solo 1,2 giorni di log nella macchina locale.

Si potrebbe fare questa configurazione facilmente con rsyslog o syslog-ng per inviare/ricevere i log e logrotate per ruotare i file in locale sul vostro computer, ma oggi voglio mostrarvi alcuni programmi open source in grado di ricevere i log, memorizzarli sul filesystem o banca dati e analizzarli presentando i risultati tramite dashboard web.



flume-logo

Apache Flume

Flume è un servizio distribuito ed affidabile per la raccolta efficiente, l’aggregazione, e lo spostamento di grandi quantità di dati di log. Ha una architettura semplice e flessibile basata su flussi di dati in streaming. E’ robusto e fault tolerant, con meccanismi di affidabilità sintonizzabili e failover e molti meccanismi di recupero. Si utilizza un semplice modello di dati estensibile che consente di fare analisi on-line.

Il suo obiettivo principale è quello di fornire i dati dalle applicazioni al HDFS di Apache Hadoop, ed è un progetto di alto livello presso la Apache Software Foundation.

Un evento Flume è definito come l’unità di flusso di dati avente un payload byte e un insieme facoltativo di attributi della stringa. Un agente Flume è un processo (JVM), che ospita i componenti attraverso i quali scorrono gli eventi da una fonte esterna verso la destinazione successiva (hop).

flume

Una fonte Flume consuma eventi che gli sono stato consegnato da una fonte esterna, ad esempio un server web. La sorgente esterna invia eventi a flume in un formato riconosciuto dalla sorgente Flume di destinazione. Per esempio, una fonte Avro Flume può essere utilizzata per ricevere eventi Avro da clienti Avro o altri agenti Flume nel flusso che inviano eventi da un sink Avro. Quando una sorgente Flume riceve un evento, lo memorizza in uno o più canali. Il canale è un magazino passivo che mantiene l’evento fino a quando è consumato da un sink Flume. Il canale JDBC è un esempio – che utilizza un database integrato che si appoggia su file system. Il sink rimuove l’evento dal canale e lo mette in un repository esterno come HDFS (via Flume HDFS sink) o inoltra alla fonte Flume dell’agente Flume successivo (next hop) nel flusso. La fonte e il sink all’interno del determinato agente vengono eseguiti in modo asincrono con gli eventi che si tengono nel canale.

Logstash

Logstash è uno strumento per la gestione di eventi e log. Si può usare per raccogliere i log, analizzarli, e conservarli per un uso futuro (come, per la ricerca). Parlando di ricerca, logstash è dotato di una interfaccia web per la ricerca e l’analisi in tutti i log.

E’ completamente gratuito e completamente open source con la licenza Apache 2.0.
Logstash è scritto in JRuby ma viene rilasciato in file jar autonomi per una distribuzione semplice, quindi non c’è bisogno di scaricare JRuby o la maggior parte delle eventuali altre dipendenze, come alterantive è possibile installarlo come ruby gem .

La vita di un evento in Logstash

L’agente logstash può essere visto come una catena di eventi ed è composto da 3 parti: ingressi -> Filtri -> uscite.
Gli ingressi generano eventi, i filtri li modificano, le uscite li spediscono altrove.
Internamente a logstash, gli eventi vengono passati in ogni fase con code interne. E’ realizzato con un ‘SizedQueue’ in Ruby. SizedQueue consente di specificare un limite massimo di elementi nella coda in modo tale che ogni scrittura nella coda si blocchi se la coda è piena al massimo della capacità.

Logstash imposta ogni dimensione della coda a 20. Questo significa che solo 20 eventi possono stare in coda per la fase successiva – questo consente di ridurre qualsiasi perdita di dati e in generale evita a logstash cercano di agire come un sistema di memorizzazione dati. Queste code interne non sono utilizzate per memorizzare messaggi lungo termine.

Se un’uscita è in errore, il thread di uscita attende che questa uscita sia di nuovo funzionante e in grado di inviare correttamente il messaggio. Pertanto, la coda di uscita si ferma in fase di lettura da parte di questa uscita ed eventualmente si riempirà di eventi e causerà blocchi di scrittura.

Per una ottima introduzione, e molto di più su logstash vi consiglio di dare un’occhiata a questo video:



Greylog2

Graylog2 è una soluzione open source per la gestione di log che memorizza i log in ElasticSearch. Si compone di un server scritto in Java che accetta i messaggi syslog tramite TCP, UDP o AMQP e li memorizza nel database. La seconda parte è una piattaforma web che permette di gestire i messaggi di log dal vostro browser web.

Graylog2 è gratuito e open source. E’ rilasciato sotto la GNU General Public License v3 (GPLv3) e tutto il codice sorgente può essere sfogliati su su GitHub .

L’interfaccia web
Tutti i dati inviati Graylog2 appariranno nell’interfaccia web. E’ possibile utilizzare l’interfaccia web per cercare e filtrare i dati. Una parte centrale dell’interfaccia web sono i flussi: In sostanza vengono salvate le ricerche che consentono di accedere rapidamente una visione d’insieme che è già pre-filtrata in modo che corrisponda ad esempio ad alcune parti specifiche della vostra applicazione. È inoltre possibile eseguire monitoraggio ed allarmistica sui flussi di singoli o direttamente inoltrare tutti i messaggi che vengono abbinati in un flusso ad altri endpoint.

Il server Graylog2 accetta il syslog standard tramite TCP/UDP e GELF via UDP. È anche possibile inviare in entrambi i formati tramite AMQP. È possibile configurare i demoni syslog per inviare i propri dati a Graylog2 o accedervi direttamente dall’interno delle applicazioni.

Logstash e logix sono molto utili per inoltrare o inviare i log a un’istanza Graylog2.

Scribe

Scribe è un server per l’aggregazione dei dati di log in streaming. E’ progettato per adattarsi ad un gran numero di nodi ed essere robusto ad errori di rete e di nodo. La struttura prevede un server scribe in esecuzione su ogni nodo del sistema, configurato per aggregare i messaggi ed inviarli a un server centrale scribe (o più server) in gruppi più grandi. Se il server scribe centrale non è disponibile il server locale scribe scrive i messaggi in un file su disco locale e li invia quando il server centrale torna online. Il server centrale scribe in grado di scrivere i messaggi nei file che sono la loro destinazione finale, di solito su un NFS o un filesystem distribuito, o inviarle a un altro livello di server scribe.

Scribe è unico in quanto le voci di registro dei client sono costituite da due stringhe, una categoria e un messaggio. La categoria è una descrizione ad alto livello della destinazione del messaggio e può avere una configurazione specifica nel server scribe, che permette ad archivi di dati di essere spostati cambiando la configurazione di scribe anziché il codice client. Il server consente inoltre configurazioni basate su un prefisso di categoria, e una configurazione predefinita che è possibile inserire il nome della categoria nel percorso del file. La flessibilità e l’estensibilità è fornita attraverso l’astrazione “store”. I magazzini (store) sono caricati in modo dinamico sulla base di un file di configurazione, e possono essere modificati in fase di esecuzione senza arrestare il server. gli store sono implementati come una gerarchia di classi, e store possono contenere altri store. Questo consente all’utente di fare una catena di funzioni insieme in diversi ordini e combinazioni modificando solo la configurazione.

Popular Posts:

Flattr this!

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(required)

(required)

*