2015-03-04 12 views
8

Powiedzmy, że mam Nginx działający wewnątrz kontenera (docker).
dziennik dostępu i błędów dzienniki są przesyłane przez standardowe wyjście, w Dockerfile:najlepszy sposób wysyłania dzienników kontenerów do kontenerów do logowania

# 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 wydaje eleganckie rozwiązanie do wysyłania stdout kontenera wewnątrz logstash (skonfigurowanej z wejściem syslog)

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

Ale logspout nie ma pojęcia o formacie dziennika wysyłanego przez STDOUT (czy coś mi brakuje?)

Tak więc muszę coś zrobić:

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

Ale co z dziennikiem błędów nginx? A co jeśli wyślę dziennik php-fpm również poprzez STDOUT? W jaki sposób logspout to zarządza?

Innym rozwiązaniem jest uruchomienie rsyslog indose pojemnika i wysyła zebrane logi do wejścia logstatsh ...

Jak widać nie jest to naprawdę jasne dla mnie ... Chciałbym móc wysłać nginx i php-fpm dzienniki logstash więc mogą być interpretowane jako co są ... ale nie znaleźć „dobra praktyka” ...

Czy możesz mi pomóc proszę

Odpowiedz

1

i Właśnie zauważyłem, że recent versions of nginx can be configured to log to network syslog daemons.

Logowanie do syslog jest dostępne od wersji 1.7.1.

Za pomocą tego można skonfigurować filtr wejściowy syslog na dedykowanym porcie UDP w logstash i wyruszyć do wyścigów.

Niestety, wersja 1.7.1 jest daleko od oficjalnych repo. Będziesz potrzebował dostawcę kłody gdzieś.

  1. W pojemniku nginx.
  2. W równoległym kontenerze przy użyciu "--volumes-from", aby uzyskać dostęp do kontenera nginx.
  3. Na hoście dokującym z woluminami związanymi z systemem plików hosta.

Masz wiele firm spedycyjnych, z których można wybierać oraz free chapter of The Logstash Book dedicated to the subject.

7

Możesz to zrobić teraz, z odrobiną hydrauliki w stylu włoskim.

W nowszych wersjach Docker jest a GELF output driver, który można skonfigurować do wysyłania dzienników. Ponieważ logstash ma a GELF input plugin, możesz skonfigurować logstash na , otrzymując te same komunikaty dziennika i zrobić coś pożytecznego z nimi.

Inną opcją, jeśli wolisz uniknąć tłumaczenia w obie strony, jest użycie logspout-logstash, wtyczki wyjściowej logstash dla logspout, która czyta wpisy do logu, kiedy wychodzą z Docker.

+0

To powinna być zaakceptowana odpowiedź. – Subfuzion

+0

Należy zauważyć, że sterownik wyjścia GELF używa tylko protokołu UDP (stan na dzień 20.04.2017), więc pakiety mogą zostać utracone, jeśli logstash znajduje się na innym komputerze. – herm

+0

Dobrze o tym pamiętać. – womble

Powiązane problemy