如何将jwilder/nginx代理docker映像中的日志发送到logstash?

如何将jwilder/nginx代理docker映像中的日志发送到logstash?,docker,nginx,logstash,jwilder-nginx-proxy,Docker,Nginx,Logstash,Jwilder Nginx Proxy,我尝试将以下内容添加到一个my_proxy.conf文件中,该文件将装入容器中的/etc/nginx/conf.d/,如中所述,但日志不会进入logstash 最初,我将其添加到conf文件中: http { # Custom log format that also includes the host that processed the request log_format logstash '$remote_addr - $remote_user [$time_local] "$h

我尝试将以下内容添加到一个
my_proxy.conf
文件中,该文件将装入容器中的
/etc/nginx/conf.d/
,如中所述,但日志不会进入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”指令在/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时不会收到任何投诉,但也不会将任何内容放入日志中。从这里开始,我不知道如何进行故障排除。

Syslog不在您的容器中运行,因此使用它进行日志记录没有意义。您的选择:

1.)在Docker守护程序级别配置
gelf
日志记录驱动程序:

将日志消息写入Graylog扩展日志格式(GELF)端点,如Graylog或Logstash

文件:

2.)启动/配置专用日志记录容器,该容器将向logstash发送所选容器的数据。请参阅
logspoot
或其他类似工具


工具:

我所做的是修改
nginx.tmpl
文件,该文件是用于生成
/etc/nginx/conf.d/default.conf
的模板

我在所有出现的
access\u日志中添加了一行。例如:

  access_log /var/log/nginx/access.log vhost;
  access_log syslog:server=111.222.111.222:1025 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
,那就太好了


注意,尽管Jan认为syslog在容器中不起作用,但这是可行的。不知道为什么,它只是起作用™

请也共享您的日志存储配置。