当前位置: 首页 > news >正文

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地址,高可用与传统方式实现一致。
      在这里插入图片描述
http://www.dtcms.com/a/395236.html

相关文章:

  • Dockerfile入门指南
  • iOS 原生开发全流程解析,iOS 应用开发步骤、Xcode 开发环境配置、ipa 文件打包上传与 App Store 上架实战经验
  • 数据分析报告的写作流程
  • 当你的断点在说谎:深入解析RTOS中的“幽灵”Bug
  • [BUG]MarkupSafe==3.0.2
  • 机器学习笔试选择题:题组1
  • 79-数据可视化-地图可视化
  • python全栈-数据可视化
  • 【国产桌面操作系统】安装mysql客户端及C/C++开发
  • IntelliJ:找不到相关的 gradle 配置,请重新导入 Gradle 项目,然后重试。
  • 云计算微服务架构与容器化技术:服务网格与边缘计算融合实践
  • 飞牛NAS上搭建OpenWrt旁路由教程(适用于x86的Docker部署)
  • python14——函数
  • 14.Linux 硬盘分区管理及RAID存储技术
  • ★ Linux ★ 信号
  • macOS在IDEA里滚动行为混乱问题
  • ✨Vue 静态路由详解:构建应用的导航骨架(4)
  • 08-2Dcss动画
  • 使用IOT-Tree消息流Modbus Slave节点,实现Modbus设备的模拟
  • 创作者模式—单例设计模式
  • PostgreSQL 备份
  • SQL-多表查询
  • Hive SQL 中的时间戳转换详解
  • Linux笔记---select、poll、epoll总结对比
  • MySQL查询详细介绍
  • 面试题二:业务篇
  • Rust进阶-part8-迭代器
  • halcon3d gen_image_to_world_plan3_map与project_3d_point
  • Ellisys工具
  • Qwen3-7B-Instruct Windows LMStudio 部署