2015-08-20 128 views
7

Sto lavorando a una soluzione per l'aggregazione di file di registro centralizzata dai nostri server CentOs 6.x. Dopo aver installato lo stack Elasticsearch/Logstash/Kibana (ELK) mi sono imbattuto in un plugin Rsyslog omelasticsearch che può inviare messaggi da Rsyslog a Elasticsearch nel formato logstash e ha iniziato a chiedermi perché ho bisogno di Logstash.Logstash vs Rsyslog per aggregazione di file di registro

Logstash ha molti plug-in di input diversi tra cui quello che accetta i messaggi Rsyslog. C'è un motivo per cui vorrei utilizzare Logstash per il mio caso d'uso in cui ho bisogno di raccogliere il contenuto dei file di log da più server? Inoltre, c'è un vantaggio nell'invio di messaggi da Rsyslog a Logstash invece di inviarli direttamente a Elasticsearch?

risposta

3

userei Logstash in mezzo se c'è qualcosa che ho bisogno da ciò che rsyslog non ha. Ad esempio, ottenere GeoIP da un indirizzo IP.

Se, d'altra parte, avrei bisogno di ottenere syslog o il contenuto del file indicizzato in Elasticsearch, utilizzerei rsyslog direttamente. Può fare il buffering (disco + memoria), filtrare, puoi scegliere come sarà il documento (puoi mettere la severità testuale invece del numero, per esempio), e può analizzare dati non strutturati. Ma il vantaggio principale è la performance, su cui si concentra rsyslog.Ecco una presentazione con alcuni numeri (e suggerimenti e trucchi) su Logstash, rsyslog ed Elasticsearch: http://blog.sematext.com/2015/05/18/tuning-elasticsearch-indexing-pipeline-for-logs/

2

Se si passa direttamente dal server a elasticsearch, è possibile ottenere i documenti di base (assumendo che la fonte sia JSON, ecc.). Per me, la potenza del logstash è quella di aggiungere valore ai log applicando la business logic per modificare ed estendere i log.

Ecco un esempio: syslog fornisce un livello di priorità (0-7). Non voglio avere un grafico a torta in cui i valori siano 0-7, quindi creo un nuovo campo che contenga i bei nomi ("emerg", "debug", ecc.) Che possono essere usati per la visualizzazione.

Solo un esempio ...

+0

Dopo aver appreso come funziona rsyslog, posso dire che la logica aziendale può essere implementata in modo relativamente semplice nella configurazione di rsyslog. Per il tuo esempio specifico, puoi usare la proprietà rsyslog di syslogseverity-text al posto di syslogseverity. – alecswan

2

Consiglierei logstash. Sarebbe più semplice da configurare, altri esempi e sono testati per adattarsi insieme.

Inoltre, ci sono alcuni vantaggi, in logstash è possibile filtrare e modificare i log.

  1. È possibile estendere i registri con i dati utili: nome del server, data e ora, ...
  2. tipi cast, stringa da int, ecc (utile per Indice elastico corretto)
  3. Filtra fuori i log da alcune regole

Inoltre, è possibile impostare le dimensioni del batch per ottimizzare il salvataggio su elastico. Un'altra funzione, se qualcosa è andato storto e ci sono quantità pazzesche di log al secondo che elastico non può elaborare, è possibile impostare logstash in modo che salvi alcune code di eventi o eventi che non possono essere salvati.

+2

Grazie! Rsyslog può fare # 1 - [questo articolo] (http://www.rsyslog.com/output-to-elasticsearch-in-logstash-format-kibana-friendly) mostra come segnalare il nome host e il timestamp. Può anche fare # 3 - [questa pagina] (http://www.rsyslog.com/doc/v8-stable/configuration/basic_structure.html#rulesets-and-rules) mostra come configurare le regole. Non penso di avere un caso d'uso per il casting n. 2. Non abbiamo una quantità pazzesca di log al secondo. Quindi, sto cercando di valutare il compromesso tra l'installazione e la gestione di un client aggiuntivo (logstash) sulle mie macchine virtuali e il vantaggio che ne traggo. Pensieri? Link? Grazie ancora! – alecswan

+0

Beh, questo è interessante, sembra che rsyslog possa gestire il buffering e anche estendere/filtrare. Probabilmente questa è una buona strada da percorrere e sembra che rsyslog + elastico possa andare bene insieme. Se rsyslog funziona, provalo. Logstash richiede molta memoria ram e ci sono alcuni problemi con logstash, non è perfetto. –

2

Nessuna opzione valida se si vuole veramente fare affidamento sul sistema affinché funzioni sotto carico e sia altamente disponibile.

Abbiamo trovato che usare rsyslog per inviare a una posizione centralizzata, archiviarlo usando redis di kafka e quindi usare logstash per fare la sua magia e spedirlo a Elasticsearch è l'opzione migliore.

Leggi il nostro blog su di esso here - http://logz.io/blog/deploy-elk-production/

(Disclaimer - Io sono il prodotto VP per logz.io e offriamo ELK as a service)