《springcloud alibaba》 六 微服务链路跟踪skywalking

目录

  • 准备
    • 调整配置
    • 接入多个微服务
      • 网关项目调整
      • order-seata项目
      • stock-seata项目
      • 测试
    • 接入网关微服务
  • skywalking持续化到mysql
  • 自定义链路跟踪
    • pom .xml
    • orderController
    • OrderService
    • OrderDao
    • OrderTblMapper.xml
    • 测试
  • 性能剖析
  • 日志
    • tid打印
      • pom.xml
      • logback-spring.xml
      • 日志收集
      • 启动项目

随着业务规模的不断的增大, 系统的复杂度也越来越高, 我们的软件架构也进入到了分布式的阶段, 服务按照不同的维度进入到了分布式的阶段, 服务按照不同的维度进行拆分, 每一次的请求可能跨越多个微服务, 这样就导致我们每一次请求都有可能出现异常. 传统的日志监控方式无法满足调用链路追踪, 这就导致定位/诊断服务异常变得异常复杂.
在这里插入图片描述

准备

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

webapp: Ul 前端(web 监控页面)的jar 包和配置文件;
oap-libs: 后台应用的 jar 包,以及它的依赖 jar 包,里边有一个 server-starter-.jar 就是启动程序;
config: 启动后台应用程序的配置文件,是使用的各种配置
。bin: 各种启动脚本,一般使用脚本 startup.来启动 web 页面 和对应的 后台应用
。oapService.“:默认使用的后台程序的启动脚本;(使用的是默认模式启动,还支持其他模式,各模式区别见 启动模式)。oapservicelnit.”:使用 init 模式启动;在此模式下,OAP服务器启动以执行初始化工作,然后退出oapServiceNolnit,
:使用 no init模式启动;在此模式下,OAP服务器不进行初始化。
webappService.
:Ul 前端的启动脚本:
。startup.:组合脚本,同时启动 oapService.:、webappService.* 脚本;
’agent:
。skywalking-agent.jar: 代理服务jar 包
config: 代理服务启动时使用的配置文件
。plugins:包含多个插件,代理服务启动时会加载改目录下的所有插件(实际是各种 jar 包),比-SiringCloud Gateway,则需要把对应的 jar 包拷贝到 plugins

调整配置

在这里插入图片描述

  • 修改webapp.yml
    在这里插入图片描述
    在这里插入图片描述

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

接入多个微服务

输入localhost:8868,可以接入skywalking管理界面,
在这里插入图片描述
在这里插入图片描述

  • 在这三个项目上改造

网关项目调整

在这里插入图片描述

  • 改为order-seata项目的服务名

order-seata项目

下载客户端收集的jar

  • 注意: 很多文章没有说明

idea启动调整

-javaagent:D:\system\apache-skywalking-java-agent-8.10.0\skywalking-agent/skywalking-agent.jar -Dskywalking.agent.service_name=OrderSeata -Dskywalking.collector.backend_service=127.0.0.1:11800
  • Dskywalking.agent.service_name 服务名
  • -Dskywalking.collector.backend_service 暴露的端口
  • -javaagent:D:\system\apache-skywalking-java-agent-8.10.0\skywalking-agent/skywalking-agent.jar 是上面解压后的路径

stock-seata项目

idea启动调整

-javaagent:D:\system\apache-skywalking-java-agent-8.10.0\skywalking-agent/skywalking-agent.jar -Dskywalking.agent.service_name=StockSeata -Dskywalking.collector.backend_service=127.0.0.1:11800

测试

记得启动nacos、seata、sentinel服务端
访问项目http://127.0.0.1:8088/order-service/order/add
在这里插入图片描述

  • 到这里说明,skywalking集成微服务算成功咯

接入网关微服务

在这里插入图片描述

  • 在网关上新增配置
-javaagent:D:\system\apache-skywalking-java-agent-8.10.0\skywalking-agent/skywalking-agent.jar -Dskywalking.agent.service_name=api-service -Dskywalking.collector.backend_service=127.0.0.1:11800

先访问http://127.0.0.1:8088/order-service/order/add接口
在这里插入图片描述

  • 就显示了一个api-service得服务,但是对应的请求日志没有显示, why? 什么情况
  • api-service这个服务我都是刷新几次后,才显示,估计是有延迟。

找到下载解压后agent包
在这里插入图片描述
移动到如下目录下
在这里插入图片描述再重新启动 我们在测试的三个项目
在这里插入图片描述
现在显示访问记录,gateway的一个小问题,需要这样特殊处理一下

skywalking持续化到mysql

默认使用h2存储,也就是所谓的存在内存中,服务重启后,记录就会丢失
在这里插入图片描述

在这里插入图片描述
修改成mysql
在这里插入图片描述
在这里插入图片描述

  • 修改mysql的账号和密码,以及url地址

在这里插入图片描述

  • 创建数据库,表会自动创建
    D:\system\apache-skywalking-apm-9.0.0\apache-skywalking-apm-bin\bin
    启动startup.bat,正常启动成功后,skywalking是有两个窗口的,但是这里启动后,会关闭skywalking-collector,说明这个服务报错咯
    在这里插入图片描述
    来到log日志查看原因
    在这里插入图片描述
    在这里插入图片描述
  • 有没有看着很熟悉的感觉?
    初步定位,感觉就是缺少mysql驱动导致的。

在这里插入图片描述

  • 随机找一个幸运儿项目,找到mysql驱动
    在这里插入图片描述
  • 把对应的jar,放到该目录下面,重启bin
    在这里插入图片描述
  • 对应的数据库会自动创建很多的表
    在这里插入图片描述
  • 记得这三个项目也要重新启动,不然,不会加载到skywalking里面去
    在这里插入图片描述
    访问http://127.0.0.1:8088/order-service/order/add,出现请求路径。
    这时,我们再重启一下服务,看看,数据是否存在,如果存在,则说明mysql持久化成功
    在这里插入图片描述

自定义链路跟踪

在这里插入图片描述

  • 在order-seata项目上,新增链路跟踪代码

pom .xml

  <!--skywalking自定义链路跟踪--><dependency><groupId>org.apache.skywalking</groupId><artifactId>apm-toolkit-trace</artifactId><version>9.0.0</version></dependency>
  • 注意跟下载的skywalking版本一直,我下载的是9.0.0版本的,所以,写这个版本,不然,会有一些奇奇怪怪的问题

orderController

 /*** 获取id获取数据* @param id* @return*/@RequestMapping("/get")public OrderTbl get(Integer id){return  orderService.get(id);}

OrderService

package com.lcs.springcloud.service;import com.lcs.springcloud.dao.OrderDao;
import com.lcs.springcloud.entity.OrderTbl;
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;@Service
public class OrderService {@AutowiredOrderDao orderDao;public void insert(OrderTbl orderTbl) {orderDao.insert(orderTbl);}/*** 获取id获取数据* @param id* @return*/@Trace@Tags({@Tag(key = "id", value = "arg[0]"),@Tag(key = "order", value = "returnedObj")})public OrderTbl get(Integer id) {return orderDao.get(id);}
}

OrderDao

package com.lcs.springcloud.dao;import com.lcs.springcloud.entity.OrderTbl;
import org.springframework.stereotype.Repository;@Repository
public interface OrderDao {void insert(OrderTbl orderTbl);/*** 根据id获取数据* @param id* @return*/OrderTbl get(Integer id);
}

OrderTblMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.lcs.springcloud.dao.OrderDao"><!-- 主键自增长的插入 --><insert id="insert" parameterType="com.lcs.springcloud.entity.OrderTbl" useGeneratedKeys="true" keyProperty="id">insert into order_tbl(product_id,total_amount,statu) values(#{product_id},#{total_amount},#{statu});</insert><select id="get" resultType="com.lcs.springcloud.entity.OrderTbl">select * from order_tbl where id = #{id}</select>
</mapper>

测试

访问http://127.0.0.1:8088/order-service/order/get?id=12
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • id和order就是我们定义的名称,通过这里可以看到对应的传参以及返回值

性能剖析

controller的代码调整

    /*** 获取id获取数据* @param id* @return*/@RequestMapping("/get")public OrderTbl get(Integer id) throws InterruptedException {//延迟2秒TimeUnit.SECONDS.sleep(2);return  orderService.get(id);}
  • 新增一个延迟2秒的代码,重新启动项目
    在这里插入图片描述
  • trace 是看界面
  • profile 是分析
    在这里插入图片描述
  • 新建一个任务
    在这里插入图片描述
    在这里插入图片描述
  • 奇葩问题,一直没有分析报告生成,搞不懂为什么
  • 还没有删除的入口,服了

日志

tid打印

pom.xml

  <dependency><groupId>org.apache.skywalking</groupId><artifactId>apm-toolkit-logback-1.x</artifactId><version>9.0.0</version></dependency>

logback-spring.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration><!-- 日志输出格式 --><property name="FILE_LOG_PATTERN" value="[%d{yyyy-MM-dd HH:mm:ss.SSS}] %green(%-5level) [%thread] %yellow([%tid]) %cyan(%logger{50}) : %msg%n" /><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><!-- 默认日志打印的格式 --><!--<encoder><pattern>${CONSOLE_LOG_PATTERN}</pattern><charset>utf-8</charset></encoder>--><!-- 配置了skywalking的traceId的日志打印的格式 --><encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder"><layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout"><Pattern>${FILE_LOG_PATTERN}</Pattern></layout></encoder></appender><!-- 异步输出 控制台 --><appender name="ASYNC_STDOUT" class="ch.qos.logback.classic.AsyncAppender"><discardingThreshold>0</discardingThreshold><queueSize>256</queueSize><appender-ref ref="STDOUT"/></appender><root level="info"><appender-ref ref="ASYNC_STDOUT"/></root>
</configuration>
  • 配置logback并在日志中打印traceId,在日志输出格式中添加%tid即可
    启动项目
    在这里插入图片描述

日志收集

最后配置日志收集,需要在logback的配置文件中再添加一个appender

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod=" 5 seconds"><appender name="STDOUT" 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.mdc.TraceIdMDCPatternLogbackLayout"><Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%X{tid}] [%thread] %-5level %logger{36} -%msg%n</Pattern></layout></encoder></appender><appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender"><discardingThreshold>0</discardingThreshold><queueSize>1024</queueSize><neverBlock>true</neverBlock><appender-ref ref="STDOUT"/></appender><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" /><appender-ref ref="ASYNC"/></root>
</configuration>

启动项目

在这里插入图片描述

-javaagent:D:\system\apache-skywalking-java-agent-9.0.0\skywalking-agent/skywalking-agent.jar -Dskywalking.agent.service_name=OrderSeata -Dskywalking.collector.backend_service=127.0.0.1:11800
  • idea中配置
    在这里插入图片描述
  • 记得调整上面的时间,不然有时候不显示数据,这设计有点坑

项目代码

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

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

相关文章

OSI七层网络模型 —— 筑梦之路

在信息技术领域&#xff0c;OSI七层模型是一个经典的网络通信框架&#xff0c;它将网络通信分为七个层次&#xff0c;每一层都有其独特的功能和作用。为了帮助记忆这七个层次&#xff0c;有一个巧妙的方法&#xff1a;将每个层次的英文单词首字母组合起来&#xff0c;形成了一句…

TensorFlow-GPU安装

第一步&#xff1a;安装Anaconda、cuda以及对应的cudNN&#xff0c;其中TensorFlow-GPU对应版本如下图所示&#xff1a; 想看最新的话&#xff0c;可以看官方链接&#xff1a;https://www.tensorflow.org/install/source_windows?hlzh-cn 第二步&#xff1a;创建对应的虚拟环…

在Windows上安装Go编译器并配置Golang开发环境

文章目录 1、安装Go语言编译程序1.1、下载GoLang编译器1.2、安装GoLang编译器 2、配置Golang IDE运行环境2.1、配置GO编译器2.1.1、GOROOT 概述2.1.2、GOROOT 作用2.1.2、配置 GOROOT 2.2、配置GO依赖管理2.2.1、Module管理依赖2.2.2、GOPATH 管理依赖 2.3、运行GO程序2.3.1、创…

【面试经典 150 | 数学】直线上最多的点数

文章目录 写在前面Tag题目来源解题思路方法一&#xff1a;枚举直线遍历统计方法二&#xff1a;枚举斜率哈希统计 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法&#xff0c;两到三天更新一篇文章&#xff0c;欢迎催更…… 专栏内容以分析题目为主&#xff0c;并…

改进的注意力机制的yolov8和UCMCTrackerDeepSort的多目标跟踪系统

基于yolov8和UCMCTracker/DeepSort的注意力机制多目标跟踪系统 本项目是一个强大的多目标跟踪系统&#xff0c;基于[yolov8]链接和[UCMCTracker/DeepSot]/链接构建。 &#x1f3af; 功能 多目标跟踪&#xff1a;可以实现对视频中的多目标进行跟踪。目标检测&#xff1a;可以实…

在 VS Code 中使用 GitHub Copilot

Code 结合使用。 GitHub Copilot 是什么 GitHub Copilot 是一个可以帮助你更简单、更快速地编写代码的工具&#xff0c;由 GPT-3 提供支持。你只需编写所需代码的描述——例如&#xff0c;编写一个函数来生成一个随机数&#xff0c;或对一个数组进行排序——Copilot 就会为你…

【Docker】docker原理及使用-1

Docker目录 1️⃣概念2️⃣使用容器的好处2️⃣docker和普通软件启动方式的区别2️⃣docker和传统虚拟机的区别 1️⃣下载安装2️⃣安装步骤 1️⃣必须要掌握的核心概念1️⃣命令2️⃣例子2️⃣练习题目2️⃣进入一下python环境(简洁) 1️⃣解释一下 redis1️⃣docker底层隔离机…

L3 【哈工大_操作系统】操作系统启动

本节要点&#xff1a; 1、理解 OS 启动过程发生了什么&#xff0c;理解 OS 与 硬件 与 应用 之间的关系 2、本节讲解了 setup 模块 和 system 模块实现的功能 1、计算机上电时&#xff0c;操作系统在硬盘&#xff08;磁盘&#xff09;上&#xff0c;为了“取指执行”&#xff0…

康姿百德床垫抗干扰设计,保证你和伴侣睡眠不受影响

康姿百德官网价格公开透明&#xff0c;床垫价格合理质量安全可靠 在我们的一生中&#xff0c;睡眠的时间占据我们生活的大部分。在繁忙的一天结束时&#xff0c;没有什么比沉浸在舒适床垫的温柔拥抱中更让人期待的&#xff0c;让您在睡眠过程中释放一整天的疲惫。康姿百德床垫…

第十五届蓝桥杯大赛软件赛省赛 C/C++ 大学 B 组

试题 C: 好数 时间限制 : 1.0s 内存限制: 256.0MB 本题总分&#xff1a;10 分 【问题描述】 一个整数如果按从低位到高位的顺序&#xff0c;奇数位&#xff08;个位、百位、万位 &#xff09;上 的数字是奇数&#xff0c;偶数位&#xff08;十位、千位、十万位 &…

基于Spring Boot的入职匹配推荐系统设计与实现

基于Spring Boot的入职匹配推荐系统设计与实现 开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/idea 系统部分展示 管理员登录界面&#xff0c;登录成功后进入到系统操…

面试经典150题——二叉树的最大深度

1. 题目描述 ​ 2. 题目分析与解析 这个题目有过一定基础的都应该知道&#xff0c;采用递归解决问题&#xff0c;因为要求一个二叉树的深度&#xff08;也就是高度&#xff09;&#xff0c;其实上就是根节点的左子树和右子树中高度最高的那个。因此这个问题就可以拆解为&…

Python爬虫-京东商品评论数据

前言 本文是该专栏的第68篇,后面会持续分享python爬虫干货知识,记得关注。 在本专栏之前,笔者有详细介绍京东滑块验证码的解决方法,感兴趣的同学,可以直接翻阅文章《Python如何解决“京东滑块验证码”(5)》进行查看。 而本文,笔者以京东商品详情页的评论数据为例,通过…

悠络客亮相第十届智慧商业数字化运营高峰论坛

2024年4月12日&#xff0c;由中国零售&#xff08;餐饮&#xff09;CIO俱乐部、《智慧零售与餐饮》新媒体主办的“2024第十届智慧商业数字化运营高峰论坛暨中国零售CIO俱乐部春季思享会”在北京举办。 来自全国各地的商超、便利、生鲜、百货、购物中心、快消品、食品/酒水/鞋服…

探索分布式技术--------------注册中心zookeeper

目录 一、ZooKeeper是什么 二、ZooKeeper的工作机制 三、ZooKeeper特点 四、ZooKeeper数据结构 五、ZooKeeper应用场景 5.1统一命名服务 5.2统一配置管理 5.3统一集群管理 5.4服务器动态上下线 5.5软负载均衡 六、ZooKeeper的选举机制 6.1第一次启动选举机制 6.2非…

国债逆回购交易攻略!

购买国债逆回购的步骤可以按照以下流程进行&#xff1a; 1. 开通证券账户&#xff1a; 首先&#xff0c;您需要拥有一个证券账户&#xff08;也称股票账户&#xff09;。可以通过选择一家信誉良好、服务优质的证券公司进行线上开户。联系券商服务经理&#xff0c;沟通了解不同公…

烧结钕铁硼永磁体是如何生产的?

烧结钕铁硼永磁体是采用粉末冶金法生产的&#xff0c;从备料到成品发货一般要经过十几个工艺环节&#xff0c;在不同阶段还包括若干次检测分析。 整个生产过程是一个系统工程&#xff0c;环环相扣。一般我们将生产磁体毛坯的过程称为前道生产环节&#xff0c;将毛坯加工成最终…

分布式事务 - 个人笔记 @by_TWJ

目录 1. 传统事务1.1. 事务特征1.2. 事务隔离级别1.2.1. 表格展示1.2.2. oracle和mysql可支持的事务隔离级别 2. 分布式事务2.1. CAP指标2.2. BASE理论2.3. 7种常见的分布式事务方案2.3.1. 2PC2.3.2. 3PC2.3.3. TCC2.3.3.1. TCC的注意事项&#xff1a;2.3.3.2. TCC方案的优缺点…

计算机网络 Cisco虚拟局域网划分

一、实验内容 1、分别把交换机命名为SWA、SWB 2、划分虚拟局域网 valn &#xff0c;并将端口静态划分到 vlan 中 划分vlan 方法一&#xff1a;在全局模式下划分vlan&#xff0c;在SWA交换机上创建三个vlan&#xff0c;分别为vlan2&#xff0c;vlan3&#xff0c;vlan4。 方…

OpenCV的查找命中或未命中

返回:OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇:OpenCV4.9更多形态转换 下一篇:OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 目标 在本教程中&#xff0c;您将学习如何使用 Hit-or-Miss 转换&#xff08;也称为 Hit-and-Miss 转…