最佳实践系列丨Docker EE 日志记录最佳实践(一)

本文首发自“Docker公司”公众号(ID:docker-cn)
编译丨小东
每周一、三、五 与您不见不散!

在传统上,设计和实现集中的日志记录总是成为马后炮。要等到各种问题出现,集中的日志记录成为优先事项,人们才会想到用这样的解决方案查询、查看和分析日志,以找到问题的根本原因。但是到了容器时代,在设计使用 Docker 企业版 (Docker EE) 的容器即服务 (CaaS) 平台时,优先解决集中式日志记录是至关重要的。随着在容器中部署的微服务数量不断增多,它们以日志(或事件)形式产生的数据量会发生指数增长。

您将学到的知识

此参考架构提供了关于 Docker 日志记录功能如何工作的概述,说明了 Docker 日志的两大类别,然后讨论了 Docker 日志记录最佳实践。

了解 Docker 日志记录

在研究设计要素之前,先了解 Docker 日志记录的基本知识很重要。

Docker 支持不同的日志记录驱动,用于存储和/或流式传输主容器进程 (pid 1) 的容器 stdout 和 stderr 日志。默认情况下,Docker 使用 json-file 日志记录驱动,但也可以配置它使用许多其他驱动,方法是在 /etc/docker/daemon.json 中设置 log-driver 的值,然后重启 Docker 守护进程以重新加载其配置。

日志记录驱动设置会应用于重新配置守护进程之后启动的所有容器(在重新配置日志记录驱动之后重启现有容器并不会导致容器使用更新过的配置)。要覆盖默认的容器日志记录驱动,应使用 --log-driver 和 --log-opt 选项运行容器。另一方面,可以使用 docker service update --log-driver--log-opt 对 swarm mode 服务进行运行中更新,使其改用不同的日志记录驱动。

那么 Docker 引擎日志呢?这些日志通常由默认的系统管理节点日志记录器处理。现代的大多数发行版(CentOS 7、RHEL 7、Ubuntu 16 等)都使用 systemd,后者使用 journald 记录日志,使用 journalctl 访问日志。要访问引擎日志,可使用 journalctl -u docker.service。

Docker 日志类别和源

说过 Docker 日志记录的基础知识之后,本节将说明它们的类别和源。

Docker 日志通常可分为两种类别:基础架构管理日志或应用日志。大多数日志根据需访问日志者的角色自然地归入这两种类别。

  • 运维人员最关心平台的稳定性以及服务的可用性。
  • 开发人员比较关心其应用代码以及服务的性能。

为了实现自助服务平台,运维人员和开发人员都应该有权访问他们为了履行职责而需要访问的日志。开发运维的实践表明,在服务可用性和性能方面,大家要共同承担总体责任。但是,不应该让每一个人都有权访问平台上的每个日志。例如,开发人员应该只需要访问关于其服务和集成点的日志。运维人员则更关心 Docker 守护进程日志、UCP 和 DTR 可用性,以及服务可用性。两者的访问范围有一些重叠,因为开发人员和运维人员都应该了解服务可用性。让每个角色都能访问需要的日志,可以在发生问题时简化故障排除,并缩短解决故障平均时间 (MTTR)。

猜你喜欢

转载自my.oschina.net/u/3611008/blog/1823849