视角 | 多容器环境下的日志管理难?有人做起了这个生意
在微服务流行的今天,日志路由和解析的传统静态配置方法已经有点吃力;事实上,它还带来了额外的复杂度和资源消耗。相对的,这使得不能运行在单机上的微服务的数量降低了。
在 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日志域值。
例如,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的例子。
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。
视角 | 多容器环境下的日志管理难?有人做起了这个生意相关推荐
- linux下mysql日志管理及mysql备份还原
linux下mysql日志管理及mysql备份还原 1.SHOW GLOBAL VARIABLES LIKE '%log%'; 显示所有日志相关的选项 2.错误日志:log_error和log_wa ...
- 容器环境下如何将NuGet包XML文档添加到Swagger
容器环境下将NuGet包XML文档添加到Swagger 在.NET Core项目开发过程中,为了实现代码复用,我们将可以重复使用的部分拆分成一个个小的NuGet包.这些NuGet包可以在其他系统中复用 ...
- Oracle RAC 环境下的连接管理(转) --- 防止原文连接失效
崔华老师的文章!!! 这篇文章详细介绍了Oracle RAC环境下的连接管理,分别介绍了什么是 Connect Time Load Balancing.Runtime Connection Load ...
- Oracle RAC 环境下的连接管理
转自 http://www.oracle.com/technetwork/cn/articles/database-performance/oracle-rac-connection-mgmt-165 ...
- .NET 容器环境下创建应用 dump 文件
.NET 容器环境下创建应用 dump 文件 Intro 有时候我们的应用会出现一些异常的情况,比如内存飙升,线程死锁等等,通过一些 metrics 我们可能大概的了解内存是增长了,但是具体是哪里增长 ...
- Docker容器环境下ASP.NET Core Web API应用程序的调试
本文主要介绍通过Visual Studio 2015 Tools for Docker – Preview插件,在Docker容器环境下,对ASP.NET Core Web API应用程序进行调试.在 ...
- bom树形结构 表设计_K/3管理视角:树形结构下的BOM管理方式!
原标题:K/3管理视角:树形结构下的BOM管理方式! BOM(物料清单),也就是以数据格式来描述产品结构的文件,是ERP使用过程中的重要组成部分.通过BOM我们能够清晰的了解产品的结构以及所需要的物料 ...
- 【Windows环境下使用fvm管理多版本Flutter(flutter版本升级回退)】
Windows环境下使用fvm管理多版本Flutter(flutter版本升级回退) 安装FVM 升级版本 升级后,使用方法二再次安装fvm 安装FVM 方式一: 使用choco安装fvm(当时环境中 ...
- Linux环境下虚拟机的管理
Linux环境下虚拟机的管理 一.输入法的调整 首先,点击Application,找到System Tools,点击Settings里面的Rejion&language,下方能看到Input ...
最新文章
- cannot import name '_C'
- iptables 防火墙
- PHP 批量生成 WORD2007 文件
- ASP.NET 前端Ajax获取数据并刷新
- camera(25)----拍照显示总结---名词解释
- 基于JAVA+SpringBoot+Mybatis+MYSQL的网上商城系统
- linux mint安装类型,如何在Linux Mint 16中正确安装Ubuntu One
- nginx post请求超时_Nginx 的超时 timeout 配置详解
- 三分钟了解APS系统中生产计划排程模块的基本原理
- 如何利用Excel公式制作日历
- python3 爬取百合网的女人们和男人们
- 联想Filez zBox2022企业版为企业的 “零信任体系”构建保驾护航
- 经典音频MUTE电路分析
- 求帮忙,给python中安装matplotlib系统里有但是显示不出来,万分感谢啊大家
- 查看onedrive教育版或企业版的容量(有福利)
- 微信小程序九宫格布局
- 夜光带你走进python开发 (十七)传奇语言
- 贤鱼的刷题日常(数据结构栈学习)--P1175 表达式的转换--题目详解
- 2021-2027全球与中国厨房用食品搅拌机市场现状及未来发展趋势
- Windows10连接Google手机,短信照片同步折腾记录
热门文章
- Intel汇编-基本浮点运算
- USTC中科大数字图像分析2019年考题回忆
- OracleParameter类介绍
- 计算机图形学(六)——MFC实现鼠标橡皮筋技术画圆
- mobaxterm 传文件夹_mobaxterm和CRT的文件上传
- React Native Android 应用内存使用探究
- 用着手机版WiFi共享精灵,不仅省流量,还可以充话费
- Autoware激光雷达与网络摄像机联合标定(二) Autoware安装
- “保姆级”车载CAN总线教程(二)-堪称全网“最细”系列
- xp系统修改mac地址