7.SpringCloud:Skywalking链路追踪和OpenTracing对接

目录

一、概述

二、Skywalking介绍

三、内部传输协议

四、Skywalking服务端

五、Skywalking客户端

六、调整agent自带插件

七、定制化采集 

方式A(customize-enhance-trace插件+配置方式)

方式B(application-toolkit-trace注解方式)

方式C(application-toolkit-trace非注解方式)

情形C1:不构建新Span,使用已有Span

情形C2:构建新Span

方式D(opentracing源代码方式)


一、概述

      在传统的监控系统中,我们往往会关注虚拟机的 CPU、内存、网络、应用服务的接口请求量、资源使用率等指标,但在复杂系统中,这些监控指标并不足以帮助我们掌握系统的整体运行状况。在此背景下,系统的 “Observerbility可观测性” 应运而生。通常,我们认为可观测性相对于过去监控,最大的变化就是,系统需要处理的数据从指标为主,扩展到了更广的领域。目前对可观测性共识:可观测性包括三大支柱: ​   

  • Metrics
  • Tracing
  • Logging

  尤其是随着服务拆分,服务数量增加,调用链路也日趋复杂,对服务具备可观测性的要求越来越迫切。比如:分布式追踪(Distributed Tracing)能帮助我们直观地看到请求(request)或操作在各分布式系统里各个微服务的整个过程及其链路。

市面上已经有大量的开源项目,尽管不同工具定位、设计和实现不同,但通常都可以分为:采集端和服务端。

  • 采集端。在微服务应用一侧,用于采集微服务各个数据(包括调用链路)。
  • 服务端。接收采集端的数据并存放、加工和呈图。

采集端和服务端的传输方式有多种,比如通过日志埋点、接口通信等等。

常见具体解决方案有:Sleuth+Zipkin方案、Skywalking、CAT等。 

Sleuth+Zipkin作为Spring Cloud默认方案使用较多,但其监控UI呈图比较薄弱,不太符合中国风格。 因此这里选择使用Skywalking方案为例。无论哪个解决方案,在基础概念术语上多少都会采纳和借鉴Sleuth+Zipkin。比如:

  • Trace:即一次全链路调用。一次调用过程中涉及多个服务,一次全链路调用过程中多个服务的TraceID是相同的。(通过TraceID可定位一次全链路)
  • Span:服务间某各具体调用跨度,有点类似于网络通信的hop跳。这里的Span不是服务,而是服务间的调用。即Span不是下图的椭圆节点,而是调用线条。在同一个全链路TraceID中,每一次调用,SpanID就会增加1   (通过SpanID可定位全链路中调用次数信息)
  • Parent:光靠Trace+Span还不足以描述如下图节点B分别调用C和D的情况。因此还需要增加ParentID用于描述本次Span的上级调用者。即尽管先调用C后调用D(SpanID不同),但C和D都是被B调用,在调用层次上C和D属于同一层级(ParentID相同)。(通过ParentID可定位全链路中调用层级信息)

二、Skywalking介绍

SkyWalking 是一个开源可观察性平台,用于收集、分析、聚合和可视化来自服务和云原生基础设施的数据。SkyWalking 提供了一种简单的方法来维护分布式系统的清晰视图,即使是跨云也是如此。它是一种现代 APM,专为云原生、基于容器的分布式系统而设计。

 其官网为:https://skywalking.apache.org/

APM:应用性能管理(Application Performance Management)是一个比较新的网络管理方向,主要指对企业的关键业务应用进行监测、优化,提高企业应用的可靠性和质量。可简单理解监控体系。不同的监控侧重点不同,比如侧重硬件/CPU等资源的监控、侧重网络的监控。这里的Skywalking是侧重服务间链路调用的APM监控。

SkyWalking 基本概念

  • Service。表示一组/一组工作负载,它们为传入的请求提供相同的行为。您可以在使用仪器代理或 SDK 时定义服务名称。即微服务中的服务。
  • Service instance。服务组中的每个单独的工作负载称为一个实例。即同一个微服务可以部署多个节点,每个节点(进程)即为一个实例。
  • Endpoint。传入请求的服务路径,例如 HTTP URI 路径或 gRPC 服务类 + 方法签名。
  • Process。操作系统的进程。

官方Skywalking架构图如下:

  • Probes探针。采集数据并传输数据,部署在源,不同的探针以 支持不同的数据采集(见图中左侧)
  • Platform backend  后端平台。即数据聚合、加工、分析和流处理等 (见图中Receiver,也称为oap)
  • Storage 通过开放/可插拔接口存储SkyWalking 数据。您可以选择现有的实现,例如 H2、OpenSearch、ElasticSearch 6, 7, 8、MySQL、MySQL-Sharding(Shardingsphere-Proxy)、TiDB、PostgreSQL、BanyanDB,或者实现您自己的。 默认是H2,存在内存中,重启会丢失。(见图中Storage Options)
  • UI 健康呈图Web UI界面,webapp。高度可定制的基于 Web 的界面,允许 SkyWalking 最终用户可视化和管理 SkyWalking 数据。(见图中GUI/CLI)

Skywalking官方docs文档如下图,按不同的模块组织和排版。 

 如果要查看老版文档,可以通过github阅读docs目录。如下:

三、内部传输协议

在SkyWalking内部传输Protocol为V3版本,也被称为sw8协议。该协议通过在Header中自动增加:

  • Header名:sw8
  • Header值:由-分隔的8个字段组成。Header值的长度应该小于2KB。

Header值中具体包含以下8个字段:

  1. 采样(Sample),0 或 1,0 表示上下文存在, 但是可以(也很可能)被忽略;1 表示这个追踪需要采样并发送到后端。
  2. 追踪ID(Trace Id),其容是由 . 分割的三个 long 类型值, 表示此追踪的唯一标识。BASE64 编码的字符串。
  3. 父追踪片段ID(Parent trace segment Id),内容是字符串且全局唯一。BASE64 编码的字符串。
  4. 父跨度ID(Parent span Id),是一个从 0 开始的整数,这个跨度ID指向父追踪片段(segment)中的父跨度(span)。
  5. 父服务名称(Parent service),内容是一个长度小于或等于50个UTF-8编码的字符串。BASE64 编码的字符串。
  6. 父服务实例标识(Parent service instance),内容是一个长度小于或等于50个UTF-8编码的字符串。BASE64 编码的字符串。
  7. 父服务的端点(Parent endpoint),内容是父追踪片段(segment)中第一个入口跨度(span)的操作名,由长度小于或等于50个UTF-8编码的字符组成。BASE64 编码的字符串。
  8. 本请求的目标地址(Peer),内容是客户端用于访问目标服务的地址(这个地址一般由代码人工或者插件等进行赋值)。通常为 IP:端口形式。BASE64 编码的字符串。  

另外,还可能存在sw8-correlationsw8-x 等Header名。 sw8-correlation的值内容是key:value形式的Correlation。BASE64 编码的字符串。

Correlation可跨Span间传递信息,实现跨服务调用的信息传递。与Tag不同,不会将Correlation报告给SkyWalking服务端。

常见开源APM项目使用的传输协议如下表

    注1:为了统一可观测性系统中的数据采集和标准规范,提供与供应商无关的接口,CNCF 把 OpenTracing 和 OpenCensus 合并后成为OpenTelemetry 项目。OpenTelemetry 通过 Spec 规范了观测数据的数据模型以及采集、处理、导出方法和标准,但不涉及数据如何去使用、存储、展示和告警等,由各产品进行具体实现。

    注2:OpenTelemetry 与 SkyWalking 存在一些共通的概念:都是使用 Trace 来定义一次追踪,并使用 Span 来标记追踪里的最小粒度。但是在一些细节和实现上还是会有差别

以上图片资料来源为:https://baijiahao.baidu.com/s?id=1754874021459504401

四、Skywalking服务端

服务端这里以CentOS作为服务器为例。服务端部署很简单,基本上执行解压和启动即可

1、从官网找到下载页面

 2、从官网下载并解压。由于9.x版本的Web界面UI组织发生了较大变化,且9.4及更高版本需要运行在JDK11 to JDK17上。因此这里以8.9.1版为例。

wget --no-check-certificate https://archive.apache.org/dist/skywalking/8.9.1/apache-skywalking-apm-8.9.1.tar.gz
tar xvfz apache-skywalking-apm-8.9.1.tar.gz
cd apache-skywalking-apm-bin

#wget --no-check-certificate https://archive.apache.org/dist/skywalking/9.3.0/apache-skywalking-apm-9.3.0.tar.gz
#tar xvfz apache-skywalking-apm-9.3.0.tar.gz
#cd apache-skywalking-apm-bin

 解压后服务端包括:Skywalking后端Receiver(oap) 与 Web UI(webapp)的目录如下:

apache-skywalking-apm-bin
  ├── bin
  ├── config
  ├── config-examples
  ├── LICENSE
  ├── licenses
  ├── NOTICE
  ├── oap-libs
  ├── README.txt
  ├── tools
  └── webapp

 3、Skywalking支持存储种类包括数据库H2、OpenSearch、ElasticSearch 6, 7, 8、MySQL、MySQL-Sharding(Shardingsphere-Proxy)、TiDB、PostgreSQL、BanyanDB。默认使用数据库为H2(该数据为内存数据库,重启则数据全部丢失)。 仅做演示这里保持默认的H2不变

 4、Skywalking后端接收采集源数据的默认侦听:0.0.0.0/11800(gRPC API  包括接收 Java、DotNetCore、Node.js 和 Istio 代理/探针) 及  0.0.0.0/12800HTTP REST API)。若需要修改Skywalking接收采集数据的端口则修改config/application.yml文件。这里保持默认不变

 5、Skywalking的监控呈图Web界面端口默认为8080。若需要修改Skywalking接收采集数据的端口则修改webapp/webapp.yml文件。  由于本环境中8080端口已经被占用,因此改为38001端口

 6、启动。在Linux中使用bin/startup.sh,会自动启动Skywalking后端Receiver(oap)以及Web UI(webapp)。启动后会存在两个进程,两个进程监听端口如下:

 7、访问Web。http://39.100.80.168:38001/

    注:点击时间旁边时区,可对界面显示语言等进行调整。

五、Skywalking客户端

Skywalking客户端,即在微服务部署探针Probe作为数据的采集源。

对于Java类程序,Skywalking的探针是使用JVM Agent技术编写,可以做到对被探测的应用零侵入。

1、从官网找到下载页面

  

  2、下载后解压。解压后的agent目录结构如下:

skywalking-agent
  ├── activations
  ├── bootstrap-plugins
  ├── config
  ├── LICENSE
  ├── licenses
  ├── logs
  ├── NOTICE
  ├── optional-plugins
  ├── optional-reporter-plugins
  ├── plugins
  └── sky
  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Skywalking链路追踪是一种用于监测和追踪分布式系统中请求路径的方法。它能够帮助开发人员了解系统中的微服务之间的调用关系,以及发现潜在的性能瓶颈和故障点。 当前主流的分布式链路追踪系统中,Skywalking是其中一个非常受欢迎的开源系统。它提供了丰富的功能和灵活的配置选项,使得开发人员能够轻松地集成和使用它来进行链路追踪Skywalking的基本知识包括了服务监控的三个要素,即请求的入口、请求的出口以及请求的耗时。通过监控这些要素,我们可以获得对分布式系统中请求的全局视图,并且可以跟踪请求路径中的每个节点。 要使用Skywalking进行链路追踪,我们首先需要在系统中部署Skywalking oap服务,并将其注册到nacos上。只要至少保持一个Skywalking oap服务在运行,就能够进行链路追踪。通过配置Skywalking agent,我们可以在各个微服务中埋点,从而捕获和发送调用链数据到Skywalking oap服务。 总结起来,Skywalking链路追踪是一种用于监测和追踪分布式系统中请求路径的方法,它能够帮助开发人员了解系统中的微服务之间的调用关系,以及发现潜在的性能瓶颈和故障点。Skywalking是当前非常受欢迎的开源链路追踪系统,通过部署Skywalking oap服务和在各个微服务中埋点,我们可以实现对分布式系统中请求的全局视图和详细追踪数据的收集。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [全网最全的Skywalking链路追踪](https://blog.csdn.net/scmagic/article/details/123429815)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [链路追踪SkyWalking](https://blog.csdn.net/qq_41910252/article/details/122746979)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值