2015-03-04 5 views
8

Скажем, у меня есть Nginx, работающий внутри контейнера (докер).
Журналы журнала доступа и ошибок отправляются через STDOUT, в Dockerfile:лучший способ отправить журналы контейнеров докеров на 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 кажется элегантное решение для отправки STDOUT вашего контейнера внутри logstash (сконфигурированный с системного журнала ввода)

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

Но logspout не имеет представления о формате журнала, отправленного через STDOUT (или я что-то не хватает?)

Так что я должен сделать что-то вроде:

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

Но как насчет журнала ошибок nginx? И что, если я отправлю php-fpm log через STDOUT тоже? Как logspout управляет этим?

Другим решением является запуск Rsyslog indose контейнер и отправить собранные журналы на вход logstatsh ...

Как вы можете видеть, что это не совсем понятно, для меня ... Я хотел бы быть в состоянии отправить Nginx и PHP-FPM журналы logstash, чтобы они могли быть истолкованы как то, что они есть ... но я не нашел «хорошую практику» ...

можете ли вы помочь мне, пожалуйста

ответ

1

I только что заметил, что recent versions of nginx can be configured to log to network syslog daemons.

Вход в syslog доступен с версии 1.7.1.

С помощью этого вы можете настроить входной фильтр syslog на выделенном UDP-порту в logstash, и вы уходите на гонки.

К сожалению, v1.7.1 находится далеко от официальных репозиториев. Вам понадобится отправитель бревна где-то.

  1. В контейнере nginx.
  2. В параллельном контейнере с использованием '--volumes-from' для доступа к контейнеру nginx.
  3. На хосте docker с томами, связанными с файловой системой хоста.

У вас есть много лог-грузоотправителей для выбора и free chapter of The Logstash Book dedicated to the subject.

7

Вы можете сделать это сейчас, с небольшим количеством сантехники в итальянском стиле.

В более новых версиях Docker существует a GELF output driver, которые вы можете настроить на . Отправьте бревна. Поскольку logstash имеет a GELF input plugin, вы можете настроить logstash на , получить те же сообщения журнала и сделать с ними что-то полезное.

Другой вариант, если вы предпочитаете избегать перевода GELF в оба конца, заключается в использовании logspout-logstash, плагина вывода logstash для logspout, который считывает записи журнала, когда они выходят из Docker.

+0

Это должен быть принятый ответ. – Subfuzion

+0

Важно заметить, что выходной драйвер GELF использует только UDP (по состоянию на 20.04.2017), поэтому пакеты могут быть потеряны, если логсташ находится на какой-либо другой машине. – herm

+0

Это хорошо, что нужно иметь в виду. – womble