高效的监控和日志管理对保持生产系统持续稳定地运行以及排查问题相当重要。html
在微服务架构中,因为容器的数量众多以及快速变化的特性使得记录日志和监控变得愈来愈重要。考虑到容器短暂和不固定的生命周期,当咱们须要 debug 问题时有些容器可能已经不存在了。所以,一套集中式的日志管理系统是生产环境中不可或缺的组成部分。docker
本章咱们将讨论监控容器的各类可用技术和方案,首先会介绍 Docker 自带的 logs 子命令,而后讨论 Docker 的 logging driver,接下来经过实践学习几个已经普遍应用的日志管理方案:ELK、Fluentd 和 Graylog。架构
咱们首先来看一看默认配置下 Docker 的日志功能。curl
对于一个运行的容器,Docker 会将日志发送到 容器的 标准输出设备(STDOUT)和标准错误设备(STDERR),STDOUT 和 STDERR 实际上就是容器的控制台终端。微服务
举个例子,用下面的命令运行 httpd 容器:学习
docker run -p 80:80 httpdurl
由于咱们在启动日志的时候没有用 -d
参数,httpd 容器之前台方式启动,日志会直接打印在当前的终端窗口。spa
若是加上 -d
参数之后台方式运行容器,咱们就看不到输出的日志了。命令行
这种状况下若是要查看容器的日志,有两种方法:debug
attach 到该容器。
用 docker logs
命令查看日志。
先来看 attach 的方法。运行 docker attach
命令。
attach 到了 httpd 容器,但并无任何输出,这是由于当前没有新的日志信息。
为了产生一条新的日志,能够在 host 的另外一个命令行终端执行 curl localhost
。
这时,attach 的终端就会打印出新的日志。
attach 的方法在实际使用中不太方便,由于:
只能看到 attach 以后的日志,之前的日志不可见。
退出 attach 状态比较麻烦(Ctrl+p 而后 Ctrl+q 组合键),一不当心很容器将容器杀掉(好比按下 Ctrl+C)。
查看容器日志推荐的方法是用 docker logs
命令。
docker logs
可以打印出自容器启动以来完整的日志,而且 -f
参数能够继续打印出新产生的日志,效果上与 Linux 命令 tail -f
同样。
下一节咱们讨论 Docker 如何支持多种日志方案。
书籍:
1.《天天5分钟玩转Docker容器技术》
https://item.jd.com/16936307278.html
2.《天天5分钟玩转OpenStack》
https://item.jd.com/12086376.html