我有一个通过docker运行的rails应用程序。我用Docker-compose调出应用程序(config下面)。整个应用程序涵盖了一个mysql,redis,rails(包括sidekiq workers),nginx(带有react前端)以及一个rsyslog服务器,它将所有日志转发到Loggly从Docker登录
我的问题与日志记录部分相关。基本上所有服务的日志都会被转发,除了来自sidekiq的日志。 当我用bundler exec sidekiq
启动sidekiq时,日志会输出到控制台(标准输出),但是当我在rsyslog服务器上输出/ var/log/messages时,我没有看到它们。
我在泊坞窗设置日志时,遵循本教程:
https://medium.com/@yoanis_gil/logging-with-docker-part-1-b23ef1443aac
我的想法是认为云在泊坞窗容器到stdout一切都应该被记录到泊坞窗日志机制 - 与我设置这意味着它应该去的syslog服务器...
泊坞窗,撰写文件:
version: '3'
services:
nginx:
image: nginx
depends_on:
- api
- syslog
ports:
- "80:8080"
logging:
driver: syslog
options:
syslog-facility: "daemon"
tag: "nginx"
syslog-address: "tcp://localhost:5514"
networks:
- phototankswarm
env_file: .env.dev
volumes:
- ./frontend/nginx/conf.d:/etc/nginx/conf.d
- ./frontend/public:/www
db:
image: mysql
env_file: .env.dev
depends_on:
- syslog
networks:
- phototankswarm
ports:
- "3306:3306"
volumes:
- ./backend/sql/data:/var/lib/mysql
logging:
driver: syslog
options:
syslog-facility: "daemon"
tag: "mysql"
syslog-address: "tcp://localhost:5514"
redis:
image: redis
depends_on:
- syslog
networks:
- phototankswarm
logging:
driver: syslog
options:
syslog-facility: "daemon"
tag: "redis"
syslog-address: "tcp://localhost:5514"
api:
image: pt-rails
env_file: .env.dev
networks:
- phototankswarm
command: >
sh -c '
rails s -p 3000 -b 0.0.0.0;
'
volumes:
- /Users/martinhinge/Pictures/docker/phototank:/media/phototank
- ./backend:/usr/src/app
ports:
- "3000:3000"
depends_on:
- db
- redis
- syslog
logging:
driver: syslog
options:
syslog-facility: "daemon"
tag: "rails"
syslog-address: "tcp://localhost:5514"
syslog:
image: syslog
ports:
- "localhost:5514:514"
networks:
- phototankswarm
volumes:
- /tmp:/var/log/syslog
networks:
phototankswarm:
你用bundler或rails启动应用程序?我看到'rails s -p 3000 -b 0.0.0.0' – Robert
@Robert好点...我现在还没有为docker脚本工作过sidekiq。我按照你的评论启动rails应用程序,并且通过登录容器并启动它来启动sidekiq:'docker exec -it 8d092f6b4d55 bundle exec sidekiq' – martin
这是关键。 'bundle'的输出被重定向到你的终端,而不是容器标准输出。您需要在命令或入口点内运行包。所以我想你需要运行两个导轨并捆绑在那里。 – Robert