Docker越来越多的被应用到分布式应用中。由于Docker 容器可以隔离依赖并简化应用维护,因此成千上万的企业正在使用Docker来缩短他们的发布周期并实现持续交付。Loggly 对Docker及时的提供新的支持的原因正在于现今它已经有很多值得兴奋的地方。
在这篇文章中,我将介绍几种Docker的日志处理的方法,并给出如何从类似Nginx这样的应用程序发送syslog的示例。
Loggly 为Docker Logging添色
Docker 提供一个内置的logging功能,但是它仅仅只是给你一个初步的文本格式的最近访问日志。使用Loggly管理Docker日志有如下优势:
你可以在一个地方获取到所有容器的日志,而无需再运行docker logs命令;
你可以通过我们提供的Search工具Loggly Dynamic Field Explorer,更快捷、高效的分析你的Docker日志并且它还提供一个直观的趋势图;
你可以设置一些报警,这样可以在发生错误或者事件数达到一个特定的阈值时(可能意味着故障)及时知晓。
Docker日志发送到Loggly可以有多种途径
Loggly提供了多种灵活的日志传送方法,你可以选择其中最适合你特定环境的那个——当然,所有的方法都不需要专门的agent。以下是为每种logging类型提供的***方案:
1. Syslog
现在您可以使用 Loggly Docker container。它同样托管在 Docker Hub上。SendGrid Labs推荐使用这种方案。
2. 自定义应用日志
通过Loggly的 HTTP端点发送数据:如果你正在使用Loggly为通用开发语言提供的 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容器数量理论 上没有限制。这样多对一的关系多对一的关系见上图。
如何使用它?
Loggly 的支持中心目前提供了如何使用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 Logging吧!