# 分布式链路追踪_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#到 ElasticSearch 的 bin 目录下
cd  elasticsearch-6.4.0/bin/#后台启动 elasticsearch
./elasticsearch -d# 查看后台运行日志
tail -f logs/elasticsearch

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#解压压缩包
tar -zxvf apache-skywalking-apm-6.4.0.tar.gz

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

cd apache-skywalking-apm-bin
vi 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,防止端口冲突。

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

server:port: 9010

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

# 启动 OAP 
apache-skywalking-apm-bin/bin/oapService.sh# 或者 同时启动 OAP 和 UI :
apache-skywalking-apm-bin/bin/startup.sh

8、查看启动日志

cd apache-skywalking-apm-bin/logs 
tail -f 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

./shutdown.sh
./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 目录下,然

后解压:

tar -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 文件,在文件顶部添加:

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 启动端口:

vi conf/server.xml#修改这一行的端口为 8081
<Connector port="8080" protocol=...

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

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/apache-skywalking-apm-bin/agent/config# 编辑 agent 配置文件
vi 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

./shutdown.sh
./startup.sh

9、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 页面,查看访问记录。

八、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 提供拓扑图,直观的查看服务之间的调用关系:

2.png

4、追踪:

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

5、告警:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/13481.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JS对象超细

目录 一、对象是什么 1.对象声明语法 2.对象有属性和方法组成 二、对象的使用 1.对象的使用 &#xff08;1&#xff09;查 &#xff08;2&#xff09;改 &#xff08;3&#xff09;增 &#xff08;4&#xff09;删&#xff08;了解&#xff09; &#xff08;5&#xf…

算网融合,移动云加速形成新质生产力

文章目录 一.移动云介绍1.政策支持2.产品介绍image-20240522164613917 二.云主机ESC使用1.实名认证2.云主机订购3.登录方式4.控制台登录5.Xshell登录6.简单使用 三.产品使用评价1.真伪测评2.产品优势 一.移动云介绍 1.政策支持 ​ 正所谓家事国事天下事&#xff0c;事事关心&…

访问列表元素

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 在Python中&#xff0c;如果想将列表的内容输出也比较简单&#xff0c;可以直接使用print()函数即可。例如&#xff0c;创建一个名称为untitle的列表…

将PCD点云投影到BEV平面得到图片

前言 点云数据作为一种丰富的三维空间信息表达方式&#xff0c;通常用于自动驾驶、机器人导航和三维建模等领域。然而&#xff0c;点云数据的直观性不如二维图像&#xff0c;这限制了它在一些需要快速视觉反馈的应用场景中的使用。本文将探讨如何将点云数据转换为二维图像&…

医药进出口交易|基于SSM+vue的医药进出口交易系统的设计与实现(源码+数据库+文档)

医药进出口交易系统 目录 基于SSM&#xff0b;vue的医药进出口交易系统的设计与实现 一、前言 二、系统设计 三、系统功能设计 5.1系统登录 5.2管理员功能模块 5.3仓储部门功能模块 5.4业务部门功能模块 5.5供应部门功能模块 5.6财务部功能模块 5.7客户功能模块 …

Linux:IPC - 管道

Linux&#xff1a;IPC - 管道 管道原理匿名管道管道读写机制管道特性命名管道mkfifo指令mkfifo接口 进程间通信的目的&#xff0c;是为了让两个进程看到同一份资源&#xff0c;在Linux中&#xff0c;主要的进程间通信有管道&#xff0c;system V&#xff0c;POSIX&#xff0c;本…

adb卸载系统垃圾应用

//获取包名 输入如下代码&#xff0c;然后在打开和关闭要获取包名的app就会打印出该app的包名 adb shell am monitor //卸载系统应用 -k会保留用户数据&#xff0c;不包含-k则不会保留用户数据 adb shell pm uninstall -k --user 0 包名 &#xff08;包名一般为&#xff1a;c…

OPPO Reno12 系列正式发布,仅2699元起售

5月23日&#xff0c;OPPO发布科技潮品 Reno12 系列&#xff0c;包含 Reno12 与 Reno12 Pro&#xff0c;以超美小直屏设计&#xff0c;以及行业首发的新科技&#xff0c;引领全新潮流方向。 据「TMT星球」了解&#xff0c;首次亮相的全新配色 Reno12 「千禧银」与Reno12 Pro的「…

【华为】将eNSP导入CRT,并解决不能敲Tab问题

华为】将eNSP导入CRT&#xff0c;并解决不能敲Tab问题 eNSP导入CRT打开eNSP&#xff0c;新建一个拓扑右键启动查看串口号关联CRT成功界面 SecureCRT连接华为模拟器ensp,Tab键不能补全问题选择Options&#xff08;选项&#xff09;-- Global Options &#xff08;全局选项&#…

Java NIO 基础

Java NIO 基础 1. NIO 介绍2. NIO 三大组件2.1 Channel2.1.1 常见的 Channel2.1.2 常用方法 2.2 Buffer2.2.1 常见的 Buffer2.2.2 重要属性2.2.3 常用方法 2.3 Selector2.3.1 四种事件类型 1. NIO 介绍 NIO&#xff08;non-blocking io&#xff09;&#xff1a;非阻塞IO&#…

债务重组全攻略:五大益处、四步流程、三大条件、两类费用

一、债务重组的五大益处 近两年&#xff0c;债务重组业务在市场上崭露头角&#xff0c;许多国企、事业单位以及互联网巨头的员工利用此机会&#xff0c;通过债务重组获取了更多的投资资金。这一趋势不仅帮助众多客户优化了债务结构&#xff0c;还实现了以下几个显著优势&#…

网络空间资产梳理

网络空间资产梳理 网络安全建设的实质是对风险的管理&#xff0c;古人云&#xff1a;知己知彼百战不殆。所谓知己&#xff0c;就是要了解自己的资产以及这些资产的脆弱性&#xff0c;知彼就是了解外部威胁及威胁所使用的手段。要做到知己&#xff0c;首先就要对自身的资产进行梳…

Java 多线程抢红包

问题需求 一个人在群里发了1个100元的红包&#xff0c;被分成了8个&#xff0c;群里有10个人一起来抢红包&#xff0c;有抢到的金额随机分配。 红包功能需要满足哪些具体规则呢? 1、被分的人数抢到的金额之和要等于红包金额&#xff0c;不能多也不能少。 2、每个人至少抢到1元…

海山数据库(He3DB)代理ProxySQL使用详解:(一)架构说明与安装

一、ProxySQL介绍 1.1 简介 业界比较知名的MySQL代理&#xff0c;由ProxySQL LLC公司开发并提供专业的服务支持&#xff0c;基于GPLv3开源协议进行发布,大部分配置项可动态变更。后端的MySQL实例可根据用途配置到不同的hostgroup中&#xff0c;由ProxySQL基于7层网络协议,将来…

linux ping https是否连接

在Linux系统中&#xff0c;ping通常用于测试网络上另一台主机的可达性。它使用的是ICMP协议&#xff0c;这是一种设计用来处理网络通信问题的协议。HTTPS则是一种安全的网络传输协议&#xff0c;它使用SSL/TLS加密。 如果你想要测试到某个HTTPS服务器的连接&#xff0c;你可以使…

Spring Cloud Gateway 网关

一. 什么是网关&#xff08;Gateway&#xff09; 网关就是一个网络连接到另一个网络的关口。 在同一个项目或某一层级中&#xff0c;存在相似或重复的东西&#xff0c;我们就可以将这些相似重复的内容统一提取出来&#xff0c;向前或向后抽象成单独的一层。这个抽象的过程就是…

【Linux取经路】进程通信——共享内存

文章目录 一、直接原理1.1 共享内存的的申请1.2 共享内存的释放 二、代码演示2.1 shmget2.1.1 详谈key——ftok 2.2 创建共享内存样例代码2.3 获取共享内存——进一步封装2.4 共享内存挂接——shmat2.5 共享内存去关联——shmdt2.6 释放共享内存——shmctl2.7 开始通信2.7.1 pr…

Git学习和使用指南详细篇

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

真香!Github上的这个项目,可以帮你节省打印费。

众所周知&#xff0c;我们在打印文档时&#xff0c;往往在选择黑白还是彩色打印上纠结。 全彩的文档也还好&#xff0c;最害怕的就是那种只有一部分是彩色页面&#xff0c;其他都是黑白页面的文档。 遇到这种文档&#xff0c;打印店老板好心的话会帮你分开。如果黑心一点的话…

深入了解 RabbitMQ:构建可靠消息传递系统的关键

前言 在现代分布式应用程序开发中&#xff0c;构建可靠的消息传递系统至关重要。RabbitMQ 作为一款强大的消息代理软件&#xff0c;为开发人员提供了丰富的工具和解决方案。本文将深入探讨 RabbitMQ 的核心概念、工作原理以及其在实际应用中的应用场景。 一、什么是 RabbitMQ…