使用 Fluentd 收集所有 Docker 日志

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡/ 赠书活动

目前,正在 星球 内带小伙伴们做第一个项目:全栈前后端分离博客项目,采用技术栈 Spring Boot + Mybatis Plus + Vue 3.x + Vite 4手把手,前端 + 后端全栈开发,从 0 到 1 讲解每个功能点开发步骤,1v1 答疑,陪伴式直到项目上线,目前已更新了 204 小节,累计 32w+ 字,讲解图:1416 张,还在持续爆肝中,后续还会上新更多项目,目标是将 Java 领域典型的项目都整上,如秒杀系统、在线商城、IM 即时通讯、权限管理等等,已有 870+ 小伙伴加入,欢迎点击围观

以防万一您过去两年一直处于离线状态, Docker 是一个面向开发人员和系统管理员的分布式应用程序的开放平台。通过将您的软件转变为容器,Docker 让跨职能团队可以跨平台无缝地交付和运行应用程序。

在以容器为中心的架构中,应用程序始终来来去去,这意味着跟踪应用程序日志会带来操作挑战。在哪里可以安全地归档日志?主机是非启动器,因为数千个容器可以在单个主机上运行。 HDFS 或 S3 可以成为容器日志的良好永久存放地,但容器如何将日志发送给它们?

在 1.6 版本中,Docker 添加了 Logging Driver 来解决这个问题。通过指定“–log-driver”选项,Docker 用户可以指定将日志发送到每个容器的位置。

Fluentd 作为 Docker 日志记录驱动程序

作为构建统一日志层的开源数据收集器 Fluentd 的原始创建者,我们欢迎这一发展。我们非常兴奋,以至于我们的一位工程师和 Fluentd 提交者 Satoshi Tagomori 发送了一个 拉取请求 ,将 Fluentd 添加为日志驱动程序。

今天,我们很高兴地宣布中本聪的拉取请求已经合并。在 master 分支上,Fluentd 已经作为日志记录驱动程序得到支持,并计划在 1.8 版本中发布!

那么,这将如何工作?对于真正不耐烦的人,我将快速浏览一下。这篇博文的其余部分已经在 Ubuntu 14.04 LTS 上进行了测试。

第 1 步:获取 Docker

运行以下命令:


 sudo  wget -qO- https://get.docker.com/ | sh

自 2015 年 7 月 1 日起,这将安装 Docker 1.7。运行“docker –version”以确认 Docker 的版本。如果确实是 1.7 或更早版本,请执行步骤 1b。否则,转到步骤 2。

步骤 1b:从 Master 分支获取 Docker(直到 1.8 版发布!)

停止泊坞窗:


 sudo  wget -qO- https://get.docker.com/ | sh

重命名当前的 Docker 二进制文件。


 sudo  wget -qO- https://get.docker.com/ | sh

获取 Docker 1.8


 sudo  wget -qO- https://get.docker.com/ | sh

更改 Docker 1.8 二进制文件的权限。


 sudo  wget -qO- https://get.docker.com/ | sh

最后,重启 Docker


 sudo  wget -qO- https://get.docker.com/ | sh

第 2 步:通过 td-agent 获取 Fluentd

下载 Fluentd 的最简单方法是通过 td-agent ,这是由 Treasure Data 维护的 Fluentd 包。运行以下命令。


 sudo  wget -qO- https://get.docker.com/ | sh

第 3 步:配置 td-agent

Fluentd 的关键特性之一是它能够根据标签路由事件。默认情况下,Docker 消息使用标签“docker.<CONTAINER_ID>”发送。这可以使用 Docker 的 –log-opt 选项 进行配置。例如,如果你想使用描述性的容器名称,你可以使用“–log-opt fluentd-tag=docker.{{.Name}}”。

为了测试此功能,让我们将 td-agent 配置为将所有带有以“docker”为前缀的标签的事件输出到 stdout。编辑 /etc/td-agent/td-agent.conf 并添加以下行:


 sudo  wget -qO- https://get.docker.com/ | sh

然后,重启 td-agent 如下:


 sudo  wget -qO- https://get.docker.com/ | sh

第 4 步:启动容器并确认

最后,让我们启动一个容器并将日志发送到主机的 td-agent。


 sudo  wget -qO- https://get.docker.com/ | sh

然后,我们看一下td-agent的stdout日志,可以在/var/log/td-agent/td-agent.log中找到


 sudo  wget -qO- https://get.docker.com/ | sh

下一步是什么?

回想一下,Fluentd/td-agent 能够将日志发送到 数百个后端系统, 例如 Elasticsearch、MongoDB、HDFS,是的,Treasure Data。因此,在您的 Docker 主机上安装 Fluentd 并开始将您的日志传送到您选择的后端!