Docker容器的日志集中化处理

【编者的话】loggly是一个企业级的商业管理工具,它基于云端的日志处理服务,可以将机器生成日志文档、并整理为可进行搜索的格式。 本文介绍了如何使用loggly管理Docker日志。

Docker越来越多的被应用到分布式应用中。由于Docker 容器可以隔离依赖并简化应用维护,因此成千上万的企业正在使用Docker来缩短他们的发布周期并实现持续交付。Loggly 对Docker及时的提供新的支持的原因正在于现今它已经有很多值得兴奋的地方:

使用#Docker#AWS ? 你应该为发现这样的一个“重新发明”而感到惊喜!
—— Jeff Barr(@jeffbarr) [November 4,2014]
(https://twitter.com/jeffbarr/s ... 533056)

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

Docker容器的日志集中化处理

 

Loggly 为Docker Logging添色

Docker 提供一个内置的logging功能,但是它仅仅只是给你一个初步的文本格式的最近访问日志。使用Loggly管理Docker日志有如下优势:

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

 

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

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

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

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

3.文件和socket结合
挂载到宿主机,之后rsyslog将会帮你读取已经挂载的卷,并且隔一段时间会将你的log events转发到Loggly。下次我会找个时间针对这种方法作出更为详细的介绍。

在这篇文章中,我将会详细介绍第一种方案,这种方案适用于可以生成兼容于syslog日志的应用程序。兼容于syslog日志的应用包括Apache、Nginx和使用logback或是Log4j的Java程序。
使用容器技术有以下优点:

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

 

Loggly Docker容器是怎样工作的?

SendGrid提供了Docker镜像。使用镜像可以快速构建一个Docker容器。而在容器中,rsyslog会开放514端口,Docker会将这个端口映射到宿主机上的一个高数值的端口。而当你设置连接到其他的容器时,Docker将会插入一个环境变量来告知它如何发送syslog到Loggly容器。连接到它的Docker容器数量理论上没有限制。这样多对一的关系见上图。

如何使用它?

我们的支持中心目前提供了如何使用Docker容器的step-by-step instructions教程。基本的命令就是运行Logger docker容器,然后插入自定义的标记(token), 并将端口映射到接收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,你便可以使用我们的查找接口、趋势图等等。

Docker容器的日志集中化处理

 

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

发送你的Docker日志到Loggly将使得你的运维团队更轻松而你的开发人员也可以在诊断故障根源时更有成效。因此,到 GitHub 上获取Loggly Docker容器吧;或者如果你还没有Loggly的话,赶紧来免费注册吧!(PS:官方的广告~~)

本文翻译自https://www.loggly.com/blog/ce ... ners/