# 分布式链路追踪_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 day
    otherMetricsDataTTL: ${SW_STORAGE_ES_OTHER_METRIC_DATA_TTL:45} # Unit is day
    monthMetricsDataTTL: ${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.html
    bulkActions: ${SW_STORAGE_ES_BULK_ACTIONS:1000} # Execute the bulk every 1000 requests
    flushInterval: ${SW_STORAGE_ES_FLUSH_INTERVAL:10} # flush the bulk every 10 seconds whatever the number of requests
    concurrentRequests: ${SW_STORAGE_ES_CONCURRENT_REQUESTS:2} # the number of concurrent requests
    resultWindowMaxSize: ${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
 +-- activations
    apm-toolkit-log4j-1.x-activation.jar
    apm-toolkit-log4j-2.x-activation.jar
    apm-toolkit-logback-1.x-activation.jar
    ...
 //配置文件
 +-- config
    agent.config
 //组件的所有插件
 +-- plugins
    apm-dubbo-plugin.jar
    apm-feign-default-http-9.x.jar
    apm-httpClient-4.x-plugin.jar
    .....
 //可选插件
 +-- optional-plugins
    apm-gson-2.x-plugin.jar
    .....
 +-- bootstrap-plugins
    jdk-http-plugin.jar
	.....
 +-- logs
 skywalking-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")
    @ResponseBody
    public 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/beans
			http://www.springframework.org/schema/beans/spring-beans.xsd
			http://www.springframework.org/schema/mvc
			http://www.springframework.org/schema/mvc/spring-mvc.xsd
			http://www.springframework.org/schema/context
			http://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 中的告警功能相对比较简单,在达到告警阈值之后会生成一条告警记录,在告警页面上进行展示。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【leetcode】排序算法总结

第 11 章 排序 - Hello 算法动画图解、一键运行的数据结构与算法教程https://www.hello-algo.com/chapter_sorting/ 堆排序 #include <iostream> #include <vector>using namespace std;/* 堆的长度为 len &#xff0c;从节点 i 开始&#xff0c;从顶至底堆化 *…

【vue部署】Apache部署vue项目

Apache部署vue项目 Apache 下载安装(windows)1. 下载2. 安装3. 启动服务 vue 部署配置1. 基础配置2. 解决页面刷新问题 Apache 下载安装(windows) 1. 下载 Apache 2.4.59 下载地址&#xff1a;httpd-2.4.59-240404-win64-VS17.zip Visual C Redistributable for Visual Studi…

Python解析网页-XPath

目录 1、什么是XPath 2、安装配置 3、XPath常用规则 4、快速入门 5、浏览器XPath工具 1.什么是XPath XPath&#xff08;XML Path Language&#xff09;是一种用于在XML文档中定位和选择节点的语言。 它是W3C&#xff08;World Wide Web Consortium&#xff09;定义的一种标…

Springboot+Element_分页+显示+搜索+完整版

目录 显示效果 新建项目时选择的依赖 文件的目录结构 一、准备工作 1、配置文件 2、pom增加PageHelper 3、在idea中建立数据库连接&#xff0c; 4、新建peom表&#xff08;如已建好&#xff0c;则忽略本条&#xff09; 二、新建前端页面index.html&#xff08;未连后端…

Redis --学习笔记

Redis简介 一个基于内存的key-value结构数据库。Redis 是互联网技术领域使用最为广泛的存储中间件 特点&#xff1a; 基于内存存储&#xff0c;读写性能高 适合存储热点数据&#xff08;热点商品、资讯、新闻&#xff09; 企业应用广泛 Redis默认端口号为6379 Redis是用…

Web安全:企业如何抵御常见的网络攻击?

近年来随着人类社会向数字世界的加速发展&#xff0c;勒索软件攻击事件在全球范围内呈现快速上升的态势&#xff0c;几乎所有国家的政府、金融、教育、医疗、制造、交通、能源等行业均受到影响&#xff0c;可以说有互联网的地方就可能发生勒索软件攻击事件。 Web安全是一个大课…

【调试笔记-20240520-Linux-在 WSL2 / Ubuntu 20.04 中编译 QEMU 可运行的 OVMF 固件】

调试笔记-系列文章目录 调试笔记-20240520-Linux-在 WSL2 / Ubuntu 20.04 中编译 QEMU 可运行的 OVMF 固件 文章目录 调试笔记-系列文章目录调试笔记-20240520-Linux-在 WSL2 / Ubuntu 20.04 中编译 QEMU 可运行的 OVMF 固件 前言一、调试环境操作系统&#xff1a;Windows 10 …

科技赋能,拓宽生活边界

在当今多元化与快速变化的社会中&#xff0c;社会适应能力成为了衡量个人能否顺利融入社会、享受生活品质的关键指标。对于盲人朋友而言&#xff0c;这一能力尤为重要&#xff0c;它不仅关乎日常生活的便利&#xff0c;更影响到心理的健康与社会参与度。在此背景下&#xff0c;…

ERP与MES系统中的产品装配结构与序列号管理

在企业资源计划&#xff08;ERP&#xff09;系统中&#xff0c;产品不仅仅是物料的简单集合&#xff0c;它们还扮演着转配件的角色。通过物料清单&#xff08;BOM&#xff09;的形式&#xff0c;ERP系统能够详细表达出产品的装配结构。例如&#xff0c;在个人电脑&#xff08;P…

颠覆传统编码,零基础也能飞的工具!

YDUIbuilder以其低代码的设计理念&#xff0c;通过简单的拖拽操作&#xff0c;即使是编程新手也能快速构建出专业的用户界面。这不再是一个遥不可及的梦想&#xff0c;而是一个触手可及的现实。 组件化世界&#xff0c;创意无限&#xff1a;构建梦想中的界面 在YDUIbuilder的组…

电脑刚删除的东西怎么恢复?学会这5招,轻松恢复!

“我刚刚一不小心把电脑里的一个重要文件删除了&#xff0c;现在不知道应该怎么操作才能恢复这个文件&#xff0c;有没有可以分享一下恢复方法的朋友呀&#xff1f;非常感谢&#xff01;” 在日常使用电脑的过程中&#xff0c;误删文件或文件夹的情况时有发生。这些被删除的文件…

大厂程序员离职,开发一个盲盒小程序2万,一周开发完!

大家好&#xff0c;我是程序员小孟&#xff01; 前面接了一个盲盒的小程序&#xff0c;主要的还是商城&#xff0c;盲盒的话只是其中的有一个活动。 现在的年轻人是真的会玩&#xff0c;越来越新的东西出来&#xff0c;越来越好玩的东西流行。 就像最近很火的地摊盲盒。 讲…

快速开发 Chrome插件

什么是 Chrome 插件 Chrome 插件程序是一种用于增强 Google Chrome 浏览器功能的小型软件应用程序。它们可以帮助用户自定义浏览体验、添加新功能、集成外部服务以及自动化任务等。扩展程序使用 HTML、CSS 和 JavaScript 编写&#xff0c;利用 Chrome 提供的 API 来与浏览器及…

昔日辉煌不再,PHP老矣,尚能饭否?

导语 | 近期 TIOBE 最新指数显示&#xff0c;PHP 的流行度降至了历史最低&#xff0c;排在第 17 名&#xff0c;同时&#xff0c;在年度 Stack Overflow 开发者调查报告中&#xff0c;PHP 在开发者中的受欢迎程度已经从之前的约 30% 萎缩至现在的 18%。“PHP 是世界上最好的语言…

JS Navigator.sendBeacon 可靠的、异步地向服务器发送数据

JS Navigator.sendBeacon 可靠的、异步地向服务器发送数据 前言 我们在上一篇页面访问&页面关闭数据上报的文章中使用了 sendBeacon 方法用来发送数据&#xff0c;上篇文章是简单使用&#xff0c;那本篇文章我们就详细了解下这个东西。 一、Navigator.sendBeacon 是什么…

算法2:滑动窗口(上)

文章目录 长度最小子数组无重复字符的最长子串[最大连续 1 的个数III](https://leetcode.cn/problems/max-consecutive-ones-iii/description/)将x减到0的最小操作数 长度最小子数组 class Solution { public:int minSubArrayLen(int target, vector<int>& nums) {in…

SAP---成本中心采购跟消耗性采购的区别

1.常规库存采购业务的说明&#xff1a; 1.从业务层面分析&#xff0c;企业的常规库存物料采购是&#xff1a; 采购部门下采购订单后&#xff0c;供应商送货&#xff0c;当货物到厂后&#xff0c;由库管员执行收货操作&#xff0c;先将货物收到仓库中&#xff0c;再由各个需求…

APP广告变现,开启你的APP盈利新纪元

随着科技的飞速发展&#xff0c;智能手机已经成为了我们生活中不可或缺的一部分。而在这个数字化时代&#xff0c;APP应用更是如雨后春笋般层出不穷&#xff0c;为我们的生活带来了极大的便利。然而&#xff0c;对于APP开发者来说&#xff0c;如何在激烈的市场竞争中脱颖而出&a…

智能的PHP开发工具PhpStorm v2024.1全新发布——支持PHPUnit 11.0

PhpStorm是一个轻量级且便捷的PHP IDE&#xff0c;其旨在提高用户效率&#xff0c;可深刻理解用户的编码&#xff0c;提供智能代码补全&#xff0c;快速导航以及即时错误检查。可随时帮助用户对其编码进行调整&#xff0c;运行单元测试或者提供可视化debug功能。 立即获取PhpS…

Docker Portainer使用

Portainer是什么 Docker Portainer是一个轻量级的 Web UI 管理界面,可以用来管理Docker环境。它提供了一个直观的控制台,用户可以通过它来管理Docker主机、容器、网络、卷等Docker资源。 Portainer的主要功能和特点包括: 容器管理:可以查看、启动、停止、删除容器,以及查看容器…