Spring Cloud Alibaba全家桶——微服务链路追踪SkyWalking

news2025/4/9 12:08:32

前言

在这里插入图片描述

本文小新为大家带来 微服务链路追踪SkyWalking 相关知识,具体内容包括SkyWalking简介SkyWalking环境搭建部署SkyWalking接入微服务SkyWalking持久化跟踪数据自定义SkyWalking链路追踪SkyWalking集成日志框架SkyWalking告警功能SkyWalking高可用SkyWalking UI介绍等进行详尽介绍~

不积跬步,无以至千里;不积小流,无以成江海。每天进步一点点,在成为强者的路上,小新与大家共同成长!

📌博主主页:小新要变强 的主页
👉Java全栈学习路线可参考:【Java全栈学习路线】最全的Java学习路线及知识清单,Java自学方向指引,内含最全Java全栈学习技术清单~
👉算法刷题路线可参考:算法刷题路线总结与相关资料分享,内含最详尽的算法刷题路线指南及相关资料分享~
👉Java微服务开源项目可参考:企业级Java微服务开源项目(开源框架,用于学习、毕设、公司项目、私活等,减少开发工作,让您只关注业务!)

↩️本文上接:Spring Cloud Alibaba全家桶(十)——微服务网关Gateway组件


目录

微服务链路追踪SkyWalking

  • 前言
  • 目录
  • 一、SkyWalking简介
    • 1️⃣链路追踪介绍
    • 2️⃣SkyWalking是什么
    • 3️⃣链路追踪框架对比
    • 4️⃣SkyWalking功能特性
  • 二、SkyWalking环境搭建部署
    • 1️⃣下载 SkyWalking
    • 2️⃣搭建SkyWalking OAP 服务
    • 3️⃣SkyWalking中三个概念
  • 三、SkyWalking接入微服务
    • 1️⃣linux环境——通过jar包方式接入
    • 2️⃣Windows环境——在IDEA中使用SkyWalking
    • 3️⃣SkyWalking跨多个微服务跟踪
  • 四、SkyWalking持久化跟踪数据
  • 五、自定义SkyWalking链路追踪
    • 1️⃣@Trace将方法加入追踪链路
    • 2️⃣加入@Tags或@Tag
  • 六、SkyWalking集成日志框架
  • 七、SkyWalking告警功能
    • 1️⃣告警规则
    • 2️⃣Webhook(网络钩子)
    • 3️⃣邮件告警功能实践
  • 八、SkyWalking高可用
  • 九、SkyWalking UI介绍
    • 1️⃣菜单栏
    • 2️⃣控制栏
    • 3️⃣展示栏
    • 4️⃣拓扑图
    • 5️⃣追踪
    • 6️⃣性能剖析
    • 8️⃣告警
  • 后记

在这里插入图片描述

一、SkyWalking简介

1️⃣链路追踪介绍

对于一个大型的几十个、几百个微服务构成的微服务架构系统,通常会遇到下面一些问题,比如:

  • (1)如何串联整个调用链路,快速定位问题?
  • (2)如何缕清各个微服务之间的依赖关系?
  • (3)如何进行各个微服务接口的性能分折?
  • (4)如何跟踪整个业务流程的调用处理顺序?

在这里插入图片描述

2️⃣SkyWalking是什么

SkyWalking是一个国产开源框架,2015年由吴晟开源 , 2017年加入Apache孵化器。skywalking是分布式系统的应用程序性能监视工具,专为微服务、云原生架构和基于容器(Docker、K8s、Mesos)架构而设计。它是一款优秀的APM(Application Performance Management)工具,包括了分布式追踪、性能指标分析、应用和服务依赖分析等。

官网地址:http://skywalking.apache.org/

下载地址:http://skywalking.apache.org/downloads/

Github地址:https://github.com/apache/skywalking

文档地址: https://skywalking.apache.org/docs/main/v8.4.0/readme/

中文文档: https://skyapm.github.io/document-cn-translation-of-skywalking/

3️⃣链路追踪框架对比

  • (1)Zipkin是Twitter开源的调用链分析工具,目前基于springcloud sleuth得到了广泛的使用,特点是轻量,使用部署简单。
  • (2)Pinpoint是韩国人开源的基于字节码注入的调用链分析,以及应用监控分析工具。特点是支持多种插件,UI功能强大,接入端无
    代码侵入。
  • (3)SkyWalking是本土开源的基于字节码注入的调用链分析,以及应用监控分析工具。特点是支持多种插件,UI功能较强,接入端
    无代码侵入。目前已加入Apache孵化器。
  • (4)CAT是大众点评开源的基于编码和配置的调用链分析,应用监控分析,日志采集,监控报警等一系列的监控平台工具。

在这里插入图片描述

模拟了三种并发用户:500,750,1000。使用jmeter测试,每个线程发送30个请求,设置思考时间为10ms。使用的采样率为1,即100%,这边与生产可能有差别。pinpoint默认的采样率为20,即50%,通过设置agent的配置文件改为100%。zipkin默认也是1。组合起来,一共有12种。下面看下汇总表:

在这里插入图片描述

从上表可以看出,在三种链路监控组件中,skywalking的探针对吞吐量的影响最小,zipkin的吞吐量居中。pinpoint的探针对吞吐量的影响较为明显,在500并发用户时,测试服务的吞吐量从1385降低到774,影响很大。然后再看下CPU和memory的影响,在内部服务器进行的压测,对CPU和memory的影响都差不多在10%之内。

4️⃣SkyWalking功能特性

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

二、SkyWalking环境搭建部署

在这里插入图片描述

  • skywalking agent和业务系统绑定在一起,负责收集各种监控数据;
  • skywalking oapservice是负责处理监控数据的,比如接受skywalking agent的监控数据,并存储在数据库中;
  • 接受skywalking webapp的前端请求,从数据库查询数据,并返回数据给前端。skywalking oapservice通常以集群的形式存在;
  • skywalking webapp,前端界面,用于展示数据;
  • 用于存储监控数据的数据库,比如mysql、elasticsearch等。

1️⃣下载 SkyWalking

下载地址: http://skywalking.apache.org/downloads/

在这里插入图片描述

目录结构:

在这里插入图片描述

2️⃣搭建SkyWalking OAP 服务

🍀启动脚本bin/startup.sh

在这里插入图片描述

🍀日志信息存储在logs目录

在这里插入图片描述

🍀启动成功后会启动两个服务,一个是skywalking-oap-server,一个是skywalking-web-ui : 8868
skywalking-oap-server服务启动后会暴露11800 和 12800 两个端口,分别为收集监控数据的端口11800和接受前端请求的端口12800,修改端口可以修改config/applicaiton.yml

在这里插入图片描述

🍀skywalking-web-ui服务会占用 8080 端口, 修改端口可以修改webapp/webapp.yml

在这里插入图片描述
server.port:SkyWalking UI服务端口,默认是8080;collector.ribbon.listOfServers:SkyWalking OAP服务地址数组,SkyWalking UI界面的数据是通过请求SkyWalking OAP服务来获得;

🍀访问:http://192.168.3.100:8080/

在这里插入图片描述

页面的右下角可以中英文切换,可以切换选择要展示的时间区间的跟踪数据。

3️⃣SkyWalking中三个概念

服务(Service) : 表示对请求提供相同行为的一系列或一组工作负载,在使用Agent时,可以定义服务的名字;

服务实例(Service Instance) : 上述的一组工作负载中的每一个工作负载称为一个实例, 一个服务实例实际就是操作系统上的一个真实进程;

端点(Endpoint) : 对于特定服务所接收的请求路径, 如HTTP的URI路径和gRPC服务的类名 + 方法签名。

在这里插入图片描述

三、SkyWalking接入微服务

1️⃣linux环境——通过jar包方式接入

准备一个springboot程序,打成可执行jar包,写一个shell脚本,在启动项目的Shell脚本上,通过 -javaagent 参数进行配置SkyWalking Agent来跟踪微服务。

🍀startup.sh脚本启动

#!/bin/sh
# SkyWalking Agent配置
export SW_AGENT_NAME=springboot‐skywalking‐demo #Agent名字,一般使用`spring.application.name`
export SW_AGENT_COLLECTOR_BACKEND_SERVICES=127.0.0.1:11800 #配置 Collector 地址。
export SW_AGENT_SPAN_LIMIT=2000 #配置链路的最大Span数量,默认为 300。
export JAVA_AGENT=‐javaagent:/usr/local/soft/apache‐skywalking‐apm‐bin‐es7/agent/skywalking‐agent.jar
java $JAVA_AGENT ‐jar springboot‐skywalking‐demo‐0.0.1‐SNAPSHOT.jar #jar启动

启动日志:

在这里插入图片描述
🍀以上启动等同于:

java ‐javaagent:/usr/local/soft/apache‐skywalking‐apm‐bin‐es7/agent/skywalking‐agent.jar
‐DSW_AGENT_COLLECTOR_BACKEND_SERVICES=127.0.0.1:11800
‐DSW_AGENT_NAME=springboot‐skywalking‐demo ‐jar springboot‐skywalking‐demo‐0.0.1‐SNAPSHOT.jar

参数名对应agent/config/agent.config配置文件中的属性。

属性对应的源码:org.apache.skywalking.apm.agent.core.conf.Config.java。

# The service name in UI
agent.service_name=${SW_AGENT_NAME:Your_ApplicationName}
# Backend service addresses.
collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:127.0.0.1:11800}

我们也可以使用skywalking.+配置文件中的配置名作为系统配置项来进行覆盖。 javaagent参数配置方式优先级更高。

🍀测试: 访问你的微服务

在这里插入图片描述

2️⃣Windows环境——在IDEA中使用SkyWalking

在运行的程序配置jvm参数,如下图所示:

在这里插入图片描述

# skywalking‐agent.jar的本地磁盘的路径
‐javaagent:D:\apache\apache‐skywalking‐apm‐es7‐8.4.0\apache‐skywalking‐apm‐bin‐es7\agent\skywalking‐agent.jar
# 在skywalking上显示的服务名
‐DSW_AGENT_NAME=springboot‐skywalking‐demo
# skywalking的collector服务的IP及端口
‐DSW_AGENT_COLLECTOR_BACKEND_SERVICES=192.168.3.100:11800

-DSW_AGENT_COLLECTOR_BACKEND_SERVICES 可以指定远程地址, 但是-javaagent必须绑定你本机物理路径的skywalkingagent.jar。

3️⃣SkyWalking跨多个微服务跟踪

Skywalking跨多个微服务跟踪,只需要每个微服务启动时添加javaagent参数即可。

测试:
启动微服务mall-gateway,mall-order,mall-user ,配置skywalking的jvm参数,
访问http://localhost:8888/user/findOrderByUserId/1

在这里插入图片描述

在这里插入图片描述
注意: 此处存在bug,跟踪链路不显示gateway

拷贝agent/optional-plugins目录下的gateway插件到agent/plugins目录。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

四、SkyWalking持久化跟踪数据

默认使用的H2数据库存储,config/application.yml配置文件如下:

在这里插入图片描述

基于mysql持久化:

🍀(1)修改config目录下的application.yml,使用mysql作为持久化存储的仓库

在这里插入图片描述

🍀(2) 修改mysql连接配置

在这里插入图片描述

storage:
  #选择使用mysql 默认使用h2,不会持久化,重启skyWalking之前的数据会丢失
  selector: ${SW_STORAGE:mysql}
  #使用mysql作为持久化存储的仓库
  mysql:
    properties:
      #数据库连接地址
      jdbcUrl: ${SW_JDBC_URL:"jdbc:mysql://1ocalhost:3306/swtest"}
      #用户名
      dataSource.user: ${SW_DATA_SOURCE_USER:root}
      #密码
      dataSource.password: ${SW_DATA_SOURCE_PASSWORD:root}

注意: 需要添加mysql数据驱动包,因为在lib目录下是没有mysql数据驱动包的,所以修改完配置启动是会报错,启动失败的。

在这里插入图片描述

🍀(3) 添加mysql数据驱动包到oap-libs目录下

在这里插入图片描述

🍀(4)启动Skywalking

在这里插入图片描述

查看swtest数据库,可以看到生成了很多表:

在这里插入图片描述

这说明启动成功了,打开配置对应的地址http://192.168.3.100:8080/,j就可以看到skywalking的web界面。

在这里插入图片描述

🍀(5)测试:重启skywalking,验证跟踪数据会不会丢失

五、自定义SkyWalking链路追踪

如果我们希望对项目中的业务方法,实现链路追踪,方便我们排查问题,可以使用如下的代码引入依赖:

<!‐‐ SkyWalking 工具类 ‐‐>
<dependency>
  <groupId>org.apache.skywalking</groupId>
  <artifactId>apm‐toolkit‐trace</artifactId>
  <version>8.4.0</version>
</dependency>

1️⃣@Trace将方法加入追踪链路

如果一个业务方法想在ui界面的跟踪链路上显示出来,只需要在业务方法上加上@Trace注解即可:

在这里插入图片描述

测试:

在这里插入图片描述

2️⃣加入@Tags或@Tag

我们还可以为追踪链路增加其他额外的信息,比如记录参数和返回信息。实现方式:在方法上增加@Tag或者@Tags。

@Tag 注解中 key = 方法名 ; value = returnedObj 返回值 arg[0] 参数。

@Trace
@Tag(key = "list", value = "returnedObj")
public List<User> list(){
  return userMapper.list();
}

@Trace
@Tags({@Tag(key = "param", value = "arg[0]"),
@Tag(key = "user", value = "returnedObj")})
public User getById(Integer id){
  return userMapper.getById(id);
}

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

性能分析:

skywalking的性能分析,在根据服务名称、端点名称,以及相应的规则建立了任务列表后,在调用了此任务列表的端点后。skywalking会自动记录,剖析当前端口,生成剖析结果,具体流程如图:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

六、SkyWalking集成日志框架

🍀(1)引入依赖

<!‐‐ apm‐toolkit‐logback‐1.x ‐‐>
<dependency>
  <groupId>org.apache.skywalking</groupId>
  <artifactId>apm‐toolkit‐logback‐1.x</artifactId>
  <version>8.5.0</version>
</dependency>

🍀(2)添加logback-spring.xml文件,并配置 %tid 占位符

<?xml version="1.0" encoding="UTF‐8"?>
<configuration>
  <!‐‐ 引入 Spring Boot 默认的 logback XML 配置文件 ‐‐>
  <include resource="org/springframework/boot/logging/logback/defaults.xml"/>
  
  <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
    <!‐‐ 日志的格式化 ‐‐>
    <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
      <layout  class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
        <Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
      </layout>
    </encoder>
  </appender>

  <!‐‐ 设置 Appender ‐‐>
  <root level="INFO">
    <appender‐ref ref="console"/>
  </root>

</configuration>

🍀(3)测试

在这里插入图片描述

🍀(4)Skywalking通过grpc上报日志 (需要v8.4.0+)

gRPC报告程序可以将收集到的日志转发到SkyWalking OAP服务器上。

logback-spring.xml中添加:

<!‐‐ v8.4.0提供 ‐‐>
<appender name="grpc‐log" class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.log.GRPCLogClientAppender">
  <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
    <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.mdc.TraceIdMDCPatternLogbackLayout">
      <Pattern>%d{yyyy‐MM‐dd HH:mm:ss.SSS} [%X{tid}] [%thread] %‐5level %logger{36} ‐%msg%n</Pattern>
    </layout>
  </encoder>
</appender>

<root level="info">
  <appender‐ref ref="grpc‐log" />
</root>

在这里插入图片描述

打开agent/config/agent.config配置文件,添加如下配置信息:

plugin.toolkit.log.grpc.reporter.server_host=${SW_GRPC_LOG_SERVER_HOST:192.168.3.100}
plugin.toolkit.log.grpc.reporter.server_port=${SW_GRPC_LOG_SERVER_PORT:11800}
plugin.toolkit.log.grpc.reporter.max_message_size=${SW_GRPC_LOG_MAX_MESSAGE_SIZE:10485760}
plugin.toolkit.log.grpc.reporter.upstream_timeout=${SW_GRPC_LOG_GRPC_UPSTREAM_TIMEOUT:30}

以上配置是默认配置信息,agent与oap在本地的可以不配。

agent配置信息:

配置名解释默认值
plugin.toolkit.log.transmit_formatted是否以格式化或未格式化的格式传输记录的数据true
plugin.toolkit.log.grpc.reporter.server_host指定要向其报告日志数据的grpc服务器的主机127.0.0.1
plugin.toolkit.log.grpc.reporter.server_port指定要向其报告日志数据的grpc服务器的端口11800
plugin.toolkit.log.grpc.reporter.max_message_size指定grpc客户端要报告的日志数据的最大大小10485760
plugin.toolkit.log.grpc.reporter.upstream_timeout客户端向上游发送数据时将超时多长时间。单位是秒30

Skywalking UI效果:

在这里插入图片描述

访问:https://github.com/apache/skywalking-rocketbot-ui/pull/428

在这里插入图片描述

七、SkyWalking告警功能

SkyWalking 告警功能是在6.x版本新增的,其核心由一组规则驱动,这些规则定义在config/alarm-settings.yml文件中。

告警规则的定义分为两部分:

  • (1)告警规则: 它们定义了应该如何触发度量警报,应该考虑什么条件。
  • (2)Webhook(网络钩子): 定义当警告触发时,哪些服务终端需要被告知。

1️⃣告警规则

SkyWalking 的发行版都会默认提供config/alarm-settings.yml文件,里面预先定义了一些常用的告警规则。如下:

  • (1)过去 3 分钟内服务平均响应时间超过 1 秒。
  • (2)过去 2 分钟服务成功率低于80%。
  • (3)过去 3 分钟内服务响应时间超过 1s 的百分比
  • (4)服务实例在过去 2 分钟内平均响应时间超过 1s,并且实例名称与正则表达式匹配。
  • (5)过去 2 分钟内端点平均响应时间超过 1 秒。
  • (6)过去 2 分钟内数据库访问平均响应时间超过 1 秒。
  • (7)过去 2 分钟内端点关系平均响应时间超过 1 秒。

这些预定义的告警规则,打开config/alarm-settings.yml文件即可看到。

告警规则配置项的说明:

  • Rule name:规则名称,也是在告警信息中显示的唯一名称。必须以_rule结尾,前缀可自定义
  • Metrics name:度量名称,取值为oal脚本中的度量名,目前只支持long、double和int类型。详见Official OAL script
  • Include names:该规则作用于哪些实体名称,比如服务名,终端名(可选,默认为全部)
  • Exclude names:该规则作不用于哪些实体名称,比如服务名,终端名(可选,默认为空)
  • Threshold:阈值
  • OP: 操作符,目前支持 >、<、=
  • Period:多久告警规则需要被核实一下。这是一个时间窗口,与后端部署环境时间相匹配
  • Count:在一个Period窗口中,如果values超过Threshold值(按op),达到Count值,需要发送警报
  • Silence period:在时间N中触发报警后,在TN -> TN + period这个阶段不告警。默认情况下,它和Period一样,这意味着相同的告警(在同一个Metrics name拥有相同的Id)在同一个Period内只会触发一次
  • message:告警消息

2️⃣Webhook(网络钩子)

Webhook可以简单理解为是一种Web层面的回调机制,通常由一些事件触发,与代码中的事件回调类似,只不过是Web层面的。由于是Web层面的,所以当事件发生时,回调的不再是代码中的方法或函数,而是服务接口。例如,在告警这个场景,告警就是一个事件。当该事件发生时,SkyWalking就会主动去调用一个配置好的接口,该接口就是所谓的Webhook。

SkyWalking的告警消息会通过 HTTP 请求进行发送,请求方法为 POST,Content-Type 为 application/json,其JSON 数据实基于List<org.apache.skywalking.oap.server.core.alarm.AlarmMessage进行序列化的。JSON数据示例:

[{
  "scopeId": 1,
  "scope": "SERVICE",
  "name": "serviceA",
  "id0": "12",
  "id1": "",
  "ruleName": "service_resp_time_rule",
  "alarmMessage": "alarmMessage xxxx",
  "startTime": 1560524171000
}, {
  "scopeId": 1,
  "scope": "SERVICE",
  "name": "serviceB",
  "id0": "23",
  "id1": "",
  "ruleName": "service_resp_time_rule",
  "alarmMessage": "alarmMessage yyy",
  "startTime": 1560524171000
}]

字段说明:

  • scopeId、scope:所有可用的 Scope 详见org.apache.skywalking.oap.server.core.source.DefaultScopeDefine
  • name:目标 Scope 的实体名称
  • id0:Scope 实体的 ID
  • id1:保留字段,目前暂未使用
  • ruleName:告警规则名称
  • alarmMessage:告警消息内容
  • startTime:告警时间,格式为时间戳

3️⃣邮件告警功能实践

SkyWalking是不支持直接向邮箱、短信等服务发送告警信息的,SkyWalking只会在发生告警时将告警信息发送至配置好的Webhook接口。

但我们总不能人工盯着该接口的日志信息来得知服务是否发生了告警,因此我们需要在该接口里实现发送邮件或短信等功能,从而达到个性化的告警通知。
接下来开始动手实践,这里基于Spring Boot进行实现。

🍀(1)首先是添加依赖

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring‐boot‐starter‐mail</artifactId>
</dependency>

🍀(2)配置邮箱服务

server:
  port: 9134

  #邮箱配置
  spring:
    mail:
      host: smtp.163.com
      #发送者邮箱账号
      username: 你的邮箱@163.com
      #发送者密钥
      password: 你的邮箱服务密钥
      default‐encoding: utf‐8
      port: 465 #端口号465或587
      protocol: smtp
  properties:
    mail:
      debug:
        false
    smtp:
      socketFactory:
        class: javax.net.ssl.SSLSocketFactory

🍀(3)根据SkyWalking发送的JSON数据定义一个DTO,用于接口接收数据

@Data
public class SwAlarmDTO {
  private Integer scopeId;
  private String scope;
  private String name;
  private Integer id0;
  private Integer id1;
  private String ruleName;
  private String alarmMessage;
  private Long startTime;
}

🍀(4)接着定义一个接口,实现接收SkyWalking的告警通知,并将数据发送至邮箱

@Slf4j
@RestController
@RequiredArgsConstructor
@RequestMapping("/alarm")
public class SwAlarmController {

  private final JavaMailSender sender;

  @Value("${spring.mail.username}")
  private String from;

  /**
  * 接收skywalking服务的告警通知并发送至邮箱
  **/
  @PostMapping("/receive")
  public void receive(@RequestBody List<SwAlarmDTO> alarmList) {
    SimpleMailMessage message = new SimpleMailMessage();
    // 发送者邮箱
    message.setFrom(from);
    // 接收者邮箱
    message.setTo(from);
    // 主题
    message.setSubject("告警邮件");
    String content = getContent(alarmList);
    // 邮件内容
    message.setText(content);
    sender.send(message);
    log.info("告警邮件已发送...");
  }
 
  private String getContent(List<SwAlarmDTO> alarmList) {
    StringBuilder sb = new StringBuilder();
    for (SwAlarmDTO dto : alarmList) {
      sb.append("scopeId: ").append(dto.getScopeId())
        .append("\nscope: ").append(dto.getScope())
        .append("\n目标 Scope 的实体名称: ").append(dto.getName())
        .append("\nScope 实体的 ID: ").append(dto.getId0())
        .append("\nid1: ").append(dto.getId1())
        .append("\n告警规则名称: ").append(dto.getRuleName())
        .append("\n告警消息内容: ").append(dto.getAlarmMessage())
        .append("\n告警时间: ").append(dto.getStartTime())
        .append("\n\n‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐\n\n");
    }
 
    return sb.toString();
  }
}

🍀(5)最后将该接口配置到SkyWalking中,Webhook的配置位于config/alarm-settings.yml文件的末尾,格式为http://{ip}:{port}/{uri}。

如下示例:

[root@ip‐236‐048 skywalking]# vim config/alarm‐settings.yml

webhooks:
  ‐ http://127.0.0.1:9134/alarm/receive

🍀(6)测试告警功能

完成告警接口的开发及配置后,我们来进行一个简单的测试。这里有一条调用链路如下:

在这里插入图片描述

在/producer接口中增加一行睡2秒的代码:

@Override
@Trace
@Tag(key="getAll",value="returnedObj")
public List<Order> all() throws InterruptedException {
  TimeUnit.SECONDS.sleep(2);
  return orderMapper.selectAll();
}

访问http://localhost:8072/order/all,执行完测试代码,等待约两分钟后,告警接口的控制台输出了一段日志信息:

在这里插入图片描述

八、SkyWalking高可用

在大多数生产环境中,后端应用需要支持高吞吐量并且支持高可用来保证服务的稳定,所以你始终需要在生产环境进行集群管理。

skywalking集群是将skywalking oap作为一个服务注册到nacos上,只要skywalking oap服务没有全部宕机,保证有一个skywalking oap在运行,就能进行跟踪。

搭建一个skywalking oap集群需要:

  • (1)至少一个Nacos(也可以是nacos集群);
  • (2)至少一个ElasticSearch/mysql(也可以是es/msql集群);
  • (3)至少2个skywalking oap服务;
  • (4)至少1个UI(UI也可以集群多个,用Nginx代理统一入口)。

🍀(1)修改config/application.yml文件

使用nacos作为注册中心:

在这里插入图片描述

修改nacos配置:

在这里插入图片描述

可以选择性修改监听端口:

在这里插入图片描述

修改存储策略,使用elasticsearch7作为storage:

在这里插入图片描述

在这里插入图片描述

🍀(2)配置ui服务webapp.yml文件的listOfServers,写两个地址

在这里插入图片描述

🍀(3)启动服务测试

启动Skywalking服务,指定springboot应用的jvm参数:

‐DSW_AGENT_COLLECTOR_BACKEND_SERVICES=192.168.3.10:11800,192.168.3.12:11800

九、SkyWalking UI介绍

1️⃣菜单栏

在这里插入图片描述

  • 仪表盘:查看被监控服务的运行状态;
  • 拓扑图:以拓扑图的方式展现服务之间的关系,并以此为入口查看相关信息;
  • 追踪:以接口列表的方式展现,追踪接口内部调用过程;
  • 性能剖析:对端点进行采样分析,并可查看堆栈信息;
  • 告警:触发告警的告警列表,包括服务失败率,请求超时等;
  • 自动刷新:刷新当前页面数据内容。

2️⃣控制栏

在这里插入图片描述

  • 第一栏:不同内容主题的监控面板,应用性能管理/数据库/容器等;
  • 第二栏:操作,包括 编辑/导出当前数据/倒入展示数据/不同服务端点筛选展示;
  • 第三栏:不同纬度展示,全局/服务/实例/端点。

3️⃣展示栏

Global全局维度:

  • 第一栏:Global、Service、Instance、Endpoint不同展示面板;
  • Services load:服务每分钟请求数;
  • Slow Services:慢响应服务,单位ms;
  • Un-Health services(Apdex): Apdex性能指标,1为满分;
  • Slow Endpoint:慢响应端点,单位ms;
  • Global Response Latency:百分比响应延时,不同百分比的延时时间,单位ms;
  • Global Heatmap:服务响应时间热力分布图,根据时间段内不同响应时间的数量显示颜色深度;
  • 底部栏:展示数据的时间区间,点击可以调整。

在这里插入图片描述

Service服务维度:

  • Service Apdex(数字):当前服务的评分;
  • Service Apdex(折线图):不同时间的Apdex评分;
  • Service Avg Response Times:平均响应延时,单位ms;
  • Service Response Time Percentile:百分比响应延时;
  • Successful Rate(数字):请求成功率;
  • Successful Rate(折线图):不同时间的请求成功率;
  • Servce Load(数字):每分钟请求数;
  • Service Load(折线图):不同时间的每分钟请求数;
  • Service Instances Load:每个服务实例的每分钟请求数;
  • Show Service Instance:每个服务实例的最大延时;
  • Service Instance Successful Rate:每个服务实例的请求成功率。

在这里插入图片描述

Instance服务维度:

  • Service Instance Load:当前实例的每分钟请求数;
  • Service Instance Successful Rate:当前实例的请求成功率;
  • Service Instance Latency:当前实例的响应延时;
  • JVM CPU:jvm占用CPU的百分比;
  • JVM Memory:JVM内存占用大小,单位m;
  • JVM GC Time:JVM垃圾回收时间,包含YGC和OGC;
  • JVM GC Count:JVM垃圾回收次数,包含YGC和OGC;
  • JVM Thread Count:JVM线程数;
  • 还有几个是.NET的,类似于JVM虚拟机,暂时不做说明。

在这里插入图片描述

Endpoint端点(API)维度:

  • Endpoint Load in Current Service:每个端点的每分钟请求数;
  • Slow Endpoints in Current Service:每个端点的最慢请求时间,单位ms;
  • Successful Rate in Current Service:每个端点的请求成功率;
  • Endpoint Load:当前端点每个时间段的请求数据;
  • Endpoint Avg Response Time:当前端点每个时间段的请求行响应时间;
  • Endpoint Response Time Percentile:当前端点每个时间段的响应时间占比;
  • Endpoint Successful Rate:当前端点每个时间段的请求成功率;

在这里插入图片描述

4️⃣拓扑图

  • 1.选择不同的服务关联拓扑;
  • 2.查看单个服务相关内容;
  • 3.服务间连接情况;
  • 4.分组展示服务拓扑。

在这里插入图片描述

5️⃣追踪

  • 左侧:api接口列表,红色-异常请求,蓝色-正常请求;
  • 右侧:api追踪列表,api请求连接各端点的先后顺序和时间。

在这里插入图片描述

6️⃣性能剖析

  • 新建任务:新建需要分析的端点
  • 左侧列表:任务及对应的采样请求
  • 右侧:端点链路及每个端点的堆栈信息

在这里插入图片描述

  • 服务:需要分析的服务;
  • 端点:链路监控中端点的名称,可以在链路追踪中查看端点名称;
  • 监控时间:采集数据的开始时间;
  • 监控持续时间:监控采集多长时间;
  • 起始监控时间:多少秒后进行采集;
  • 监控间隔:多少秒采集一次;
  • 最大采集数:最大采集多少样本。

## 7️⃣

分析线程栈信息:

在这里插入图片描述

8️⃣告警

不同维度告警列表,可分为服务、端点和实例。

在这里插入图片描述


后记

在这里插入图片描述

👉Java全栈学习路线可参考:【Java全栈学习路线】最全的Java学习路线及知识清单,Java自学方向指引,内含最全Java全栈学习技术清单~
👉算法刷题路线可参考:算法刷题路线总结与相关资料分享,内含最详尽的算法刷题路线指南及相关资料分享~

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

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

相关文章

ARM相关重点

一、概念&#xff1a; 指令&#xff1a;就是一条汇编指令 指令集&#xff1a;很多条汇编指令的集合 架构&#xff1a;随着ARM产品的迭代升级&#xff0c;对ARM指令集的命名 armv1~armv6已经淘汰 armv7~armv8市面正在使用的 armv9:2021年刚上市 内核&#xff1a;根据不同的a…

SpringCloud分布式请求链路跟踪——Sleuth

Sleuth 本专栏学习内容来自尚硅谷周阳老师的视频 有兴趣的小伙伴可以点击视频地址观看 随着微服务越来越多&#xff0c;可能会出现A调B&#xff0c;B调C、D等多重调用的情况&#xff0c;出现问题不易排查。 Spring Cloud Sleuth提供了一套完整的服务跟踪的解决方案&#xff0c…

软件测试高频面试题【附答案解析】

面试指导 软件测试理论刷题篇mysql数据库刷题库linux操作系统刷题篇软件测试工程师面试篇 一. 软件测试理论刷题篇 1.软件测试的意义是什么&#xff1f; 思路&#xff1a;什么是软件测试→软件测试的含义 什么是软件测试&#xff1a;在规定的条件下对程序进行操作&#xf…

【错误:A component required a bean of type ‘xxx‘ that could not be found.解决办法】

在学谷粒商城项目的时候出现了以下问题&#xff1a; *************************** APPLICATION FAILED TO START *************************** Description: A component required a bean of type org.redisson.Redisson that could not be found. Action: Consider defining a…

优思学院|西门子精益六西格玛的历程

最新阅读了一份案例报告&#xff0c;报告中仔细研究了西门子公司实施精益六西格玛的历程&#xff0c;也谈到它们利用了线上课程后&#xff0c;取得了更大的成功。 2014年&#xff0c;西门子工业自动化部门&#xff08;IA&#xff09;的高管们认识到他们必须采取措施来加强内部效…

English Learning - L2 第 16 次小组纠音 弱读和语调 2023.4.22 周六

English Learning - L2 第 16 次小组纠音 弱读和语调 2023.4.22 周六 共性问题help /help/ 中的 e 和 lsorry /ˈsɒri/ 中的 ɒ 和 ilook out /lʊk aʊt/ 中的 ɒ 和 aʊdont /dəʊnt/ 中的 əʊemergency /ɪˈmɜːʤənsɪ/ 中的 ɜːname /neɪm/ 中的 eɪright /raɪt/…

甘肃vr全景数字化展厅提高企业品牌认知度和销售效果

相比传统式展厅给观众们呈现的是静态的视觉体会&#xff0c;缺乏实时交互水平。而720VR全景虚拟展厅能够提供高度真实的展览体验&#xff0c;融合视、听、触等各种感官享受&#xff0c;带来颠覆的沉浸式体验。 即便社恐的你也能在虚拟现实的世界游刃有余&#xff0c;想看哪里点…

flutter protobuf插件的安装和使用

1.安装插件 2.在pubspec.yaml添加插件 protobuf: ^2.1.0protoc_plugin: ^20.0.13.安装protoc brew install protobuf检查是否安装成功 protoc --version4.安装dart brew tap dart-lang/dart brew install dartdart 安装好后&#xff0c;就有pub命令了。输入dart 命令行 和d…

【Linux】Linux背景常见的基本指令

文章目录 一、Linux背景二、Linux下基本指令ls 指令pwd 命令cd 指令tree 指令touch 指令mkdir 指令rmdir 指令rm 指令man 指令cp 指令mv 指令cat 指令more 指令less 指令head 指令tail 指令date 指令cal 指令find 指令grep 指令zip 指令unzip 指令tar 指令bc 指令uname 指令重要…

uniapp初始环境搭建,出于猎奇,也出于热爱编程

1 安卓环境 官方文档有些看不懂&#xff0c;这里还是自己写一下&#xff0c;毕竟我已经不想在回来带angular了&#xff0c;还是使用vue3吧&#xff0c;年纪打了&#xff0c;没用的知识学多了也是浪费时间。出于猎奇&#xff0c;也出于热爱编程。 1.1 生成签名证书 Android平台签…

linux系统启动过程与0号和1号进程

讲到linux 0号进程和1号进程就涉及到linux 系统的启动&#xff0c;我们就从linux启动过程开始。 1、linux 启动整体过程 当系统第一次启动或重启的时候&#xff0c;处理器将执行一个已知地方的代码。对应个人电脑&#xff0c;这个地方是存在主板上内存内的BIOS 当一个启动设备…

元宇宙的应用领域

应用领域一&#xff1a;游戏 1.游戏是最先成长起来的元宇宙场景。虚拟社交身份、开放性、经济系统、沉浸感、世界可持续性是元宇宙游戏需关注的五大特征。 2.元宇宙游戏依然是游戏&#xff0c;现阶段参与元宇宙游戏的主要是游戏爱好者。新的概念依旧需要好的游戏产品支撑。团…

一步搞定IP地址查询:这个在线工具帮你快速掌握设备的位置信息!

前言 今天分享一个免费的在线工具来查询IP地址所在的地理位置。可以通过IP地址所属的网络运营商和其他相关信息来确定设备的位置&#xff0c;包括国家、地区、城市和经纬度等信息。 Ip-API 官网地址: https://ip-api.com/ 使用示例 该工具除了提供界面查询&#xff0c;还贴心…

实验4 RHEL安装和管理软件

老师给的步骤&#xff1a; 从光盘安装软件&#xff1a;1.在虚拟机指定光盘镜像文件2.右下角图标&#xff0c;连接光驱3.挂在光驱 4.检查yum配置文件有没有&#xff1f; baseurl是否一致。 配置在/etc/yum.repos.d目录中5.yum install httpd -y6.启动httpd&#xff0c; systemct…

Nodejs快速搭建简单的HTTP服务器,并发布公网远程访问

文章目录 前言1.安装Node.js环境2.创建node.js服务3. 访问node.js 服务4.内网穿透4.1 安装配置cpolar内网穿透4.2 创建隧道映射本地端口 5.固定公网地址 转载自内网穿透工具的文章&#xff1a;使用Nodejs搭建HTTP服务&#xff0c;并实现公网远程访问「内网穿透」 前言 Node.js…

链表篇总结

移除链表元素&#xff1a; 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 思路&#xff1a; 这里以链表 1 4 2 4 来举例&#xff0c;移除元素4。 那么因为单链表的特殊性&#xff0c;只…

远程桌面连接不上是什么原因?怎么解决

如何解决远程桌面连接不上的问题&#xff1f; 远程桌面是一种非常方便的远程访问工具&#xff0c;允许用户在不同的地方通过网络访问其他计算机的桌面界面。但有时你可能会遇到远程桌面无法连接的问题。此时&#xff0c;您需要采取一些措施来解决这个问题。在本文中&#xff0…

走进小程序【十一】微信小程序【使用Echarts 和 腾讯地图】

文章目录 &#x1f31f;前言&#x1f31f;效果展示&#x1f31f;使用Echarts&#x1f31f;Echarts官网&#x1f31f;体验示例小程序&#x1f31f;下载&#x1f31f;引入组件&#x1f31f;创建图表&#x1f31f;暂不支持的功能 &#x1f31f;使用地图&#x1f31f;map组件&#…

Visual Studio 2019/2017/2015官方安装教程

安装VisualStudio找不到官方版本&#xff1f;只能找到第三方&#xff1f;害怕中毒&#xff1f; 不要急&#xff0c;本文例举了VS 2019 2017 2015的官方位置&#xff0c;不用但心装成第三方Visual Studio 百度搜索 Visual Studio 2017&#xff0c;只有第三方的包&#xff0c;而…

Network 之八 详解 MAC 地址、MAC 协议、MAC 控制器

在网络通信中&#xff0c;MAC 一词应用非常广泛&#xff0c;可以指 MAC 协议&#xff0c;也可以指 MAC 控制器&#xff0c;还用来表示 MAC 地址&#xff0c;因此&#xff0c;今天就来系统学习一下网络通信中 MAC 相关的知识。 MAC 协议 MAC&#xff08;Media Access Control&a…