2015-03-04 8 views
8

Diciamo che ho Nginx in esecuzione all'interno di un container (finestra mobile).
I log logs di accesso e di errore sono inviati attraverso STDOUT, nel Dockerfile:il modo migliore per inviare log del contenitore docker a logstash

# forward request and error logs to docker log collector 
RUN ln -sf /dev/stdout /var/log/nginx/access.log 
RUN ln -sf /dev/stderr /var/log/nginx/error.log 

Logspout sembra una soluzione elegante per inviare STDOUT del vostro contenitore all'interno logstash (configurato con un ingresso di syslog)

input { 
    syslog { 
     type => syslog 
     port => 5514 
    } 
} 

Ma il logspout non ha idea del formato del log inviato tramite STDOUT (o mi manca qualcosa?)

Quindi, devo fare qualcosa del tipo:

input { 
    syslog { 
     type => nginx-access 
     port => 5514 
    } 
} 

Ma allora che dire del registro errori nginx? E se invio anche log di php-fpm tramite STDOUT? Come gestisce questo logspout?

Un'altra soluzione è quella di eseguire rsyslog indose il contenitore e inviare i log raccolti all'ingresso di logstatsh ...

Come si può vedere in realtà non è chiaro per me ... mi piacerebbe essere in grado per inviare nginx e php-fpm registri per logstash modo che possano essere interpretati come quello che sono ... ma non trovano una "buona pratica" ...

Potete aiutarmi per favore

risposta

1

I appena notato che recent versions of nginx can be configured to log to network syslog daemons.

La registrazione su syslog è disponibile dalla versione 1.7.1.

Utilizzando questo è possibile configurare un filtro di input syslog su una porta UDP dedicata in logstash e si è fuori per le gare.

Sfortunatamente, la versione 1.7.1 è molto lontana dai repository ufficiali. Avrai bisogno di un corriere di log da qualche parte.

  1. Nel contenitore nginx.
  2. In un contenitore parallelo che utilizza "--volumes-from" per accedere al contenitore nginx.
  3. Sull'host della finestra mobile con volumi associati al file system host.

Avete molti corrieri da prelevare e uno free chapter of The Logstash Book dedicated to the subject.

7

Si può fare questo, ora, con un po 'di tubature in stile italiano.

Nelle versioni più recenti di Docker, c'è a GELF output driver, che è possibile configurare su inviare i registri. Dal momento che logstash ha a GELF input plugin, è possibile configurare logstash su , ricevere quegli stessi messaggi di registro e fare qualcosa di utile con loro.

Un'altra opzione, se si preferisce evitare la traduzione GELF di andata e ritorno, è quello di utilizzare logspout-logstash, un plugin di uscita logstash per logspout, che recita voci di registro come vengono fuori Docker.

+0

Questa dovrebbe essere la risposta accettata. – Subfuzion

+0

È importante notare che il driver di uscita GELF utilizza solo UDP (a partire dal 20.04.2017) in modo che i pacchetti possano andare persi se il logstash si trova su un altro computer. – herm

+0

Questa è una buona cosa da tenere a mente. – womble

Problemi correlati