# 分布式链路追踪_skywalking_学习(1)

2024-05-27 22:04

本文主要是介绍# 分布式链路追踪_skywalking_学习(1),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

分布式链路追踪_skywalking_学习(1)

一、APM 系统概述

1、什么是 APM 系统?

APM :全称 Application Performance Management 即应用性能管理系统。是对企业系统即时监控以实现对应用程序性能管理和故障管理的系统化的解决方案。

应用性能管理,主要指对企业的关键业务应用进行监测、优化,提高企业应用的可靠性和质量,保证用户得到良好的服务,降低IT总拥有成本。

APM 系统是可以帮助理解系统行为、用于分析性能问题的工具,以便发生故障的时候,能够快速定位和解决问题。

2、分布式链路追踪

1)随着分布式系统和微服务架构的出现,一次用户的请求会经过多个系统,不同服务之间的调用关系十分复杂,任何一个系统出错都可能影响整个请求的处理结果。以往的监控系统往往只能知道单个系统的健康状况、一次请求的成功失败,无法快速定位失败的根本原因。

2)除此之外,复杂的分布式系统也面临这下面这些问题:

  • 性能分析:

    一个服务依赖很多服务,被依赖的服务也依赖了其他服务。如果某个接口耗时突然变长了,那未必是直接调用的下游服务慢了,也可能是下游的下游慢了造成的,如何快速定位耗时变长的根本原因呢?

  • 链路梳理:

    需求迭代很快,系统之间调用关系变化频繁,靠人工很难梳理清楚系统链路拓扑 (系统之间的调用关系)。

3)为了解决这些问题,Google 推出了一个分布式链路跟踪系统 Dapper ,之后各个互联网公司都参照Dapper 的思想推出了自己的分布式链路跟踪系统,而这些系统就是分布式系统下的 APM 系统。

3、什么是 OpenTracing ?

分布式链路跟踪最先由 Google 在 Dapper 论文中提出,而 OpenTracing 通过提供平台无关、厂商无关的 API,使得开发人员能够方便的添加(或更换)追踪系统的实现。

4、主流的开源 APM 产品:

1)PinPoint

Pinpoint 是由一个韩国团队实现并开源,针对 Java 编写的大规模分布式系统设计,通过 JavaAgent 的机制做字节代码植入,实现加入 traceid 和获取性能数据的目的,对应用代码零侵入。

官方网站:
https://github.com/naver/pinpoint

2)SkyWalking

SkyWalking 是 apache 基金会下面的一个开源 APM 项目,为微服务架构和云原生架构系统设计。它通过探针自动收集所需的指标,并进行分布式追踪。通过这些调用链路以及指标,Skywalking APM 会感知应用间关系和服务间关系,并进行相应的指标统计。Skywalking 支持链路追踪和监控应用组件基本涵盖主流框架和容器,如国产 RPC Dubbo 和 motan 等,国际化的 spring boot,spring cloud。

官方网站:
http://skywalking.apache.org/

3)Zipkin

Zipkin 是由 Twitter 开源,是分布式链路调用监控系统,聚合各业务系统调用延迟数据,达到链路调用监控跟踪。Zipkin 基 于Google 的 Dapper 论文实现,主要完成数据的收集、存储、搜索与界面展示。

官方网站:
https://zipkin.io/

4)CAT

CAT 是由大众点评开源的项目,基于 Java 开发的实时应用监控平台,包括实时应用监控,业务监控,可以提供十几张报表展示。

官方网站:
https://github.com/dianping/cat

二、Skywalking 介绍

1、什么是 Skywalking?

根据官方的解释,Skywalking 是一个可观测性分析平台(Observability Analysis Platform 简称 OAP )和应用性能管理系统(Application Performance Management简称 APM )。

提供分布式链路追踪、服务网格(Service Mesh)遥测分析、度量(Metric)聚合和可视化一体化解决方案。

2、Skywalking 的几大特点:

  • 多语言自动探针, Java,.NET Core 和 Node.JS。
  • 多种监控手段,语言探针和 service mesh。
  • 轻量高效。不需要额外搭建大数据平台。
  • 模块化架构。 UI、存储、集群管理多种机制可选。
  • 支持告警。
  • 优秀的可视化效果。

3、Skywalking 整体架构包含如下三个组成部分:

1)探针(agent)负责进行数据的收集,包含了 Tracing 和 Metrics 的数据,agent 会被安装到服务所在的服务器上,以方便数据的获取。

2)可观测性分析平台 OAP(Observability Analysis Platform),接收探针发送的数据,并在内存中使用分析引擎(Analysis Core)进行数据的整合运算,然后将数据存储到对应的存储介质上,比如Elasticsearch、MySQL 数据库、H2 数据库等。同时 OAP 还使用查询引擎(Query Core)提供HTTP查询接口。

3)Skywalking 提供单独的 UI 进行数据的查看,此时 UI 会调用 OAP 提供的接口,获取对应的数据然后进行展示。

4、Skywalking 优势

Skywalking 相比较其他的分布式链路监控工具,具有以下特点:

  • 社区相当活跃。 Skywalking 已经进入 apache 孵化,目前的 start 数已经超过 11K,版本更新快 6.5.0 已经发布。开发者是国人,可以直接和项目发起人交流进行问题的解决。

  • Skywalking 支持 Java,.NET Core 和 Node.JS 语言。相对于其他平台:比如 Pinpoint 支持 Java 和 PHP,具有较大的优势。

  • 探针无倾入性。对比 CAT具有倾入性的探针,优势较大。不修改原有项目一行代码就可以进行集成。

  • 探针性能优秀。有网友对 Pinpoint和Skywalking进行过测试,由于Pinpoint收集的数据过多,所以对性能损耗较大,而Skywalking探针性能十分出色。

  • 支持组件较多。特别是对 Rpc框架的支持,这是其他框架所不具备的。Skywalking对Dubbo、gRpc等有原生的支持,甚至连小众的motan和sofarpc都支持。

5、Skywalking主要概念介绍

使用如下案例来进行Skywalking主要概念的介绍,Skywalking主要概念包含:

  • 服务 (Service)
  • 端点 (Endpoint)
  • 实例 (Instance)

三、环境搭建-ElasticSearch 环境搭建

1、在虚拟机中搭建 Skywalking 的可观测性分析平台 OAP 环境。Skywalking 默认使用 H2

内存中进行数据的存储,可以替换存储源为 ElasticSearch 保证其查询的高效及可用性。

具体的安装步骤可以在 Skywalking 的官方 github 上找到:
https://github.com/apache/skywalking/blob/master/docs/en/setup/README.md

2、在虚拟机上创建新目录(建议将虚拟机内存设置为 3G 并且将 CPU 设置成 2 核,防止资源不足。)

sudo mkdir /usr/local/skywalking

3、将 elasticsearch 和 skywalking 安装包上传到虚拟机 /usr/local/skywalking 目录下。

1)Skywalking 对 es 版本号有一定要求,最好使用 6.3.2 以上版本,如果是 7.x 版本需要额外进行配置。

2)这里使用的版本分别是:
apache-skywalking-apm-6.5.0.tar.gz
elasticsearch-6.4.0.tar.gz

4、安装 elasticsearch,将压缩包解压。

sudo tar -zxvf ./elasticsearch-6.4.0.tar.gz

5、修改 Linux 系统的限制配置,将文件创建数修改为 65536 个。

1)修改系统中允许应用最多创建多少文件等的限制权限。Linux 默认来说,一般限制应用最多
创建的文件是 65535 个。但是 ES 至少需要 65536 的文件创建数的权限。

2)修改系统中允许用户启动的进程开启多少个线程。默认的 Linux 限制 root 用户开启的进程可
以开启任意数量的线程,其他用户开启的进程可以开启 1024 个线程。必须修改限制数为
4096+。因为 ES 至少需要 4096 的线程池预备。

sudo vi /etc/security/limits.conf#新增如下内容在 limits.conf 文件中
es soft nofile 65536
es hard nofile 65536
es soft nproc  4096
es hard nproc  4096

6、修改系统控制权限, ElasticSearch 需要开辟一个 65536 字节以上空间的虚拟内存。Linux 默认不允许任何用户和应用程序直接开辟这么大的虚拟内存。

sudo vi /etc/sysctl.conf#新增如下内容在sysctl.conf文件中,当前用户拥有的内存权限大小
vm.max_map_count=262144#让系统控制权限配置生效
sudo sysctl -p

在这里插入图片描述

7、新建一个用户 es, 用于 ElasticSearch 启动。

ES 在 5.x 版本之后,强制要求在 linux 中不能使用 root 用户启动 ES 进程。所以必须使用其他用户启动 ES 进程才可以。

#创建用户
sudo useradd es#修改上述用户的密码
sudo passwd es
djh12311
djh12311#修改 elasicsearch 目录的拥有者
cd  /usr/local/skywalking
sudo chown -R es elasticsearch-6.4.0

8、使用 es 用户启动 elasticsearch

#切换用户
su es
djh12311#切换目录
cd  /usr/local/skywalking#后台启动 elasticsearch
./elasticsearch-6.4.0/bin/elasticsearch -d# 查看后台运行日志
tail -f elasticsearch-6.4.0/logs/elasticsearch.log

9、默认 ElasticSearch 是不支持跨域访问的,所以在不修改配置文件的情况下我们只能从虚拟机内部进行访

问测试 ElasticSearch 是否安装成功,使用 curl 命令访问 9200 端口:

curl http://localhost:9200

如果显示如下信息,就证明 ElasticSearch 安装成功。

{"name" : "xbruNxf","cluster_name" : "elasticsearch","cluster_uuid" : "JJQfHN9QQVuXpH5fu9H1jg","version" : {"number" : "6.4.0","build_flavor" : "default","build_type" : "tar","build_hash" : "595516e","build_date" : "2018-08-17T23:18:47.308994Z","build_snapshot" : false,"lucene_version" : "7.4.0","minimum_wire_compatibility_version" : "5.6.0","minimum_index_compatibility_version" : "5.0.0"
},"tagline" : "You Know, for Search"
}

在这里插入图片描述

四、环境搭建-skywalking 环境搭建

1、安装 Skywalking,分为两个步骤:

  • 安装 Backend 后端服务
  • 安装 UI

2、首先切回到 root 用户,切换到 /usr/local/skywalking 目录下,解压 Skywalking 压缩包。

#切换到 root 用户
su root#切换到 skywalking 目录
cd /usr/local/skywalking#解压压缩包
sudo tar -zxvf ./apache-skywalking-apm-6.5.0.tar.gz

3、修改 Skywalking 存储的数据源配置

#切换到 skywalking 目录
cd /usr/local/skywalkingvim  ./apache-skywalking-apm-bin/config/application.yml

4、默认配置中,Skywalking 使用了 H2 作为数据源。将其全部注释。

#  h2:
#    driver: ${SW_STORAGE_H2_DRIVER:org.h2.jdbcx.JdbcDataSource}
#    url: ${SW_STORAGE_H2_URL:jdbc:h2:mem:skywalking-oap-db}
#   user: ${SW_STORAGE_H2_USER:sa}
#   metadataQueryMaxSize: ${SW_STORAGE_H2_QUERY_MAX_SIZE:5000}

5、将 ElasticSearch 对应的配置取消注释:

storage:elasticsearch:nameSpace: ${SW_NAMESPACE:""}clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:localhost:9200}protocol: ${SW_STORAGE_ES_HTTP_PROTOCOL:"http"}trustStorePath: ${SW_SW_STORAGE_ES_SSL_JKS_PATH:"../es_keystore.jks"}trustStorePass: ${SW_SW_STORAGE_ES_SSL_JKS_PASS:""}user: ${SW_ES_USER:""}password: ${SW_ES_PASSWORD:""}indexShardsNumber: ${SW_STORAGE_ES_INDEX_SHARDS_NUMBER:2}indexReplicasNumber: ${SW_STORAGE_ES_INDEX_REPLICAS_NUMBER:0}
#    # Those data TTL settings will override the same settings in core module.recordDataTTL: ${SW_STORAGE_ES_RECORD_DATA_TTL:7} # Unit is dayotherMetricsDataTTL: ${SW_STORAGE_ES_OTHER_METRIC_DATA_TTL:45} # Unit is daymonthMetricsDataTTL: ${SW_STORAGE_ES_MONTH_METRIC_DATA_TTL:18} # Unit is month
#    # Batch process setting, refer to https://www.elastic.co/guide/en/elasticsearch/client/java-api/5.5/java-docs-bulk-processor.htmlbulkActions: ${SW_STORAGE_ES_BULK_ACTIONS:1000} # Execute the bulk every 1000 requestsflushInterval: ${SW_STORAGE_ES_FLUSH_INTERVAL:10} # flush the bulk every 10 seconds whatever the number of requestsconcurrentRequests: ${SW_STORAGE_ES_CONCURRENT_REQUESTS:2} # the number of concurrent requestsresultWindowMaxSize: ${SW_STORAGE_ES_QUERY_MAX_WINDOW_SIZE:10000}metadataQueryMaxSize: ${SW_STORAGE_ES_QUERY_MAX_SIZE:5000}segmentQueryMaxSize: ${SW_STORAGE_ES_QUERY_SEGMENT_SIZE:200}

6、Backend 后端服务安装完毕后,安装 UI。先修改 UI 的配置文件端口为:9010,防止端口冲突。

#切换到 skywalking 目录
cd /usr/local/skywalking

vim ./apache-skywalking-apm-bin/webapp/webapp.yml

server:port: 9010

7、默认使用了 localhost 下的 ES,所以我们可以不做任何处理,直接进行使用。启动 OAP 程序:

#切换到 skywalking 目录
cd /usr/local/skywalking# 启动 OAP 
./apache-skywalking-apm-bin/bin/oapService.sh# 或者 同时启动 OAP 和 UI :
./apache-skywalking-apm-bin/bin/startup.sh

8、查看启动日志

#切换到 skywalking 目录
cd /usr/local/skywalkingtail -f   ./apache-skywalking-apm-bin/logs/webapp.log

9、浏览器地址栏输入:(虚拟机的IP地址:ifconfig 查询,或者:ip addr 命令查询 ip)

172.29.35.23:9010

在这里插入图片描述

五、 agent 的使用-简介

1、agent 的使用

agent 探针可以让我们不修改代码的情况下,对 java 应用上使用到的组件进行动态监控,获取运行数据发送到 OAP 上进行统计和存储。agent 探针在 java 中是使用java agent 技术实现的,不需要更改任何代码,java agent 会通过虚拟机(VM)接口来在运行期更改代码。

2、Agent 探针支持 JDK 1.6 - 12的版本,Agent 探针所有的文件在 Skywalking 的 agent 文件夹下。文件目录如下:

+-- agent+-- activationsapm-toolkit-log4j-1.x-activation.jarapm-toolkit-log4j-2.x-activation.jarapm-toolkit-logback-1.x-activation.jar...//配置文件+-- configagent.config//组件的所有插件+-- pluginsapm-dubbo-plugin.jarapm-feign-default-http-9.x.jarapm-httpClient-4.x-plugin.jar.....//可选插件+-- optional-pluginsapm-gson-2.x-plugin.jar.....+-- bootstrap-pluginsjdk-http-plugin.jar.....+-- logsskywalking-agent.jar

3、编辑 agent 配置文件

cd /usr/local/skywalking
./apache-skywalking-apm-bin/agent/config
vi agent.config
# The service name in UI
agent.service_name=${SW_AGENT_NAME:skywalking_tomcat}

4、重启 tomcat

cd /usr/local/skywalking./apache-tomcat-8.5.47/bin/shutdown.sh./apache-tomcat-8.5.47/bin/startup.sh

六、agent 的使用-linux下 tomcat7 和 8 中使用

1、要使用 Skywalking 监控 Tomcat 中的应用,需要先准备一个 SpringMVC 项目,然后打包成

skywalking_springmvc.war 。

1.1 创建 artifactId 名为 skywalking_springmvc 的 maven 工程。
--> idea --> File --> New --> Project --> Maven Project SDK: ( 1.8(java version "1.8.0_131" ) --> Next --> Groupld : ( djh.it )Artifactld : ( skywalking_springmvc )Version : 1.0-SNAPSHOT--> Name: ( skywalking_springmvc )Location: ( ...\skywalking_springmvc\ )	--> Finish
1.2 在工程 skywalking_springmvc 的 pom.xml 文件中导入依赖坐标。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>djh.it</groupId><artifactId>skywalking_springmvc</artifactId><version>1.0-SNAPSHOT</version><packaging>war</packaging><name>skywalking_springmvc Maven Webapp</name><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target><spring.version>5.0.5.RELEASE</spring.version></properties><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aspects</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jms</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId><version>${spring.version}</version></dependency><dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.4</version><scope>provided</scope></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>2.3.2</version><configuration><source>1.8</source><target>1.8</target></configuration></plugin><plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><configuration><!--  指定端口  --><port>8082</port><!--  请求路径  --><path>/</path></configuration></plugin></plugins></build>
</project>
<!-- skywalking_springmvc\pom.xml -->
1.3 在工程 skywalking_springmvc 中,创建 Controller 类 HelloController.java
/***  skywalking_springmvc\src\main\java\djh\it\controller\HelloController.java**  2024-5-16 创建 Controller 类 HelloController.java*/
package djh.it.controller;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;@Controller
@RequestMapping("/hello")
//hello/sayHello.do
public class HelloController {@RequestMapping("/sayHello")@ResponseBodypublic String sayHello(String name){return "hello world";}
}
1.4 在工程 skywalking_springmvc 中,创建配置文件 applicationContext-web.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:p="http://www.springframework.org/schema/p"xmlns:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd"><context:component-scan base-package="djh.it.controller"/>
</beans>
<!-- skywalking_springmvc\src\main\resources\applicationContext-web.xml -->
1.5 在工程 skywalking_springmvc 中,创建页面文件 index.jsp
<html>
<body>
<h1>index.jsp</h1>
<h2>Hello World!</h2>
</body>
</html>
1.6 在工程 skywalking_springmvc 中,创建 web.xml
<!DOCTYPE web-app PUBLIC"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN""http://java.sun.com/dtd/web-app_2_3.dtd" ><web-app><display-name>Archetype Created Web Application</display-name><servlet><servlet-name>springmvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:applicationContext-web.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>springmvc</servlet-name><url-pattern>*.do</url-pattern></servlet-mapping>
</web-app>
<!-- skywalking_springmvc\src\main\webapp\WEB-INF\web.xml -->
1.7 把工程 skywalking_springmvc 打包成 skywalking_springmvc.war 。

2、下载 apache-tomcat-8.5.47.tar.gz 文件并上传至虚拟机 /usr/local/skywalking 目录下,然

后解压:

cd /usr/local/skywalkingtar -zxvf apache-tomcat-8.5.47.tar.gz

3、将 skywalking_springmvc.war 包上传至 /usr/local/skywalking/apache-tomcat-8.5.47/webapps/ 下。编辑 /usr/local/skywalking/apache-tomcat-8.5.47/bin/catalina.sh 文件,在文件顶部添加:

cd /usr/local/skywalking

vim ./apache-tomcat-8.5.47/bin/catalina.sh

CATALINA_OPTS="$CATALINA_OPTS -javaagent:/usr/local/skywalking/apache-skywalking-apm-bin/agent/skywalking-agent.jar"; export CATALINA_OPTS

4、修改 tomcat 启动端口:

cd /usr/local/skywalking/vim apache-tomcat-8.5.47/conf/server.xml#修改这一行的端口为 8081
<Connector port="8080" protocol=...

5、执行 bin 目录下的 ./startup.sh 文件启动 tomcat。然后访问地址:

./apache-tomcat-8.5.47/bin/startup.sh

http://虚拟机IP:8081/skywalking_springmvc/hello/sayHello.do

如: http://172.29.35.23:8081/skywalking_springmvc/hello/sayHello.do

如果正确打开,输出 hello world。

注意:一定要保证虚拟机和物理机的时间一致,否则访问数据的时候会因为时间不一致而获取不到数据。

在这里插入图片描述

在这里插入图片描述

6、此时再访问 Skywalking 的页面( http://172.29.35.23:9010/ ),会发现出现了一个服务和端点,同时有一笔调用显示了调用的应用名和接口地址。

7、由于没有修改 agent 探针中的应用名,所以默认显示的是 Your_ApplicationName。修改下应用名称,让他显示的更加正确。编辑 agent 配置文件:

# 切换目录:
cd /usr/local/skywalking/# 编辑 agent 配置文件
vim ./apache-skywalking-apm-bin/agent/config/agent.config# 修改前:
# The service name in UI
agent.service_name=${SW_AGENT_NAME:Your_ApplicationName}# 修改后:
# The service name in UI
agent.service_name=${SW_AGENT_NAME:skywalking_tomcat}

8、重启 tomcat

# 切换目录:
cd /usr/local/skywalking/./apache-tomcat-8.5.47/bin/shutdown.sh
./apache-tomcat-8.5.47/bin/startup.sh

9、重新访问页面,查询结果:

http://172.29.35.23:8081/skywalking_springmvc/hello/sayHello.do
http://172.29.35.23:9010/
注意:一定要保证虚拟机和物理机的时间一致,否则访问数据的时候会因为时间不一致而获取不到数据。

在这里插入图片描述
在这里插入图片描述

10、Windows 下 Tomcat7 和 8 中使用

Windows 下只需要修改 tomcat 目录 /bin/catalina.bat 文件的第一行为:

set "CATALINA_OPTS=-javaagent:/path/to/skywalking-agent/skywalking-agent.jar"

七、agent 的使用-Spring Boot

Skywalking 与 Spring Boot 集成提供了完善的支持。

1、打开 idea 创建新工程 skywalking_springboot

1.1 在 skywalking_springboot 工程的 pom.xml 文件中导入依赖坐标:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.10.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>djh.it</groupId><artifactId>skywalking_springboot</artifactId><version>0.0.1-SNAPSHOT</version><name>skywalking_springboot</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
1.2 在 skywalking_springboot 工程中,创建 启动类 SkywalkingSpringbootApplication:
/**
*  2024-5-20 创建 启动类 SkywalkingSpringbootApplication
*/
package djh.it.skywalking_springboot;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class SkywalkingSpringbootApplication {public static void main(String[] args) {SpringApplication.run(SkywalkingSpringbootApplication.class, args);}}
1.3 在 skywalking_springboot 工程中,创建 Controller 类 MyController.java
/**
*  2024-5-20 创建 Controller 类 MyController.java 
*/
package djh.it.skywalking_springboot.controller;import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class MyController {//正常访问接口@RequestMapping("/sayBoot")public String sayBoot(){return "Hello Boot!";}//异常访问接口@RequestMapping("/exception")public String exception(){int i = 1/0;return "Hello Boot!";}
}
1.4、把工程 skywalking_springboot 打包成 skywalking_springboot.jar 文件

2、复制一份 agent,防止与 tomcat 使用的冲突。并修改配置中的应用名:

## 复制一份 agent 并更名为:agent_boot
cd /usr/local/skywalking/apache-skywalking-apm-bin/
cp -r agent agent_boot## 进入 agent_boot 目录:
cd agent_boot## 修改配置中的应用名
vi agent_boot/config/agent.config# The service name in UI
agent.service_name=${SW_AGENT_NAME:skywalking_boot}:wq # 保存并退出编辑器。

3、将 skywalking_springboot.jar 文件上传到 /usr/local/skywalking 目录下。

4、使用命令启动 spring boot项目:

java -javaagent:/usr/local/skywalking/apache-skywalking-apm-bin/agent_boot/skywalking-agent.jar -Dserver.port=8082 -jar skywalking_springboot.jar &# 参数说明:
-Dserver.port 参数 :用于指定端口号,防止与 tomcat 冲突。
末尾添加 & 后台运行模式启动 Spring Boot 项目。

5、浏览器地址栏输入:http://虚拟机IP:8082/sayBoot

异常接口访问:http://虚拟机IP:8082/exception
访问之后稍等片刻访问 Skywalking 的 UI 页面,查看访问记录。

如:http://172.29.35.23:8082/sayBoot
http://172.29.35.23:8082/exception
http://172.29.35.23:9010/

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

八、RocketBot 的使用

1、Skywalking 的监控 UI 页面成为 RocketBot,可以通过 8080 端口进行访问, 由于8080 端口很容易冲突,可以修改 webapp/webapp.yml 来更改启动端口:

server:# port: 8080  # 默认端口port: 9010 # 修改为 9010

2、打开 RocketBot 默认会出现仪表盘页面:(仪表盘)

1.png

1)仪表盘页面分为两大块:

  • 服务仪表盘,展示服务的调用情况。
  • 数据库仪表盘,展示数据库的响应时间等数据。

在这里插入图片描述

2)选中服务仪表盘,有四个维度的统计数据可以进行查看:

  • 全局,查看全局接口的调用,包括全局响应时长的百分比,最慢的端点,服务的吞吐量等
  • 服务,显示服务的响应时长、 SLA、吞吐量等信息
  • 端点,显示端点的响应时长、 SLA、吞吐量等信息
  • 实例,显示实例的响应时长、 SLA、吞吐量等信息,还可以查看实例的JVM的GC信息、CPU信息、
    内存信息

在这里插入图片描述

3、Skywalking 提供拓扑图,直观的查看服务之间的调用关系:

在这里插入图片描述

4、追踪:

在 Skywalking 中,每一次用户发起一条请求,就可以视为一条追踪数据,每条追踪数据携带有一个 ID
值。追踪数据在追踪页面中可以进行查询:

在这里插入图片描述

5、告警:

Skywalking 中的告警功能相对比较简单,在达到告警阈值之后会生成一条告警记录,在告警页面上进行展示。

在这里插入图片描述

这篇关于# 分布式链路追踪_skywalking_学习(1)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1008719

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

线性代数|机器学习-P36在图中找聚类

文章目录 1. 常见图结构2. 谱聚类 感觉后面几节课的内容跨越太大,需要补充太多的知识点,教授讲得内容跨越较大,一般一节课的内容是书本上的一章节内容,所以看视频比较吃力,需要先预习课本内容后才能够很好的理解教授讲解的知识点。 1. 常见图结构 假设我们有如下图结构: Adjacency Matrix:行和列表示的是节点的位置,A[i,j]表示的第 i 个节点和第 j 个

Node.js学习记录(二)

目录 一、express 1、初识express 2、安装express 3、创建并启动web服务器 4、监听 GET&POST 请求、响应内容给客户端 5、获取URL中携带的查询参数 6、获取URL中动态参数 7、静态资源托管 二、工具nodemon 三、express路由 1、express中路由 2、路由的匹配 3、路由模块化 4、路由模块添加前缀 四、中间件