SkyWalking 核心概念与智能探针工作原理深度揭秘(下)
#作者:任少近
文章目录
- Skywalking探针原理-探针实现方式
- 常见探针实现方式
- 探针原理-指标数据采集
- 探针原理-链路数据采集
- 探针原理-数据上报
- 探针原理-高可用
接上篇:《SkyWalking 核心概念与智能探针工作原理深度揭秘(上)》
链接: link
Skywalking探针原理-探针实现方式
常见探针实现方式
-
SDK
通过SDK API在业务代码进行手动插码。缺点是侵入性强 -
自动注入
通过编程语言本身提供的一些特性,在编译阶段或者是启动阶段自动注入探针埋点逻辑。对业务代 码无侵入性。根据语言特性不同,具体实现方式也不同。- • JAVA:Java Instrumentation,它是 JDK1.5 引入,是一种可以动态修改 Java 字节码的技术。 • PHP:通过PHP Extension扩展模块来加载探针,拦截方法调入和调出拦截。
- • GO:通过gohook 机制进行机器码修改,实现方法调入和调出拦截
探针原理-Java Agent实现原理
Java Agent 直译为 Java 代理,中文圈也流行另外一个称呼 Java 探针 Probe 技术。它在JDK1.5
引入,是一种可以动态修改 Java 字节码的技术。Java 类编译后形成字节码被 JVM 执行,在 JVM 在 执行这些字节码之前获取这些字节码的信息,并且通过字节码转换器ClassFileTransformer 对这些字 节码进行修改,以此来完成一些额外的功能。
Java Agent 是一个不能独立运行 jar 包,它通过依附于目标程序的 JVM 进程,进行工作。启动 时需要在目标程序的启动参数中添加 -javaagent参数,Java Agent 内部通过注册 ClassFileTransformer ,这个转化器在Java 程序 Main方法前加了一层拦截器。在类加载之前,完成 对字节码修改。
//Java Agent 和目标进程一起启动模式 java -javaagent:myagent.jar -jar xxx.jar
探针原理-指标数据采集
指标分类
- 原始指标
如JVM相关指标,由探针端采集上报 - 聚合指标
如服务性能指标平均响应时间、请求量等,由OAP后端聚合分析形成
采集原理 - JMX:所谓JMX,是Java Management Extensions(Java管理扩展)的缩写,是一个为应用程序植入管理功能的框架,通过他我们可以监控应用程序的运行状态和相关统计信息。skywalking的JVM 指标采集实现是在core模块,通过JVM暴露的Mbean进行指标获取,定时上报给OAP后端
- 基于链路数据聚合分析:在OAP端通过一定的时间窗口,统计分析链路特征进而形成指标,如tps、 平均响应时间、请求量等
探针原理-链路数据采集
skywalking的链路数据采集是由一个个不同的插件来实现的。插件中定义了需要拦截的类、方法 以及span生成逻辑。包括span的创建,属性填充、context传播、事件记录以及span结束。
这些插件的表现形式为一个个jar包,在探针启动时进行加载,并根据内部定义的埋点逻辑对目标 类进行注入。
探针原理-数据上报
探针原理-高可用
- 传统方式
探针端支持配置(collector.backend_service)多个OAP实例地址,以,分割。创建grpc链接时会随机链接某一个OAP后端进行上报;定期每30秒检测一次,如果异常,则再随机重连。 - k8s高可用
- SVC
通过k8s service负载代理OAP后端集群实现高可用,探针端只需要配置SVC地址。 - NodePort
Pod单独暴露node port,则探针端需要配置多个node地址,高可用与传统方式实现一致。
- SVC