竹笋

首页 » 问答 » 问答 » 最全面一文让你看懂无侵入的微服务探针原
TUhjnbcbe - 2024/6/22 1:22:00

前言

随着微服务架构的兴起,应用行为的复杂性显著提高,为了提高服务的可观察性,分布式监控系统变得十分重要。

基于Google的Dapper论文,发展出了很多有名的监控系统:Zipkin、Jaeger、Skywalking以及想一统江湖的OpenTelemetry等。一众厂家和开源爱好者围绕着监控数据的采集、收集、存储以及展示做出了不少出色的设计。

时至今日即使是个人开发者也能依赖开源产品,轻松地搭建一套完备的监控系统。但作为监控服务的提供者,必须要做好与业务的解绑,来降低用户接入、版本更新、问题修复、业务止损的成本。所以一个可插拔、无侵入的采集器成为一众厂家必备的杀手锏。

为了获取服务之间调用链信息,采集器通常需要在方法的前后做埋点。在Java生态中,常见的埋点方式有两种:依赖SDK手动埋点;利用Javaagent技术来做无侵入埋点。下面围绕着无侵入埋点的技术与原理为大家做一个全面的介绍。

无侵入的采集器(探针)

分布式监控系统中,模块可以分为:采集器(Instrument)、发送器(TransPort)、收集器(Collector)、存储(Srotage)、展示(APIUI)。

zipkin的架构图示例

采集器将收集的监控信息,从应用端发送给收集器,收集器进行存储,最终提供给前端查询。

采集器收集的信息,我们称之为Trace(调用链)。一条Trace拥有唯一的标识traceId,由自上而下的树状span组成。每个span除了spanId外,还拥有traceId、父spanId,这样就可以还原出一条完整的调用链关系。

为了生成一条span,我们需要在方法调用的前后放入埋点。比如一次

1
查看完整版本: 最全面一文让你看懂无侵入的微服务探针原