Docker,Supervisord和logging - 如何整合docker日志中的日志?

jvc*_*c26 20 python django logging supervisord docker

所以,通过uWSGI试验Docker + Supervisord + Django应用程序.我整个堆栈工作正常,但需要整理日志记录.

如果我以非守护进程模式启动主管,

/usr/bin/supervisord -n
Run Code Online (Sandbox Code Playgroud)

然后我将主管的日志记录输出播放到docker logs stdout中.但是,如果supervisord处于守护进程模式,它自己的日志会被隐藏在容器文件系统中,并且其应用程序的日志也会在自己的app__stderr/stdout文件中执行.

我想要的是将supervisor和application stdout记录到docker日志中.

在非守护进程模式下启动监督是一个明智的想法,还是会导致意想不到的后果?另外,如何将应用程序日志也播放到docker日志中?

Dre*_*rew 38

我完成了这个.

在Docker镜像中安装supervisor-stdout:

RUN apt-get install -y python-pip && pip install supervisor-stdout
Run Code Online (Sandbox Code Playgroud)

Supervisord配置

编辑你的supervisord.conf外观:

[program:myprogram]
command=/what/ever/command
stdout_events_enabled=true
stderr_events_enabled=true

[eventlistener:stdout] 
command = supervisor_stdout 
buffer_size = 100 
events = PROCESS_LOG 
result_handler = supervisor_stdout:event_handler
Run Code Online (Sandbox Code Playgroud)

  • 我们的ubuntu 16.04上的标准`python-pip`安装需要194MiB,因此我们使用了以下内容:`apt-get install --no-install-recommended python-pip python-setuptools python-wheel`(2.6MiB) (6认同)
  • 这对于 python 3 不再适用。原因是 pypi 存储库中的supervisor-stdout 包没有更新。您需要使用“apt-get install -y git”安装git并使用“pip install git+https://github.com/coderanger/supervisor-stdout.git”安装supervisor_stdout (2认同)

Tho*_*aux 19

Docker容器就像一个面巾纸,你使用它然后你放弃它.为了"活着",Docker需要在前台运行的东西(而守护进程在后台运行),这就是你使用Supervisord的原因.

因此,您需要将过程输出(访问和错误)"重定向/添加/合并"到运行容器时看到的Supervisord输出.

正如Drew所说,每个人都使用https://github.com/coderanger/supervisor-stdout来实现它(对我而言,这应该被添加到supervisord项目中!).德鲁忘了说,你可能需要添加

stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
Run Code Online (Sandbox Code Playgroud)

到supervisord程序配置块.

还有一些非常有用的东西,想象你的进程是登录日志文件而不是stdout,你可以请求supervisord观看它:

[program:php-fpm-log]
command=tail -f /var/log/php5-fpm.log
stdout_events_enabled=true
stderr_events_enabled=true
Run Code Online (Sandbox Code Playgroud)

这将通过supervisord-stdout将php5-fpm.log内容重定向到stdout然后重定向到supervisord stdout.


rul*_*web 12

supervisor-stdout需要安装python-pip,下载~150mb,我觉得这个容器只需要安装另一个工具.

将日志文件重定向到/ dev/stdout对我有用:

stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
Run Code Online (Sandbox Code Playgroud)

http://veithen.github.io/2015/01/08/supervisord-redirecting-stdout.html

  • 这是我发现的最干净的方式,不需要任何额外的包. (4认同)

Til*_*ill 5

我同意,不使用守护进程模式听起来像是最好的解决方案,但我可能会采用与实际物理服务器或某种VM设置时相同的策略:集中日志记录.

您可以在容器内部使用像logstash这样的自托管来收集日志并将其发送到中央服务器.或者使用像loggly或papertrail这样的商业服务来做同样的事情.