Docker容器中的日志怎么轮询?


例如:nginx访问日志,部署在物理机的时候,使用logrotate,创建一个配置文件到/etc/logrotate.d/下,依赖计划任务,自动轮询nginx访问日志,错误日志等都很方便;

现在要把环境迁移到Docker,问题来了,日志这块是怎么处理合适,目前我想到2个方案:
首先关在日志目录到宿主机;
  1. 在容器中安装并启动rsyslog,crond等服务,让他使用原来的方案进行轮询,宿主机中可以查看到;
  2. 在宿主集中进行轮询,容器内只生成日志;


两种方案都有顾虑:
第一种方案,这样做的话,整个容器会越来越重,跑的服务也越来越多,是不是跟Docker的理念背离太远;
第二种反感,目前只是想法阶段,不知道容器外部轮询,截断日志是,会不会对容器内的进程有影响,还有没有其他坑;

有生产环境的顺便指点下:
非常想系统学习下大公司生产环境的Docker集群方案,是不是只有有专业团队对Docker深度定制且提供技术支持时用在生产环境心里才有底啊?在摸索感觉好多坑呢~,相关的文档和文章也不会把相关的坑和解决方案说明下,底子薄,很无助啊。。。。
已邀请:

徐新坤 - 京东商城-TIG-JDOS团队

赞同来自: 郝开因


日志远程输出是一个办法。我提供一种本地解决的思路:
1. 启动nginx容器A,容器外挂volume,日志打到volume上(举例假设容器启动 -v /var/log:/var/log)。
2. 启动另外一个容器B,这个容器里面就是rsyslog/cron服务。也外挂绑定/var/log。即启动时候也是通过-v /var/log:/var/log绑定。
3. 容器B可以定期轮询外挂地址/var/log。并对日志进行处理。
4. 如果还有其他nginx容器C/D、也打印到对应的地址中,供容器B进行定时处理。

这样容器A/C/D是专门的nginx容器,B专做日志服务。大致如此。供你参考。

徐磊 - BlackOps@Qunar

赞同来自: teachmyself


日志不写文件,改成输出到console上,docker的log-driver改成none,主要是防止大量的日志刷屏导致json.log文件很大。然后用heka直接收集,用DockerLogInput这个插件就可以了。

tuxknight

赞同来自:


nginx支持将日志输出到syslog,而且可以输出到远程的syslog。
所以可以将nginx的日志全打到host的syslog上,

在host的/etc/rsyslog.conf里加入下面的内容,端口号推荐大于1024,nginx 日志输出到syslog的配置可以看文档 http://nginx.org/en/docs/syslog.html
$ModLoad imtcp
$InputTCPServerRun 514

teachmyself - teachmyself

赞同来自:


今天群里又有人问到这个问题,自己回复下吧:

https://docs.docker.com/config ... gure/

https://docs.docker.com/config ... slog/

要回复问题请先登录注册