使用 Fluentd 收集所有 Docker 日志

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

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

  • 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...点击查看项目介绍 ;
  • 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;

截止目前, 星球 内专栏累计输出 63w+ 字,讲解图 2808+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2200+ 小伙伴加入学习 ,欢迎点击围观

以防万一您过去两年一直处于离线状态, 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 并开始将您的日志传送到您选择的后端!

相关文章