SpringBoot集成Skywalking分布式服务调用链路追踪

yuan 1年前 ⋅ 46 阅读

Skywalking是一个基于JAVA SpringBoot框架开发的监控工具,可以用于查看监控指标和定位问题。使用经验包括搭建集群、统一管理代码、使用ES集群存储数据等。入口类为执行premain方法,加载配置文件并读取启动类的-javaagent参数。

全链路应用性能监控

一、Skywalking概述

1、Skywalking介绍

官网:博客 | Apache SkyWalking

Skywalking是一个国产的开源框架,2015年有吴晟个人开源,2017年加入Apache孵化器,国人开源的产品,主要开发人员来自于华为,2019年4月17日Apache董事会批准SkyWalking成为顶级项目,支持Java、.Net、NodeJs等探针,数据存储支持Mysql、Elasticsearch等,跟Pinpoint一样采用字节码注入的方式实现代码的无侵入,探针采集数据粒度粗,但性能表现优秀,且对云原生支持,目前增长势头强劲,社区活跃。
Skywalking是分布式系统的应用程序性能监视工具,专为微服务,云原生架构和基于容器(Docker,K8S,Mesos)架构而设计,它是一款优秀的APM(Application Performance Management)工具,包括了分布式追踪,性能指标分析和服务依赖分析等。

2、Skywalking架构图

å¨è¿éæå¥å¾çæè¿°

整个架构,分成上、下、左、右四部分

①、上部分 Agent :负责从应用中,收集链路信息,发送给 SkyWalking OAP 服务器。目前支持 SkyWalking、Zikpin、Jaeger 等提供的 Tracing 数据信息。而我们目前采用的是,SkyWalking ②、Agent 收集 SkyWalking Tracing 数据,传递给服务器。
下部分 SkyWalking OAP :负责接收 Agent 发送的 Tracing 数据信息,然后进行分析(Analysis Core) ,存储到外部存储器( Storage ),最终提供查询( Query )功能。
③、右部分 Storage :Tracing 数据存储。目前支持 ES、MySQL、Sharding Sphere、TiDB、H2 多种存储器。而我们目前采用的是 ES ,主要考虑是 SkyWalking 开发团队自己的生产环境采用 ES 为主。
④、左部分 SkyWalking UI :负责提供控台,查看链路等等。

基于各种语言的Agent探针来收集服务数据,然后展示采集的数据;

多种监控手段,可以通过语言探针和service mesh获得监控的数据;
支持多种语言自动探针,包括java,.NET Core和Node.JS;
轻量高效,无需大数据平台和大量的服务器资源;
模块化,UI、存储、集群管理都有多种机制可选;
支持告警;
优秀的可视化解决方案;

3、下载,各种语言的Agent都有

下载Skywalking服务

 下载监控JavaAgent.

这里下载Java语言的最新版本的.

①、源码下载阅读

 Github地址

 4、微服务开发中解决一下问题

①、如何串联整个调用链路,快速定位问题?单纯看日志?
②、如何澄清各个微服务之间的依赖关系?
③、如何进行各个微服务接口的性能分析?
④、如何追踪各个业务流程的调用处理顺序?

二、Skywalking启动

1、启动脚本 

如果出现启动问题,看日志具体解决.

2、配置文件

Skywalking基于JAVA SpringBoot框架开发,默认端口是8080,可以在启动时候自己指定修改.

默认使用的存储数据库是H2,可以修改为MySQL和ES,在配置文件中灵活配置.

3、启动skywalking

在IDEA中添加一下地址信息

-javaagent:D:\skywalking\skywalking-agent\skywalking-agent.jar -Dskywalking.agent.service_name=skywalking-service -Dskywalking.collector.backend_service=127.0.0.1:11800

 配置项说明:

-javaagent:用于指定探针路径(就是agent下skywalking-agent.jar包存放的绝对路径)

在agent/config/agent.config配置文件中,-Dskywalking.agent.service_name被用于覆盖服务名。

作为IT工程师,我建议您使用以下方式更专业地表达该文本: 建议使用-Dskywalking.collector.backend_service参数,以便能够对agent/config/agent.config配置文件中的服务地址进行重写。

对于Tomcat的部署项目在catalina.sh中添加即可,spring boot项目中在nohub启动脚本中添加。

 agent位置.

agent不要单独copy到一个目录,否则加载不到config配置类就包如下错了

The system encountered an error while attempting to read the configuration file. As a result, the skywalking module will be running on the default configuration.

 正确加载应该是这样.

三、监控指标查看

 1、查看拓扑图

2、监控项

 

 3、事件ID

 4、追踪

5、性能剖析 

 6、告警

以下是使用更专业的语言重新表达该段文字: 在搭建集群时,一般使用域名进行单独部署,并统一管理代理脚本和其他代码。数据存储方面,常采用ES集群。同时,还提供了业界认可的appid方式来统一管理链路追踪,以便对业务进行辅助定位和问题排查。这种方案对业务的侵入性较低,还可以配置一些告警功能。在不同环境(如sit、alpha、prod等)中,需要注意区分配置。此外,还可以使用公有云提供的自研APM探针工具来收集信息,其基本原理与其它工具相似。对于熟悉skywalking的人来说,只需阅读文档即可上手。在一些监控组件中,功能可能有重叠,而skywalking则更擅长于链路追踪,便于问题定位。

四、Skywalking的探针原理

1、Java探针技术类型
        (1)在主程序之前运行的Agent.

        (2)在主程序之后运行的Agent.

      在实际使用过程中,javaagent是java命令的一个参数。通过java 命令启动我们的应用程序的时候,可通过参数 -javaagent 指定一个 jar 包(也就是我们的代理agent),能够实现在我们应用程序的主程序运行之前来执行我们指定jar 包中的特定方法,在该方法中我们能够实现动态增强Class等相关功能,并且该 jar包有2个要求:
<1> 这个 jar 包的 META-INF/MANIFEST.MF 文件必须指定 Premain-Class 项,该选项指定的是一个类的全路径.
<2> Premain-Class 指定的那个类必须实现 premain() 方法。META-INF/MANIFEST.MF文件内容如下

2、Skywalking的探针文件如下

Manifest-Version: 1.0
Created-By: Apache Maven 3.6.1
Built-By: wusheng
Build-Jdk: 11.0.13
Specification-Title: apm-agent
Specification-Version: 8.10
Specification-Vendor: The Apache Software Foundation
Implementation-Title: apm-agent
Implementation-Version: 8.10.0
Implementation-Vendor-Id: org.apache.skywalking
Implementation-Vendor: The Apache Software Foundation
Implementation-URL: http://maven.apache.org
Can-Redefine-Classes: true
Can-Retransform-Classes: true
Premain-Class: org.apache.skywalking.apm.agent.SkyWalkingAgent

拉下来源码看一下,IDEA导入一下即可.

 

入口类:执行premain方法

加载配置文件读取启动类的-javaagent参数. 

Skywalking是一个功能强大的监控工具,可以帮助开发人员监控和定位问题。它基于JAVA SpringBoot框架开发,可以通过下载服务和监控JavaAgent来使用。通过配置文件可以对服务名和服务地址进行修改,在集群部署中可以使用域名单独部署。它还支持使用ES集群存储数据,并可以配置告警来辅助业务定位问题。它的入口类为执行premain方法,通过加载配置文件读取启动类的-javaagent参数。

参考链接:https://blog.csdn.net/HcJsJqJSSM/article/details/127403323?ops_request_misc=&request_id=&biz_id=102&utm_term=Skywalking&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-1-127403323.nonecase&spm=1018.2226.3001.4449

关于纵目

江苏纵目信息科技有限公司是一家专注于运维监控软件产品研发与销售的高科技企业。覆盖全链路应用性能监控、IT基础设施监控、物联网数据采集数据观测等场景,基于Skywalking、Zabbix、ThingsBoard等开源体系构建了ArgusAPM、ArgusOMS、ZeusIoT等产品,致力于帮助各行业客户构建集聚可观测性的统一运维平台、物联网大数据平台。

  点赞 0   收藏 0
  • yuan
    共发布32篇文章 获得1个收藏
全部评论: 0