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

2024-04-29 08:32:01 发布

您现在位置:Python中文网/ 问答频道 /正文

所以,通过uWSGI来尝试Docker+Supervisord+Django应用。我把整堆都整理好了,但需要整理一下伐木。

如果我在非后台程序模式下启动supervisor

/usr/bin/supervisord -n

然后我把主管的日志输出放到docker logs stdout中。但是,如果supervisord处于守护进程模式,那么它自己的日志会被保存在容器文件系统中,并且它的应用程序的日志也会被保存在它们自己的app-stderr/stdout文件中。

我想把主管和应用程序stdout都记录到docker日志中。

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


Tags: djangodocker应用程序进程stdout模式伐木主管
3条回答

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

您可以在容器中使用像logstash这样的自宿主来收集日志并将其发送到中心服务器。或者使用像loggly或papertrail这样的商业服务来做同样的事情。

Docker容器就像一个面巾纸,你用了它就掉了。为了“活着”,Docker需要一些在前台运行的东西(而守护进程在后台运行),这就是为什么您要使用Supervisord。

因此,您需要“重定向/添加/合并”进程输出(访问和错误)以监视运行容器时看到的输出。

正如德鲁所说,每个人都在使用https://github.com/coderanger/supervisor-stdout来实现它(对我来说,这应该添加到supervisord project中!)。德鲁忘了说的话,你可能需要加上

stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0

到监控程序配置块。

还有一些非常有用的东西,假设您的进程正在登录到日志文件而不是stdout,您可以让supervisord监视它:

[program:php-fpm-log]
command=tail -f /var/log/php5-fpm.log
stdout_events_enabled=true
stderr_events_enabled=true

这将把php5-fpm.log内容重定向到stdout,然后通过supervisordstdout重定向到supervisordstdout。

我用这个完成了。

在Docker映像中安装supervisor-stdout

RUN apt-get install -y python-pip && pip install supervisor-stdout

监督配置

编辑您的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

相关问题 更多 >