点击免费下载
《Elasticsearch 全观测技术解析与应用》>>>
分享嘉宾:朱杰
本文主要从理论和技术的层面介绍全观测的技术。
首先,监测和监控是有很大的区别的。
监控主要负责最上面两层的告警和系统概况,它的信号总量比较小。但是拿到监控后,我们 并不知道系统发生了什么,所以需要结合日志系统、指标系统甚至 APM 系统进行排查,找 到线索并进行剖析,甚至找出服务间的依赖关系。因此从可观测性的角度讲,我们要探查的 内容要远大于监控范畴,且获得的信号总量也层层递增,数据量越来越大。
在谈全观测之前,我们先谈谈可观测。
构建可观测性有 4 个步骤。第 0 阶,我们会构建检查各个系统健康状况的检查机制。之后, 我们会搭建采集系统各种性能的指标。然后,搭建集中化的日志平台,把所有系统的日志进 行汇总并做一定程度的关联,帮助解决问题。最后,是涉及到应用的分布式性能的追踪,它 要求更高,往往能从代码层面、API 层面直接度量性能的各方面指标。
一、每一步具体是如何做的?
首先是健康检查。
健康检查有几种方法,第一是广播的形式,也就是把自己系统和邻居系统的状态信息发送到 网络上,而接收端在收到广播包后就会获得这个系统的性能状态;
第二个模式是注册表,就是把服务的状态注册到中央的注册表系统里,比如 etcd 或者 Zk。 当把服务状态写进去后,就相当于把自己的观测性暴露了,所以监测系统就可以从中心系统 获得信息。这种模式在分布式系统中非常常用,可以通过查询中央注册表获得集群中每一个 节点的状态;
第三种模式是暴露。我们在实现自己的应用服务器时,可能会设置一组查询健康度的 API 对外暴露,通过外部工具轮巡、调用 API 就可以获得这个系统的观测性。
Elasticsearch 就有这样一组 API 去暴露它的健康度。
第二是指标,我们能在指标里观察些什么?
在建指标系统的时候我们会收集这几类指标。第一是最基础的系统指标,包含 CPU、网络、 磁盘等,这些性能指标至关重要;
系统层之上是应用级别的指标,我们在做应用开发的时候要有意识地暴露很多指标,否则就 不太好观测。这里面包含出错率、延迟、饱和度等应用的性能指标。它的暴露方式也可以用 API 的形式来调用,让外围系统轮巡,但更常用的是通过日志的方式去打指标。比如在交易 系统中,我们会把与这笔交易相关的原数据打到日志中,然后能通过日志分析了解系统的健 康度。另外,现在流行的做法是打成像 Json 这样的结构化日志,这对后续的日志处理有很 大帮助;
再上面,是业务性的指标,它会涉及到很多 BI 的分析,比如处理的订单的数量、营业额等。 如果有业务指标的暴露,就可以反映系统支撑的各种业务量数据,这对运营人员比较重要。
如何从指标获得观测性?有哪些方式?
当前,像 Prometheus 这种系统应用得比较多,它的原理就是 Prometheus 提供的 agent 从各个采集点采集结构化数据,写入 Prometheus 数据库,然后基于一些开源的工 具进行指标的可视化展现。从告警的角度,它也可以写一些告警的规则,通过 webhook 等对外告警。
这是做指标系统比较常用的一套堆栈。
第三是日志。如何从日志获得可观测性?
日志很多就是一串字符串,所以要从这里面获得可观测性,很重要的一步就是进行结构化的抽取工作。从下面的图中,我们可以看到各种各样的字段,比如IP地址、时间戳、进程号,以及具体请求的URL。对于日志系统而言,就需要把文本的字符串变成结构化数据。
而要获得更好的观测还要注意,你的日志能够暴露多少状态,就意味着对你的监测程度能做得多好。比如下面这个例子,除了常规的发生时间、日志信息外,还有它提供的服务、它的开发团队信息、谁受到了影响等。这些对后续的分析、运维和提升服务质量都非常有帮助。所以从运维角度,要追踪哪些性能、哪些数据应该打在日志里是开发人员要进一步探索的。
第四,分布式追踪。如何从分布式的调用中获得可观测性?
APM是从微观的代码层面捕获各种数据,所以它获得观测性的关键就在于安装APM探针。它能从每个代码块的层面帮我们度量每一步花费的时间、捕获报错等等。比如能把一笔事务处理的链路追踪到每个系统中,把它串联成一个瀑布图呈现给大家。这对开发人员去追踪问题,运维人员去定位问题都是非常重要。
说完如何获得可观测性,下面讲讲如何去建设。
前两个level比较简单,比如做日志,把日志集中化归档到文件服务器上就算做完了。当我们上了ELK,把日志集中化之后,我们就能很轻易地在日志中做检索,达到检索级。
不过检索级是事后的故障分析,从运维角度,我们要获得趋势的预测就要达到分析级的目标,分析级的特征是我们能看到各种分析图标。而从检索级到分析级的鸿沟在于,数据的结构化程度有多高,结构化程度越高,能呈现的图表和编写规则就越多。APM系统因为采集的已经是结构化的数据,所以不需要复杂的加工,难点在于对日志的结构化提取。如果能够实现,后续就能进行聚合运算,产生丰富的图表,并编写很多规则。
有了分析图标和各种规则,就能建立一套预防的运维机制,这样系统初现端倪时就可以进行告警。而到了更高级,就可以通过加入机器学习等技术实现更智能化的预测。
构建可观测系统就是从初级开始,一步步走上高级。
另外,从每个维度看,每一个级别里处理的内容会不太一样。
数据收集角度,从初级的日志集中化和分析,到中级的结合日志和指标综合判断系统状态,再到高级的融合日志、指标、APM数据进行判断;数据准备角度,从初级的不抽取,到中级逐渐积累和解决故障、编写规则、实现少量结构化,再到高级积累更多数据、规则和告警,以及引入机器学习等帮助异常检测。
以上,我们谈了怎么可观测,以及如何去建设,下面谈谈全观测。
全观测其实是对传统运维的改进。
像上面所讲,传统运维是一步步进行搭建的,每一步都会出一个开源或商业产品,这会导致产品间出现数据孤岛的状况,非常割裂;第二是有各种厂商的工具,导致很难做自动化统一分析,甚至它们的API都不一样,严重制约了我们构建各方面观察的自动化平台;第三,每个方面只能提供一方面的观察,而故障往往是立体的,可能要多方面观察才能定位到具体的故障;最后,很多系统只是做了收集,没有真正进行分析,没有发挥出大数据的价值,也没有改进运维质量。
所以Elastic提倡的全观测,核心就是把包括日志、指标、APM甚至Uptime这些数据汇总到一个平台上,让运维人员、开发人员,甚至是业务人员都可以在统一的大数据的平台之上,对所有的数据从统一的视角进行观察,进行统一的告警,以及进行统一的可视化。
这套平台建立在Elastic Stack之上,核心是Elasticsearch,而之上的Kibana也会提供像日志、指标、APM各种应用。同时,Elasticsearch也推出了像Elastic Common Schema这样的一个命名的规范,能够更好地去分析各个数据的来源。
打通数据有哪些优势?
第一,统一的可视化分析视图。可以把日志、指标、APM的分析图表放在一个页面进行统一的分析和趋势呈现;
第二,统一的监控和告警。由于所有的数据都在这儿,所以在构建监控和告警规则的时候可以综合日志、指标、APM的数据进行综合判断,减少误报;
第三,统一的机器学习监测。机器学习可以帮助监测大量指标,不管是分散在日志、指标还是APM,都可以统一监测。
现在很多厂商也在想打通数据,比如日志厂商想融合指标和APM,APM厂商想把日志和指标融合进来。但这是否容易实现呢?实际上有几个难点。
实现全观测有哪些的难点?
首先最大的难点在数据量。日志、指标这些数据量都很大,这就需要一个分布式的系统去做。另外因为因为要检测很多东西,所有要有数据的关联,进行多维度的分析。这个地方的要求更高,不仅要能够动态地生成字段,所有的列要能够索引,而且要能够灵活地写各种各样的查询。
所以,很多厂商会选择Elasticsearch作为底层数据引擎,因为Elasticsearch本身是分布式的,能够容纳海量的数据。第二个,它也有大量的多维分析的灵活度存在。同时,它还能进行智能化的检测。
要做这样一套全观测的系统,有哪些技术可以用到?
在数据采集生态中,我们可以用到以下这些工具,包括日志采集工具、指标采集工具和APM采集工具。
同时,数据存储搜索工具生态有如下工具,包括关系型数据库、时序数据库和ES搜索引擎,我们能从下面这张图看到它们各自的优势和劣势。
以下是分析展示工具。比如日志数据分析展示的Kibana,配合Prometheus的Grafana,还有专门做APM数据分析展示的Skywalking。
现在我们讲究集成到一个平台上,这样日志、指标和APM就可以进行分析的联动和跳跃,而Kibana现在就能做到在一个平台纳入分析这三方面的数据,并且进行数据的跳跃和联动。
最后,是全观测的主要流程。它包含数据采集阶段、数据处理、数据搜索存储和可视化几个步骤。
在数据采集层,我们能用上面的各种工具对日志、指标、APM进行采集,然后将其汇聚到Kafka;在数据处理层,用相应的数据处理工具从Kafka进行消费;随后,数据经过各种各样的处理,流入到数据存储层,在Elasticsearch里对数据进行索引;最后,可以通过Kibana或第三方工具进行可视化展现。不过,可视化只是帮助我们进行人工监控,如果要做到自动化,就一定要安装各种各样的规则,能够进行基于规则的和基于机器学习的监控和告警。
【阿里云Elastic Stack】100%兼容开源ES,独有9大能力,提供免费 X-pack服务(单节点价值$6000)
相关活动
更多折扣活动,请访问阿里云 Elasticsearch 官网
阿里云 Elasticsearch 商业通用版,1核2G ,SSD 20G首月免费
阿里云 Logstash 2核4G首月免费
下载白皮书:Elasticsearch 八大经典场景应用