日志管理

高效的监控和日志管理对保持生产系统持续稳定地运行以及排查问题至关重要。

 

在微服务架构中,由于容器的数量众多以及快速变化的特性使得记录日志和监控变得越来越重要。

考虑到容器短暂和不固定的生命周期,当我们需要 debug 问题时有些容器可能已经不存在了。

因此,一套集中式的日志管理系统是生产环境中不可或缺的组成部分。

 

日志管理方案:

 

docker gc 日志 docker 日志管理_运维

 

Docker logs

默认配置下 Docker 的日志功能

 

对于一个运行的容器,Docker 会将日志发送到 容器的 标准输出设备(STDOUT)和标准错误设备(STDERR),STDOUT 和 STDERR 实际上就是容器的控制台终端。

 

举个例子,用下面的命令运行 httpd 容器:

docker run -p 80:80 httpd

docker gc 日志 docker 日志管理_操作系统_02

 

在启动日志的时候没有用 -d 参数,httpd 容器以前台方式启动,日志会直接打印在当前的终端窗口

如果加上 -d 参数以后台方式运行容器,就看不到输出的日志了

docker gc 日志 docker 日志管理_运维_03

 

这种情况下如果要查看容器的日志,有两种方法:

    1.attach 到该容器

    2.用 docker logs 命令查看日志

 

(一 )attach 的方法

运行 docker attach 命令

docker gc 日志 docker 日志管理_操作系统_04

attach 到了 httpd 容器,但并没有任何输出,这是因为当前没有新的日志信息

为了产生一条新的日志,可以在 host 的另一个命令行终端执行 curl localhost

docker gc 日志 docker 日志管理_日志管理_05

这时,attach 的终端就会打印出新的日志

docker gc 日志 docker 日志管理_操作系统_06

 

attach 的方法在实际使用中不太方便,因为:

    只能看到 attach 之后的日志,以前的日志不可见

    退出 attach 状态比较麻烦(Ctrl+p 然后 Ctrl+q 组合键),一不小心很容器将容器杀掉(比如按下 Ctrl+C)

 

(二)docker logs 方法

用 docker logs 命令

docker gc 日志 docker 日志管理_docker_07

docker logs 能够打印出自容器启动以来完整的日志,并且 -f 参数可以继续打印出新产生的日志,效果上与 Linux 命令 tail -f 一样