容器网络(十一)日志管理之 Docker logs【81】

11、日志管理

(一)日志管理之 Docker logs

​ 高效的监控和日志管理对保持生产系统持续稳定地运行以及排查问题相当重要。在微服务架构中,因为容器的数量众多以及快速变化的特性使得记录日志和监控变得愈来愈重要。考虑到容器短暂和不固定的生命周期,当咱们须要 debug 问题时有些容器可能已经不存在了。所以,一套集中式的日志管理系统是生产环境中不可或缺的组成部分。docker

​ 本章咱们将讨论监控容器的各类可用技术和方案,首先会介绍 Docker 自带的 logs 子命令,而后讨论 Docker 的 logging driver,接下来经过实践学习几个已经普遍应用的日志管理方案:ELK、Fluentd 和 Graylog。架构

(1)dockers log

咱们首先来看一看默认配置下 Docker 的日志功能。dom

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

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

docker run -p 80:80 httpd学习

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

若是加上 -d 参数之后台方式运行容器,咱们就看不到输出的日志了。url

root@host1:~# docker run -d  -p 81:80 httpd
0aeccbe176442fe521ee1dd19aa9fabb5edf758b64d37412ad3737585847c434
root@host1:~#

这种状况下若是要查看容器的日志,有两种方法:命令行

  1. attach 到该容器。
  2. docker logs 命令查看日志。

先来看 attach 的方法。运行 docker attach 命令。debug

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

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

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

attach 的方法在实际使用中不太方便,由于:

  1. 只能看到 attach 以后的日志,之前的日志不可见。
  2. 退出 attach 状态比较麻烦(Ctrl+p 而后 Ctrl+q 组合键),一不当心很容器将容器杀掉(好比按下 Ctrl+C)。

查看容器日志推荐的方法是用 docker logs 命令。

root@host1:~# docker logs 0aeccbe17644
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message
[Wed Nov 18 09:01:11.542927 2020] [mpm_event:notice] [pid 1:tid 140339416298624] AH00489: Apache/2.4.46 (Unix) configured -- resuming normal operations
[Wed Nov 18 09:01:11.543957 2020] [core:notice] [pid 1:tid 140339416298624] AH00094: Command line: 'httpd -D FOREGROUND'
root@host1:~#

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

相关文章
相关标签/搜索