Как я могу отправить журналы из образа докера jwilder / nginx-proxy в logstash? - PullRequest
1 голос
/ 03 апреля 2019

Я попытался добавить следующее в my_proxy.conf файл, который монтируется в /etc/nginx/conf.d/ в контейнере, как описано в https://github.com/jwilder/nginx-proxy#custom-nginx-configuration, но журналы не попадают в logstash.

Сначала я добавил это в файл conf:

http {
  # Custom log format that also includes the host that processed the request
  log_format logstash '$remote_addr - $remote_user [$time_local] "$host" '
                  '"$request" $status $body_bytes_sent '
                  '"$http_referer" "$http_user_agent"';

  # Send logs to Logstash
  access_log syslog:server=logstash:5140,tag=nginx_access logstash;
  error_log syslog:server=logstash:5140,tag=nginx_error notice;
}

но когда я запускаю контейнер, он говорит мне "http" directive is not allowed here in /etc/nginx/conf.d/my_proxy.conf:11

Так что теперь у меня просто есть

# Custom log format that also includes the host that processed the request
log_format logstash '$remote_addr - $remote_user [$time_local] "$host" '
                  '"$request" $status $body_bytes_sent '
                  '"$http_referer" "$http_user_agent"';

# Send logs to Logstash
access_log syslog:server=logstash:5140,tag=nginx_access logstash;
error_log syslog:server=logstash:5140,tag=nginx_error notice;

, который не получает никаких жалоб при запуске nginx, но также ничего не помещает в logstash. Отсюда я не знаю, как устранить неполадки.

Ответы [ 2 ]

1 голос
/ 04 апреля 2019

Syslog не запускается в вашем контейнере, поэтому нет смысла использовать его для ведения журнала.Ваши параметры:

1.) Настроить драйвер ведения журнала gelf на уровне демона Docker:

Записывает сообщения журнала в конечную точку расширенного формата журнала Graylog (GELF), такую ​​как Graylog илиLogstash.

Doc: https://docs.docker.com/config/containers/logging/configure/

2.) Запустите / настройте выделенный контейнер ведения журнала, который будет отправлять данные для выбранного контейнера (ов) в logstash.См. Logspout или другие подобные инструменты.

Инструмент: https://github.com/gliderlabs/logspout

0 голосов
/ 05 апреля 2019

Я изменил файл nginx.tmpl, который используется для генерации /etc/nginx/conf.d/default.conf.

Я добавил строку, чтобы везде появилось access_log.Например:

  access_log /var/log/nginx/access.log vhost;
  access_log syslog:server=111.222.111.222:1025 custom;

Я определил формат custom рядом с другим форматом.Например.

log_format vhost '$host $remote_addr - $remote_user [$time_local] '
                 '"$request" $status $body_bytes_sent '
                 '"$http_referer" "$http_user_agent"';


log_format custom '$remote_addr - $remote_user [$time_local]'
                  '"$request" $status $body_bytes_sent'
                  '"$http_referer" "$http_user_agent"'
                  '"$request_time" "$upstream_connect_time"';

А затем смонтировать nginx.tmpl в контейнер.например.

    volumes:
      - /var/run/docker.sock:/tmp/docker.sock:ro
      - ./config/nginx.conf:/etc/nginx/nginx.conf
      - ./nginx.tmpl:/app/nginx.tmpl
      - ./logs:/var/log/nginx

Чтобы проверить, перезапустите nginx-proxy, зайдите в контейнер nginx-proxy и посмотрите на сгенерированный /etc/nginx/conf.d/default.conf.

Это идея.Было бы неплохо иметь возможность указать где-нибудь URL-адрес системного журнала вместо того, чтобы вручную копировать вставку в nginx.tmpl.

. Обратите внимание, что это работает, несмотря на то, что Ян говорит о том, что системный журнал не работает внутри контейнера.Не знаю почему, это просто работает ™

...