5
可观测性一般会被分成事件日志、链路追踪和聚合度量三个主题方向进行探讨和研究。
你可以记住以下几个核心要点:事件日志的职责是记录离散事件,通过这些记录事后分析出程序的行为;
追踪的主要目的是排查故障,比如分析调用链的哪一部分、哪个方法出现错误或阻塞,输入输出是否符合预期;
度量是指对系统中某一类信息的统计聚合,主要目的是监控和预警,当某些度量指标达到风险阈值时就触发事件,以便自动处理或者提醒管理员介入。
另外,事件日志、链路追踪和聚合度量这三个主题也是未来三节课我们要学习的主角,到时你也可以与这节课的学习内容相互印证。
日志
假如你平时只开发单体系统,从来没有接触过分布式系统的观测工作,那你可能就只熟悉日志这一项工作,对追踪和度量会相对比较陌生。
日志这里就省略了。
链路
其实比如,你在调试程序的时候,在 IDE 打个断点,看到的 Call Stack 视图上的内容便是跟踪;在编写代码时,处理异常调用了 Exception::printStackTrace() 方法,它输出的堆栈信息也是追踪。而在微服务时代,追踪就不只局限于调用栈了,一个外部请求需要内部若干服务的联动响应,这时候完整的调用轨迹就会跨越多个服务,会同时包括服务间的网络传输信息与各个服务内部的调用堆栈信息。因此,分布式系统中的追踪在国内通常被称为“全链路追踪”(后面我就直接称“链路追踪”了)
指标(指标)
如果你用过pormtheues一定知道这是什么。没用过也没关系
Java 天生自带有一种基本的度量,就是由虚拟机直接提供的 JMX(Java Management eXtensions)度量,像是内存大小、各分代的用量、峰值的线程数、垃圾收集的吞吐量、频率,等等,这些数据信息都可以从 JMX 中获得。度量的主要目的是监控(Monitoring)和预警(Alert),比如说,当某些度量指标达到了风险阈值时就触发事件,以便自动处理或者提醒管理员介入
代表产品
日志:elk
链路:插件形式提供,因为和语言和协议强耦合,不会出现一家独大的情况。
指标:promtheues
6