原文:https://www.loggly.com/blog/centralize-logs-docker-containers/

Docker是一个快速增长的应用分发平台。成千上万的企业如今正使用Docker来缩短他们的发布周期和实现持续交付,Docker 使用它的容器将复杂的依赖关系隔离开来,并因此使得应用程序更易于维护。Loggly 对Docker及时的提供新的支持的原因正在于现今它已经有很多值得兴奋的地方:

使用 #Docker#AWS ? 你应该为发现这样的一个“重新发明”而感到惊喜! —— Jeff Barr(@jeffbarr) November 4,2014

在这篇文章里,我将介绍几种Docker logging的方法,并且给出如何从类似Nginx这样的应用程序发送syslog的示例。

图1

Loggly 为Docker Logging添色

Docker 提供一个内置的logging功能,但是它仅仅只是给你一个初步的文本格式的最近访问日志。使用Loggly管理你的Docker日志将为你带来一些可观的收益:

  • 你可以在一个地方获取到所有容器的日志,而无需再运行docker logs命令;
  • 你可以通过我们提供的Search.工具Loggly Dynamic Field Explorer,更快捷、有效的分析你的Docker日志并且它还提供一个直观的趋势图;
  • 你可以设置一些报警,这样便可以在发生错误或者事件数达到一个特定的可能意味着故障的阈值时及时知晓。

Docker日志发送到Loggly可以有多种途径

我们为您提供了多种灵活的日志传送方法,你可以选择其中最适合你特定环境的那个——当然,所有的方法都不需要专门的agent。以下是为每种logging类型提供的最佳方法:

1.Syslog:
现在您可以使用Loggly Docker container。它同样托管在Docker Hub上。SendGrid Labs向我们推荐了这种方法。

2.自定义应用日志:
通过我们的HTTP端点发送数据:如果你正在使用我们为通用开发语言提供的logging库的其中之一做logging的话,这种方式可能会工作的很好。

3.文件和socket归档:
在宿主机上做一个显式的绑定mount: 之后rsyslog将会帮你读取已经mount的卷,而隔一段时间会将你的log events转发到Loggly。下次我会找个时间针对这种方法作出更为详细的介绍。

在这篇文章里,我会将重心放在第一项,如果你的应用创建兼容于syslog的log events的话,这种方式将会工作的很好。兼容于Syslog的应用包括诸如Apache,Nginx和使用logback 或是log4j for syslog做logging的Java程序等。

以下是一些使用容器技术的优点:

  • 你只需要维护一个个分离的进程(一个进程,一个容器),而它们相对独立于宿主机本身;
  • 你可以更高效的使用你的资源。在一台宿主机上,一个单个的loggly docker容器可以支持数十个的其他容器;
  • 你可以保持你的核心应用的性能和可靠性。
  • 由于Loggly容器是作为一个单独的进程运行,你可以确保以一种可靠的方式从Loggly获取你的日志,而无需阻塞你的应用程序的处理;
  • 你可以有一个单点去控制发送什么日志到Loggly。例如,由于日志会发送到外网,你可能希望对其设置TLS加密,又或者,你想对你的日志做下过滤而只是想把特定日志级别的日志内容发送到Loggly。

Loggly Docker容器是怎样运作的?

Loggly Docker 容器由SendGrid的image提供。该镜像会为你构建一个Docker容器。而在这个容器里,rsyslog作为一个开放514服务端口也就是rsyslog注册端口的进程运行。Docker会将这个端口映射到宿主机上的一个高数值的端口。而当你设置关联到其他的容器时,Docker将会插入一个环境变量来告知它如何发送syslog到Loggly容器。链接到它的Docker容器数量理论上没有限制。这样多对一的关系多对一的关系见上图。

如何使用它?

我们的支持中心目前提供了如何使用Docker容器的step-by-step instructions教程。基本的命令就是运行logger docker容器,插入你自定义的标记, 并且端口映射到接收syslog的514端口。

sudo docker run -d -p 514/udp --name loggly-docker -e TOKEN=TOKEN -e TAG=Docker sendgridlabs/loggly-docker

该篇教程也包含了一个具体的示例,讲述如何使用netcat发送测试数据,并且配置一个支持syslog的Nginx容器然后发送syslog数据到Loggly的过程。一旦数据流入到Loggly,你便可以使用我们的查找接口、趋势图等等。

图2

那么,现在就尝试构建Docker Logging吧!

发送你的Docker日志到Loggly将使得你的运维团队更轻松而你的开发人员也可以在诊断故障根源时更有成效。因此,到 Github 上获取Loggly Docker容器吧;或者如果你还没有Loggly的话,赶紧来免费注册吧! 它是非常易于上手的。

如果本周你参加了AWS re:Invent, 那么别忘了去Loggly 展台看一下快速演示。

About Author

colstuwjx

colstuwjx

互联网运维工程师,IT屌丝一枚,好技术。