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

news2024/7/2 4:05:39

分布式链路追踪_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 中的告警功能相对比较简单,在达到告警阈值之后会生成一条告警记录,在告警页面上进行展示。

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

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

相关文章

基于Django的美团药品数据分析与可视化系统,有多用户功能,可增删改查数据

背景 随着电子商务和健康产业的迅速发展&#xff0c;药品行业数据的分析和可视化变得愈发重要。基于Django的美团药品数据分析与可视化系统的研究背景凸显了对药品数据的深入挖掘和分析的需求。该系统不仅具备多用户功能&#xff0c;允许不同角色的用户进行数据管理和分析&…

【3DMAX教程插件】3DMAX泰森破碎插件使用方法

3DMAX泰森破碎插件&#xff0c;一键破碎物体&#xff0c;在保留体积的同时破碎网格对象。 【适用版本】 3dMax2009及更高版本 【安装方法】 3DMAX泰森破碎插件无需安装&#xff0c;使用时直接拖动插件脚本文件到3dMax视口中打开即可&#xff01; 【主要功能】 v1.0&#…

气膜建筑的工作原理与优势解析—轻空间

近年来&#xff0c;气膜建筑凭借其独特的结构设计和诸多优点&#xff0c;迅速成为建筑领域的热门选择。本文将详细介绍气膜建筑的工作原理、机械系统、智能控制、索网控制和空气净化等方面&#xff0c;为您提供全面了解气膜建筑的基础知识。 气膜建筑的工作原理 气膜建筑是一种…

翻译《The Old New Thing》- Which windows appear in the Alt+Tab list?

Which windows appear in the AltTab list? - The Old New Thing (microsoft.com)https://devblogs.microsoft.com/oldnewthing/20071008-00/?p24863 Raymond Chen 2007年10月08日 有读者Phil Quirk询问&#xff0c;AltTab切换列表中显示哪些窗口的规则是什么。 规则其实相当…

WT2003HX-16S新能源电动汽车低速报警器方案

一&#xff1a;低速报警器应用场景&#xff1a; 为在工业化发展中对外实现弯道超车&#xff0c;其中新能源汽车行业就为国家战略布局方向之一&#xff0c;前景比较广阔。随之配套的各类警报系统方案也蓬勃发展&#xff0c;其中低速报警器&#xff08;AVAS&#xff09;作为关键安…

数字孪生时代来临,实景三维千亿级别市场爆发在即

想象一下&#xff0c;当我们将整座城市搬到虚拟世界&#xff0c;点点鼠标就能实时掌握城市运行情况&#xff0c;可以实现数字空间与现实空间的实时互联互通、在线治理&#xff0c;是不是听起来像科幻电影一样不可思议&#xff1f; 现在&#xff0c;通过运用遥感测绘、大数据、云…

前端项目使用docker编译发版和gitlab-cicd发版方式

项目目录 app/ ├── container/ │ ├── init.sh │ ├── nginx.conf.template ├── src/ ├── .gitlab-ci.yml └── deploy.sh └── Dockerfile └── Makefilecontainer目录是放nginx的配置文件&#xff0c;给nginx镜像使用 .gitlab-ci.yml和Makefile是c…

JetLinks物联网平台初步使用——TCP接入

基于上一篇&#xff0c;完整的搭建了前后端整个系统&#xff0c;可以在windows 7完美的运行使用。 目录 1、创建网络组件 2、创建协议管理 3、创建网关 ​4、创建产品 ​5、创建设备 6、模拟对接 1、创建网络组件 进入平台后&#xff08;用户名密码都是admin&#xff…

【代码随想录】【算法训练营】【第17天】 [110]平衡二叉树 [257]二叉树的所有路径 [404]左叶子之和

前言 思路及算法思维&#xff0c;指路 代码随想录。 题目来自 LeetCode。 day 17&#xff0c;又是一个令人愉快的周五~ 题目详情 [110] 平衡二叉树 题目描述 110 平衡二叉树 解题思路 前提&#xff1a;平衡二叉树&#xff1a;左右子树高度差不超过1, 思路&#xff1a;…

高性能推理框架漫谈

传统模型分布式推理框架 Tensorflow servingPytorch ServingTriton Server 大语言模型的推理框架 其中&#xff0c; VLLM 后端接入了Ray 框架&#xff0c; 作为调度请求的分发处理&#xff1b;除此之外&#xff0c;还包括Nvidia 最新推出的TensorRT-LLM&#xff0c; 增加了对…

开放式耳机怎么选择!教你几招!2024开放式蓝牙耳机推荐

在面对市场上琳琅满目的开放式耳机时&#xff0c;许多用户可能会感到难以抉择。作为一名开放式耳机的爱好者&#xff0c;我根据自己的实际使用体验&#xff0c;整理了一些我认为值得推荐的开放式耳机&#xff0c;希望能为正在寻找合适耳机的朋友们提供一些参考和帮助。我将为大…

【真实项目中收获的提升】- 前后端联调

场景 小型项目前后端联调&#xff0c;不需要部署到sit或uat环境下。 解决方法 后端部署frp服务 下载frp软件 配置frpc.ini文件&#xff0c;先把文件设置可编辑(可同时配置多个 例如下面的chz 上面打码的是frp服务器地址) 然后起start.bat 其实就是执行frpc -c frpc.ini命令…

前端 CSS 经典:元素倒影

前言&#xff1a;好看的元素倒影&#xff0c;可以通过-webkit-box-reflect 实现。但有兼容问题&#xff0c;必须是 webkit 内核的浏览器&#xff0c;不然没效果。但是好看啊。 效果图&#xff1a; 代码实现&#xff1a; <!DOCTYPE html> <html lang"en"&g…

使用第三方的PyCharm开发工具

目录 PyCharm下载 PyCharm安装 运行PyCharm 创建工程目录 编写“hello world”程序 在同一个工程下创建多个程序文件 运行程序的多种方法 保存程序 关闭程序或工程 删除程序 打开最近的工程 调试断点 熟悉PyCharm开发环境 设置Python解析器 输出彩色控制台文字及…

【C语言】实现贪吃蛇--项目实践(超详细)

前言&#xff1a; 贪吃蛇游戏大家都玩过吧&#xff1f;这次我们要用C语言来亲手制作一个&#xff01;这个项目不仅能让我们复习C语言的知识&#xff0c;还能了解游戏是怎么一步步做出来的。我们会一起完成蛇的移动、食物的生成&#xff0c;还有碰撞检测等有趣的部分。准备好了…

代码随想录——找树左下角的值(Leetcode513)

题目链接 层序遍历 思路&#xff1a;使用层序遍历&#xff0c;记录每一行 i 0 的元素&#xff0c;就可以找到树左下角的值 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}*…

el-table 组件实现 “合并单元格 + N行数据小计” 功能

目录 需求 - 要实现的效果初始代码代码升级&#xff08;可供多个表格使用&#xff09;CommonTable.vue 子组件 使用子组件1 - 父组件 - 图1~图3使用效果展示 使用子组件2 - 父组件 - 图4使用效果展示 注意【代码优化 - 解决bug】 需求 - 要实现的效果 父组件中 info 数据示例 …

【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…

海山数据库(He3DB)从方法到实践,构建以场景为中心的体验管理体系

编者按&#xff1a;体验优化的过程中设计师经常会遇到几个阶段&#xff0c;发现问题、定义问题、优化问题、查看反馈&#xff0c;但在产品快速迭代的过程中&#xff0c;体验的问题经常被归类到“不紧急”需求中&#xff0c;并逐步转为长尾问题&#xff0c;这些不被重视的问题聚…

AI在线免费音乐生成工具:suno、udio、stableaudio

文生音乐 1、suno https://app.suno.ai/ 2、udio https://www.udio.com/ 3、stableaudio https://stableaudio.com/live https://www.stableaudio.com/?utm_campaignstableaudio_promo&utm_mediumcta_button&utm_sourcestability_ai 4、其他MusicGen https://…