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