使用ELK处理Docker日志(二)

无分号教派
• 阅读 5119

昨天小数分享的使用ELK处理Docker日志(一)很受欢迎,今天迫不及待的带来第二篇,侧重于分析和可视化,期待给您带来帮助:)

嘘,听说数人云工程师们在奥斯汀DockerCON2017买了DockerT恤,小数要抢来送给大家,具体规则请关注明日微信~

使用ELK处理Docker日志(二)

上篇文章介绍了如何将容器日志收集到ELK (Elasticsearch,Logstash和Kibana)的基本步骤。不管最终使用哪种方法来收集Docker日志--使用日志驱动程序或专用日志驱动均可行,接下来要解决的问题是如何在Elasticsearch中编入索引并在Kibana展现时处理日志。

本文将进一步分析使用ELK记录Docker的过程 - 分析和可视化日志。

Dockerized环境要求:

  • 由ELK,Prometheus和Grafana容器组成

  • 使用Docker日志收集器将Docker日志发送到Logz.io ELK。

若使用自己的ELK部署,分析和可视化日志的概念保持不变。

分析之前的准备工作...解析

分析容器生成日志的难度级别取决于如何解析--将消息分解成有效字段的效率越高,可视化起来也就越容易,这正是 Kibana 知名的原因。

由于Dockerized环境存在差异,提供详细的解析说明是很困难的,以下是同一主机上两个不同容器的日志。首先是Grafana容器:

t=2017-03-22T13:04:47+0000 lvl=info msg="Request Completed" logger=context userId=1 orgId=1 uname=admin method=GET path=/logout status=302 remote_addr=109.67.183.188 time_ms=1ns size=29

然后是Elasticsearch容器:

[2017-03-22T13:05:01,974][INFO ][o.e.c.r.a.DiskThresholdMonitor] [0EUzBd2] rerouting shards: [high disk watermark exceeded on one or more nodes]

日志解析小技巧:

  1. 时间戳 尝试规范不同类型容器日志的时间戳字段,有助于以后日志的分析,不用修改每个新镜像的时间格式。

  2. 服务ID /标签 为了区分不同的容器日志,给每个日志类型添加标签至关重要,这样可以在Kibana中以不同的流来区分日志,若想在日志中获取容器名称和ID,也可以添加更多的数据注释,以便将来分析。

  3. 丢掉不必要的数据 如果有不必要的数据字符串,可以使用Logstash过滤器删除,经常清理后续分析会变得容易一些,另外,请不要将日志写入STDOUT / STDERR。

当然,自己完成所有这些操作并不简单,可以借助logspout和Logz.io日志收集器等工具。

日志查询

上篇文章已经介绍如何将Docker日志存入Elasticsearch,基于这个条件我们开始新的操作。

使用ELK处理Docker日志(二)

分析数据之前,最好将一些字段添加到主日志显示区域(“Discover”选项),有助于了解数据。

如上所述,这个字段列表以及是否可以用于分析,完全取决于如何配置解析。示例中保留了一些有用的字段,可以看到诸如“image”(容器镜像名称),“id”(容器ID)和“name” (容器名称)。

使用ELK处理Docker日志(二).

接下来就是查询日志,这里需要熟悉Kibana基本查询语法,简单介绍下使用Kibana搜索Docker日志上下文,更多Kibana语法查询方法可关注Kibana教程。

用 "free-text"在日志中进行搜索是比较常用的方式,更精确的搜索例如"Field-level"可锁定特定容器或主机的日志:

id: 84379bdbe8e0

使用ELK处理Docker日志(二)

还可以在逻辑语句中组合两个"field-level"搜索,以查找特定容器和重要日志:

id: 6c05ea5efd6d AND loglevel:INFO

使用ELK处理Docker日志(二)

记住,这些字段需要在解析中进行映射,以便执行基于字段的搜索。

查看特定容器的日志的另一种方法是使用"_exists_"查询,可根据日志消息中存在的特定字段过滤。

例如:

_exists_:loglevel

完成数据查询后,不要忘记保存查询语句,这将会在接下来的可视化环节提供帮助,虽然可以在创建可视化的同时进行搜索,但是过滤后的数据范围缩小了查找更容易。

Docker日志可视化

Kibana以索引数据为基础创建丰富的可视化和仪表板的能力而闻名,事实上,得到这些数据并不容易。需要再次强调的是-如何映射和解析消息至关重要。下面来看一些简单的例子。

单个容器日志

根据每个容器或主机生成的日志量创建可视化饼图,使用容器“name”字段的聚合,得到以下结果:

使用ELK处理Docker日志(二)

当然也可以使用 "image" 或 "host" 进行聚合。

单个容器事件

另一个例子是监控特定容器的事件数量,为此,将基于保存的事件日志搜索创建可视化折线图,示例中有生成日志事件(错误和警告日志)的特殊容器,需要做的是将X轴配置为使用日期直方图:

使用ELK处理Docker日志(二)

条形图可以更全面地查看每个容器日志:

使用ELK处理Docker日志(二)

镜像/容器/主机的数量

用独特的可视化聚合方式,在环境中显示Docker容器,镜像和主机的数量:

使用ELK处理Docker日志(二)

这些只是在Kibana中可视化Docker容器日志的简单示例,Kibana包含更多可用的可视化类型 --平铺地图可视化可以创建IP字段(映射为地理位置字段),条形图,数据表等的地理图表。

如果使用Logz.io ELK来记录Docker日志,则可以在ELK APPS 中使用预制的仪表板--一个免费的Kibana可视化和仪表板库:
使用ELK处理Docker日志(二).

结束语

尽管在Docker1.12中引入了Docker驱动程序,容器日志记录仍然是一个很大的挑战,日志收集没有捷径,解决方案各有优缺点,然而文中未提及的Docker生成其他类型的数据(例如 container stats 和 daemon events)也应当被记录下来。

尽管从Docker主机到ELK的设置并创建良好的日志解析通道并不简单,但最终的结果是值得的,可视化全方位日志将能更有效地关联事件并监控Dockerized环境。

原文链接:https://logz.io/blog/docker-l...

点赞
收藏
评论区
推荐文章
美凌格栋栋酱 美凌格栋栋酱
7个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Stella981 Stella981
3年前
Opencv中Mat矩阵相乘——点乘、dot、mul运算详解
Opencv中Mat矩阵相乘——点乘、dot、mul运算详解2016年09月02日00:00:36 \牧野(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fme.csdn.net%2Fdcrmg) 阅读数:59593
Wesley13 Wesley13
3年前
3D渲染集群,你了解多少?
摘要:渲染是批处理运行模式,那能不能使用Docker容器技术,做大规模的渲染集群呢?我们先说说3D渲染涉及哪些领域:!(https://pic2.zhimg.com/80/v23b9d76d3ac0312257f05e6f89bcab172_720w.jpg)1、什么是3D渲染简单粗暴的讲:就是将虚拟世界
Stella981 Stella981
3年前
Docker实战笔记:Docker简介(二)
Docker实战笔记:Docker简介(二)博客分类:docker摘要:摘要:此Docker系列学习笔记,根据Reboot教育PC大神的运维自动化部分课程整理而成,补充少量个人理解以及练习日志(部分日志有删减)。PC大神在知乎的专栏:面向工资编程Docker简介(一)Docker简介(二)Docker管理系统(一)Docker管理系统(
Stella981 Stella981
3年前
OpenCV检测轮廓极点(Python C++)
    今天分享一个OpenCV检测轮廓极点实例,原图如下,我们需要检测出地图中最大轮廓的上下左右四个极点,并进行标注显示。!(https://oscimg.oschina.net/oscnet/ae374a72c5404b00b0e976e499eedf36.png)    第一步:阈值处理分割出地图轮廓!(ht
Stella981 Stella981
3年前
Exceptionless
<divid"cnblogs\_post\_body"class"blogpostbodycnblogsmarkdown"<h1id"exceptionless.netcore开源日志框架"Exceptionless.NetCore开源日志框架</h1<blockquote<p作者:markjiang7m2<b
Stella981 Stella981
3年前
Linux查看GPU信息和使用情况
1、Linux查看显卡信息:lspci|grepivga2、使用nvidiaGPU可以:lspci|grepinvidia!(https://oscimg.oschina.net/oscnet/36e7c7382fa9fe49068e7e5f8825bc67a17.png)前边的序号"00:0f.0"是显卡的代
Stella981 Stella981
3年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Stella981 Stella981
3年前
36. docker swarm docker secret 的使用和管理
1.secretmanagement的作用  用来存储其他人不想看到的数据2.secretmanagement   存在swarmmanager节点raftdatabase里。  secret可以assign给一个service(orcontainer),这个sevice就能看到这个secret了 
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Stella981 Stella981
3年前
Docker 如何支持多种日志方案?
第88篇Docker如何支持多种日志方案?将容器日志发送到STDOUT和STDERR(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzIwMTM5MjUwMg%3D%3D%26mid%3D265358