首页 > 其他分享 >SpringCloudAlibaba整合SkyWalking

SpringCloudAlibaba整合SkyWalking

时间:2023-09-21 12:22:17浏览次数:45  
标签:agent order 整合 apm apache import SkyWalking SpringCloudAlibaba skywalking

SkyWalking是一个开源的分布式系统性能监测和追踪解决方案。它主要用于监控和追踪分布式系统中的服务和应用,以便帮助开发人员和运维团队定位和解决性能问题和故障。以下是SkyWalking的主要作用:
分布式追踪:SkyWalking可以跟踪分布式系统中各个组件之间的调用链,从而实现对整个系统的端到端追踪。通过追踪,可以了解请求在系统中的传播路径和调用关系,帮助识别潜在的性能瓶颈和错误。
性能监测:SkyWalking能够监测分布式系统中的各个组件的性能指标,如响应时间、吞吐量、错误率等。通过监测,可以实时了解系统的运行状态,并且可以在性能出现异常时及时做出响应,以保障系统的稳定性和高可用性。
故障定位:当分布式系统发生故障或性能问题时,SkyWalking可以帮助定位问题的原因和位置。通过追踪调用链和监测性能指标,可以找到导致故障的具体组件或服务,并快速排查问题。
可视化监控:SkyWalking提供了直观的可视化监控界面,可以以图形化的方式展示分布式系统的拓扑结构、调用链路和性能指标。这样可以更方便地查看系统运行情况,发现潜在的问题,并进行更有效的决策。
支持多种语言和框架:SkyWalking支持多种编程语言和常用的框架,包括Java、Python、Go、.NET等,使得它适用于不同类型的分布式系统。
总体而言,SkyWalking作为一款强大的分布式性能监测和追踪工具,有助于提高分布式系统的可观察性和可靠性,帮助开发人员和运维团队更好地管理和维护复杂的分布式应用。

使用之前我们首先需要去下载安装包:https://archive.apache.org/dist/skywalking/8.5.0/
不要去下最新版的了,我刚下了个9.5.0的,启动报错,jdk版本不支持,如果要用新版本的自己先去安装对应版本jdk

 

将安装包上传到服务器/usr/local目录下解压

tar -zxvf apache-skywalking-apm-8.5.0.tar.gz
1
找到webapp/目录下面的webapp.yml

cd /usr/local/apache-skywalking-apm-bin/webapp/
1


我们改一下这个端口,原端口是8080,容易冲突

 

改完之后我们去config/目录下找到application.yml

cd /usr/local/apache-skywalking-apm-bin/config
1
找到storage.selector,改为mysql

 

往下拉,找到mysql配置,修改为自己的mysql
记得去建一个数据库swtest,不用建表,服务启动时会自己建表

 

对了还有个问题,好像需要将mysql的驱动放到/usr/local/apache-skywalking-apm-bin/oap-libs下
这个驱动包可以直接去自己maven库里面找,直接搜mysql-con就可以了,版本差不多就行不一定非要一致

 

然后我们去bin/目录下启动服务

cd /usr/local/apache-skywalking-apm-bin/bin
1


直接:sh startup.sh

启动成功后我们打开:http://192.168.43.128:7070/ (这个7070就是刚才自己配置的端口号)
下面这个就是控制台
启动失败的话去/usr/local/apache-skywalking-apm-bin/logs下面看下日志,我第一次就是用了高版本的提示jdk版本异常

 

还有刚才建的数据库
这些都是自动加进来的表

 

现在我们把它整合到项目中
找到刚才那个安装包在本地解压一份,因为我们需要agent里面的skywalking-agent.jar

 

记住这个skywalking-agent.jar不能单独抽出来,一定要放在agent包里面
它后面启动是需要这里面其它文件支持的

 

然后我们在需要用到的项目模块配置vm运行参数,加入skywalking-agent.jar
我们先在gateway服务里面加上这个


这里注意下idea版本不一样位置有些区别
反正都是在Configuration的里面VM options里面

 


在里面填入这个:

-javaagent:E:\java_projects\apache-skywalking-apm-bin\agent\skywalking-agent.jar # 自己解压的目录
-Dskywalking.agent.service_name=gateway-service # 服务名称,取的nacos的注册服务名,可以随便取
-Dskywalking.collector.backend_service=192.168.43.128:11800 # 刚部署的服务,11800是固定的不用改


启动的时候看下控制台,刚开始几行要是没报错就说明成功了

 

今天继续更新一下,昨天找了一下午都没找到为什么skywalking控制台看不到请求接口但是有服务名称
今天早上来重新启动虚拟机启动服务再请求几下接口自己就好了,说明昨天安装配置是正确的,可能就是需要重启一下服务,所以大家也一样,发现和预计不一样确定自己安装配置无异常的情况下先重启服务看看,不然要浪费很多时间

 

这边是拓扑图,可以看到服务的链路组成
里面有几个服务还没有显示服务名,因为还有些服务没有配置vm启动参数

 

我们在所有服务里面加上vm启动参数,记得修改-Dskywalking.agent.service_name=gateway-service的服务名称
就可以看到服务名称了

 

还能看到链路追踪
如果有异常的话这里还会显示是哪个接口异常了

 

如果我们要在linux上部署服务要用到这个也是一样的在启动命令中加上启动参数就好
/usr/local/apache-skywalking-apm-bin/webapp就是我们之前在服务器上解压的那个路径,这里面有个skywalking-agent.jar
order-0.0.1-SNAPSHOT.jar就是你自己打的order服务包

nohup java -javaagent:/usr/local/apache-skywalking-apm-bin/agent/skywalking-agent.jar -Dskywalking.agent.service_name=order-provider -Dskywalking.collector.backend_service=192.168.43.128:7070 -jar order-0.0.1-SNAPSHOT.jar > order.log 2>&1 &

1
2
为了项目能正常打包记得在pom里面加上下面这个,这是springboot基础就不粘贴全部代码了

<build>
<plugins>
<!-- spring-boot package to jar -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>


我们还可以在里面通过注解的方式让它在追踪的时候显示请求参数和返回参数
首先我们在order服务的pom里面加入这个:

<!-- skywalking工具类 -->
<dependency>
<groupId>org.apache.skywalking</groupId>
<artifactId>apm-toolkit-trace</artifactId>
<version>8.5.0</version>
</dependency>

然后我们在OrderServiceImpl的addOrder方法上加两个注解就可以了
@Trace和@Tags
@Tags里面的key就是方法名,returnedObj为返回参数,arg[0]表示第一个请求参数

package com.sakura.order.service.impl;

import com.sakura.order.entify.Order;
import com.sakura.order.feign.ProductFeignService;
import com.sakura.order.feign.StockFeignService;
import com.sakura.order.mapper.OrderMapper;
import com.sakura.order.param.AddOrderParam;
import com.sakura.order.service.OrderService;
import io.seata.spring.annotation.GlobalLock;
import io.seata.spring.annotation.GlobalTransactional;
import lombok.extern.java.Log;
import org.apache.http.client.utils.DateUtils;
import org.apache.skywalking.apm.toolkit.trace.Tag;
import org.apache.skywalking.apm.toolkit.trace.Tags;
import org.apache.skywalking.apm.toolkit.trace.Trace;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;

/**
* @author Sakura
* @date 2023/7/28 16:18
*/
@Service
@Log
public class OrderServiceImpl implements OrderService {

@Autowired
OrderMapper orderMapper;
@Autowired
ProductFeignService productFeignService;
@Autowired
StockFeignService stockFeignService;

@Override
@GlobalLock
@GlobalTransactional
@Trace
@Tags({
@Tag(key = "addOrder", value = "returnedObj"),
@Tag(key = "addOrder", value = "arg[0]")
})
public String addOrder(AddOrderParam addOrderParam) {

Order order1 = new Order();
order1.setOrderNo("6341341");
orderMapper.insert(order1);

// 先去查询商品库存信息
Integer num = stockFeignService.getProductNum(addOrderParam.getProductNo());
log.info("商品库存数量:" + num);
if (num == null || num < 1 || num < addOrderParam.getNum()) {
return "商品库存不足";
}
Order order = new Order();
// 根据当前日期加随机数生成一个订单号
order.setOrderNo(DateUtils.formatDate(new Date(), "yyyyMMddHHmmssSSS")
+ (int) ((Math.random() * 9 + 1) * 10000000));
order.setProductNo(addOrderParam.getProductNo());
order.setNum(addOrderParam.getNum());
// 去商品服务获取商品单价
Integer unitPrice = productFeignService.getUnitPrice(addOrderParam.getProductNo());
log.info("商品单价:" + unitPrice);
if (unitPrice == null || unitPrice < 0) {
return "商品价格异常";
}
order.setTotalPrice(addOrderParam.getNum() * unitPrice);
order.setStatus(1);
orderMapper.insert(order);

return "商品下单成功:" + order.getOrderNo() + " 库存:" + num + " 单价:" + unitPrice;
}
}


我们请求一下这个接口,然后在控制台追踪里面找到它
太多乱七八糟的请求就点右上角清

再点一下上面那个小框里面的内容就可以看到请求参数和返回参数了,其它的接口也是一样的配置

再来看一下性能剖析
点右上角新建任务建一个任务

我们多请求几次这个接口,然后点击一下箭头位置就可以看到这个接口各个部分组成的请求时间

选择时间久的点击分析,就可以看到更详细的分析了,这个大家自己研究一下

最后还剩一个告警功能,这个就是在服务异常的时候它会触发警报功能,这个警报功能你可以自己配置,比如在服务里面写个接口然后记录日志或者发送邮件什么,这里就不讲了,大家自己了解下就可以

图片:

 

 

 

 

 

标签:agent,order,整合,apm,apache,import,SkyWalking,SpringCloudAlibaba,skywalking
From: https://www.cnblogs.com/xcl1-yyds/p/17719660.html

相关文章

  • SpringCloudAlibaba整合Nacos配置中心
    Nacos可以帮助应用程序动态地管理和配置各种配置信息,例如应用程序的配置参数、数据库连接信息、日志级别、特性开关等。通过使用Nacos配置中心,可以将这些配置信息集中管理,而不需要将它们硬编码到应用程序中。这样做的好处是,当需要修改配置时,不需要重新打包和部署应用程序,而是直接......
  • SpringCloudAlibaba整合OpenFeign
    OpenFeign是一个用于简化HTTP客户端的开源框架,它是SpringCloud生态系统的一部分。它的主要作用是简化在使用HTTP请求时编写客户端代码的过程,特别是在构建微服务架构中的服务之间进行通信时。OpenFeign提供了一种声明式的方式来定义和使用HTTP客户端接口。通过使用注解来描述HTTP......
  • SkyWalking使用讲解
    目录1SkyWalking1.1简介1.2如何选择1.3Skywalking架构1.4服务端搭建1.4.1下载安装包1.4.2配置修改1.4.2.1config/application.yml1.4.2.2webapp/webapp.yml1.4.3启动服务1.5客户端搭建1.6数据持久化1.6.1修改配置文件1.6.2添加MySQL的jdbc依赖1.7日志监控1.7.1添......
  • springboot整合elasticsearch-RestHighLevelClient api查询
    1.依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId></dependency><dependency><groupId>org.elasticsearch.client</groupId......
  • Java 后端整合 Swagger + Knife4j 接口文档
    官方文档:https://doc.xiaominfo.com/docs/quick-start环境SpringBoot版本2.7.2JDK版本1.81.引入依赖   <!--https://doc.xiaominfo.com/knife4j/documentation/get_start.html-->   <dependency>     <groupId>com.github.xiaoymin</gro......
  • Spring整合DWR comet 实现无刷新 多人聊天室
    用dwr的comet(推)来实现简单的无刷新多人聊天室,comet是长连接的一种。通常我们要实现无刷新,一般会使用到Ajax。Ajax应用程序可以使用两种基本的方法解决这一问题:一种方法是浏览器每隔若干秒时间向服务器发出轮询以进行更新,另一种方法是服务器始终打开与浏览器的连接并在数据可用时......
  • 基于 COLA 架构的 Spring Cloud Alibaba(四)整合 Sentinel
    在上一篇中,我们介绍了在项目中如何整合Nacos、OpenFeign。这一篇,我们来介绍一下项目中Sentinel的整合。1.关于SentinelSentinel是阿里巴巴开源的分布式系统的流量防卫组件,Sentinel把流量作为切入点,从流量控制,熔断降级,系统负载保护等多个维度保护服务的稳定性。Sentinel的使......
  • 手把手教你Shiro整合JWT实现登录认证!
    1.所用技术SpringBootMybatis-plusShiroJWTRedis注:最后会给出完整代码2.前置知识Shiro:Shiro是一个基于Java的开源的安全框架。在Shiro的核心架构里面,Subject是访问系统的用户。SecurityManager是安全管理器,负责用户的认证和授权,相当于Shiro的老大哥。Realm相......
  • springboot整合rocketMQ——消费者
    依赖<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/......
  • drf整合
    drf内容简介1.drf入门规范2.序列化组件----(最重要)3.请求与响应4.视图组件----(重要)5.路由组件6.认证、权限、频率----(重要)7.过滤、排序、分页、全局异常处理8.接口文档9.jwt认证10.权限:ACL、RBAC drf入门规范前后端开发模式前后端混合开发模式: ......