视角 | 多容器环境下的日志管理难?有人做起了这个生意

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 本文讲的是视角 | 多容器环境下的日志管理难?有人做起了这个生意,【编者的话】本文介绍了一个新的工具SPM,它用于解决在多容器环境下日志管理所遇到的问题,同时它整合了多种功能,避免了以往需要安装多种工具的麻烦,配合Kibana的展示功能,使得该工具还是值得一试的。
本文讲的是视角 | 多容器环境下的日志管理难?有人做起了这个生意 【编者的话】本文介绍了一个新的工具SPM,它用于解决在多容器环境下日志管理所遇到的问题,同时它整合了多种功能,避免了以往需要安装多种工具的麻烦,配合Kibana的展示功能,使得该工具还是值得一试的。

在微服务流行的今天,日志路由和解析的传统静态配置方法已经有点吃力;事实上,它还带来了额外的复杂度和资源消耗。相对的,这使得不能运行在单机上的微服务的数量降低了。

SPM for Docker 整合的日志管理功能中,对微服务进行了支持,方式为降低安装复杂度、启动时间和最小化占用资源。 SPM Agent for Docker 汇集了标准、事件和日志,并且它运行在每一个Docker宿主机中的一个容器。除了标准的日志收集功能,我们最近还整合了自动日志格式探测功能和容器日志信息的值域抽取。这个过程被嵌入在Docker API数据流中,日志被收集起来送给统一日志索引工具: Logsene 。这就意味着并没有为Docker日志驱动配置syslog,也没有路由到Logstash中去解析,并且也没有Elasticsearch来维持这些日志,甚至是连Kibana也不需要。SPM for Docker和Logsene将为你处理好这一切。

有很多方法从Docker中收集日志(你可以阅读我们的另一篇文章: Docker Logging Webinar );下面来介绍使用Logsene处理Docker日志的优点。

对于新手来说,我们从这几方面来了解日志管理功能:
  • 配置 - SPM for Docker中日志的配置
  • 自动格式探测和容器日志解析
  • 规则的相关性
  • 日志的报警检测和异常检测
  • Logsene和Kibana的可视化
  • 从UI中、命令行中搜索日志并用UNIX工具处理日志

1. 配置 - SPM for Docker中日志的配置

首先,我们使SPM for Docker获取Docker事件和Docker 标注的日志非常的渐变。在安装方面没什么好说的,只需要增加 -e LOGSENE_TOKEN=your-logsene-token 到SPM Docker Agent的Docker run的命令中,然后你就可以获取Docker容器的全部日志并放入Logsene。就这么简单!

并不是所有的日志都有对我们有用,这就是为什么我们提供了一个通过镜像名或者容器名的白名单或者黑名单来控制日志输出。相关的参数如下:
  • -e MATCH_BY_NAME – 容器名白名单的正则表达式
  • -e MATCH_BY_IMAGE - 镜像名白名单的正则表达式
  • -e SKIP_BY_NAME – 容器名黑名单的正则表达式
  • -e SKIP_BY_IMAGE - 镜像名黑名单的正则表达式
  • -v PATH_TO_YOUR_FILE:/etc/logagent/patterns.yml – 可选,自定义日志解析

一个筹集Metrics、Events和Logs的例子:
docker run --name spm-agent \
-e HOSTNAME=$HOSTNAME \
-e SPM_TOKEN=YOUR_SPM_TOKEN \
-e LOGSENE_TOKEN=YOUR_LOGSENE_TOKEN \
-e MATCH_BY_IMAGE=”nginx|mysql|mongodb|myapp” \
-v /var/run/docker.sock:/var/run/docker.sock \
sematext/spm-agent-docker

2. 容器日志自动解析

Docker日志是容器们的终端输出流。这些数据中混合着来自启动脚本的文本信息和来自应用的结构化日志。问题很明显,并不能直接对日志事件流进行直接处理。需要区分出哪些日志来自哪个容器、应用,并正确的解析。

SPM for Docker分析了行格式,并将其转换为JSON格式,使得所有的值域可见,并且从文本日志中抽取属性域。过去,通常需要使用日志处理工具,如Logstash、Fluentd或者rsyslog来处理日志信息,但是这些的配置是根据输入源来静态配置。 这就不能够适应动态微服务的环境。 有些人已经对syslog驱动、解析器配置、日志路由甚至其他部分做了更改。这就是为什么我们要整合自动格式检测到SPM中的原因,利用logagent-js来处理文本。这个整合的footprint很少,并不需要将日志导到外部服务,并且它为流行的应用进行日志格式探测,并生成JSON和以行为单位的日志输出。下图为由Docker Agent生成的Apache Access日志域值。
apache_logs.png

例如,SPM Docker Agent可以从下面这些官方镜像中解析日志:
  • MongoDB、MySQL、Redis
  • NGINX、Apache
  • Logstash或bunyan支持的任何JSON输出
  • 带或者不带时间戳的文本信息
  • 任何采用mount属性挂载的自定义模式,如“-v /mypatters/patterns.yml:/etc/logagent/patterns.yml”

探测和解析日志信息的logagent-js是一个开源的项目,欢迎贡献更多的日志格式解析。

3. 指标相关性

由于日志存储在Logsene中,它提供了分析相关性能的能力,如CPU使用率、内存使用率、网络以及硬盘I/O。你可以在SPM中很方便的查看与任何性能指标有关的日志信息。如果你在公司中负责解决性能问题或者其他相关问题,你就会明白它会节省你多少时间去获取度量指标、日志和事件。下图为Nginx的例子。
docker-logs-and-metrics.png

4. Docker日志上的报警

Logsene提供了定义报警的功能,同时还提供了日志的异常检测,例如错误信息、警告信息、安全漏洞等。

更多这方面的信息请查阅 这个主题

5. 采用Kibana展示

我们对全部的Logsene应用提供了 一键到Kibana 功能。如果你的日志包含数值型数据,又或者你想生成日志频率、消息类型、高频错误的统计信息,在Logsene中可以很轻松的创建Kibana控制台。

6. 在命令行中搜索日志并处理并用UNIX工具处理

如果你活在终端的世界里并热爱命令行工具,可以使用 Logsene命令行解释器 。没有必要为了搜索而使用UI界面,也没有必要用JSON查询。使用Logsene+awk+grep+sort+uniq+...任何你需要的即可。

五分钟快速上手

恭喜!你已经掌握了很多信息。如果对刚刚阅读的内容有兴趣,可以 注册 账号,为Docker运行SPM并且亲自体验下那些吸引你的功能。初创企业、没有或者只有很少投资资金的创业公司、非营利性企业以及学术机构有 优惠价格 ,快来联系我们吧。如果你可以帮助我们把SPM和Logsene做的更好,请 加入我们 吧!

原文链接:Innovative Docker Log Management (翻译:陈杰)

===============================================
译者介绍
陈杰 ,北京理工大学计算机学院在读博士,研究方向是自然语言处理在企业网络信誉评价方面的应用,平时也乐于去实现一些突发的想法。在疲于配置系统环境时发现了Docker,跟大家一起学习、使用和研究Docker。

原文发布时间为:2015-08-25
本文作者:Sonyfe25cp
本文来自云栖社区合作伙伴DockerOne,了解相关信息可以关注DockerOne。
原文标题:视角 | 多容器环境下的日志管理难?有人做起了这个生意
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
23天前
|
存储 Kubernetes 监控
提升日志管理效率:掌握CKA认证中的边车容器技巧
提升日志管理效率:掌握CKA认证中的边车容器技巧
32 0
|
1月前
|
Java 开发工具 Windows
Windows环境下面启动jar包,输出的日志出现乱码的解决办法
Windows环境下面启动jar包,输出的日志出现乱码的解决办法
|
3月前
|
存储 Prometheus 监控
Prometheus vs. ELK Stack:容器监控与日志管理工具的较量
随着容器化技术的广泛应用,容器监控与日志管理成为了关键任务。本文将对两种常用工具进行比较与选择,分别是Prometheus和ELK Stack。Prometheus是一款开源的监控系统,专注于时序数据的收集和告警。而ELK Stack则是一套完整的日志管理解决方案,由Elasticsearch、Logstash和Kibana三个组件组成。通过比较它们的特点、优势和适用场景,读者可以更好地了解如何选择适合自己需求的工具。
|
27天前
|
运维 Kubernetes 监控
构建高效稳定的容器化运维环境
在现代IT基础设施中,容器技术以其轻量级、快速部署和易于管理的特性成为企业数字化转型的重要支撑。本文将深入探讨如何构建一个高效且稳定的容器化运维环境,涵盖从容器选择、集群管理到持续集成与持续部署(CI/CD)的最佳实践。文章旨在为运维工程师提供一套系统的解决方案,以应对日益复杂的业务需求和技术挑战。
|
1月前
|
资源调度 JavaScript Shell
6.6k star!推荐一款轻松创建隔离环境的命令行及容器工具!
6.6k star!推荐一款轻松创建隔离环境的命令行及容器工具!
|
1月前
|
测试技术 Go 云计算
Go语言优化云计算与容器化环境的策略与最佳实践
【2月更文挑战第15天】在云计算和容器化环境中,Go语言的应用和优化策略对于提高系统的性能和效率至关重要。本文深入探讨了如何使用Go语言优化云计算和容器化环境,包括内存管理、并发编程、代码优化等方面的最佳实践,旨在帮助开发者充分利用Go语言的优势,提升系统的整体性能。
|
1月前
|
Kubernetes Go 开发者
Go语言在容器化环境中的实践
【2月更文挑战第15天】随着容器技术的兴起,Go语言在容器化环境中的实践逐渐受到关注。本文探讨了Go语言如何与容器技术相结合,发挥其在容器化环境中的优势,包括轻量级部署、高并发处理、快速构建和部署等方面的特点,并通过实例展示了Go语言在容器化环境中的实践应用。
|
2月前
|
算法 计算机视觉 Docker
Docker容器中的OpenCV:轻松构建可移植的计算机视觉环境
Docker容器中的OpenCV:轻松构建可移植的计算机视觉环境
|
3月前
|
Docker 容器
Docker容器日志接入到GrayLog
Docker容器日志接入到GrayLog
51 0
|
3月前
|
Prometheus 监控 Cloud Native
Prometheus VS ELK Stack:容器监控与日志管理工具的比较与选择
在容器化时代,有效的容器监控与日志管理工具对于确保应用程序的可靠性和可维护性至关重要。本文将比较两个主流工具,Prometheus和ELK Stack,探讨它们在容器监控和日志管理方面的特点、优势和适用场景,帮助读者做出明智的选择。