skywalking服务追踪

服务追踪

产生背景

在微服务系统中,随着业务的发展,系统会变得越来越大,那么各个服务之间的调用关系也就变得越来越复杂。一个 HTTP 请求会调用多个不同的微服务来处理返回最后的结果,在这个调用过程中,可能会因为某个服务出现网络延迟过高或发送错误导致请求失败,这个时候,对请求调用的监控就显得尤为重要了。Spring Cloud Sleuth 提供了分布式服务链路监控的解决方案。下面介绍 Spring Cloud Sleuth 整合 Zipkin 的解决方案。

分布式服务追踪系统优点

1.RPC远程调用过程中,服务与服务依赖的关系非常复杂,A调用B服务,B服务C服务 如果某个服务出现问题可能会导致整个链响应延迟;

2.如果服务的依赖关系非常复杂,建议改成MQ异步的形式。

服务追踪常用框架

\1. Sleuth +Zipkin SpringCloud封装了 Sleuth +Zipkin

\2. 阿里的鹰眼系统

\3. Skywalking(非常推荐大家使用 功能非常强大)---Skywalking

Sleuth+Zipkin

1.Spring Cloud Sleuth实现了一种分布式的服务链路跟踪解决方案,通过使用Sleuth可以让我们快速定位某个服务的问题。

2.官方文档地址如下:https://cloud.spring.io/spring-cloud-static/spring-cloud-sleuth/2.0.1.RELEASE/single/spring-cloud-sleuth.html

服务追踪常见名词

1.Sleuth可以结合Zipkin可以实现界面化的形式管理我们接口依赖信息;

2.Sleuth 每一次RPC远程调用请求都会生成一个spanid记录每一次rpc请求的信息,还有一个traceid 全局唯一id;

3.spanid为请求单元ID、traceid 为请求链全局id

skyWalking

SkyWalking是一个开源的观测平台,用于从服务和云原生等基础设施中收集、分析、聚合以及可视化数据,SkyWalking 提供了一种简便的方式来清晰地观测分布式系统,甚至可以观测横跨不同云的系统,SkyWalking 更像是一种现代的应用程序性能监控(Application Performance Monitoring,即APM)工具,专为云原生,基于容器以及分布式系统而设计。

skywalking架构原理

在整个skywalking的系统中,有四个角色:

1.skywalking agent和业务系统关联在一起,负责收集各种监控数据;

2.oapservice是负责处理监控数据的,比如接受skywalking agent的监控数据,并存储在数据库中(例如elasticsearch、mysql中等);接受skywalking webapp的前端请求,从数据库查询数据,并返回数据给前端。,Skywalking oapservice通常以集群的形式存在;

3.skywalking webapp,前端界面,用于展示数据;

4.用于存储监控数据的数据库,比如mysql、elasticsearch等

skywalking 底层原理

1.springboot项目启动的时候 是不需要引入任何的jar包,

2.启动springboot项目被skywalking skywalking-agent.jar 拦截

3.将rpc请求数据 发送给我们的skywalking oapservice接口项目

4.连接到我们的skywalking webapp项目展示数据

5.数据最终是可以持久化存放在 db或者es中。

skywalking 环境安装

下载apache-skywalking-apm-6.5.0.tar安装包

\2. 进入到bin目录(直接双击启动startup.bat)

\3. 启动启动oapService和我们的webappService

\4. 查看管理界面http://127.0.0.1:8080/

agent 里面 skywalking-agent.jar 代理 springboot应用程序

springboot实现监控

创建一个springboot项目

\2. 将该springboot项目打成jar包 mvn package

\3. java -javaagent:skywalking-agent.jar路径 -jar springboot jar包

范例:

D:\path\cloud\apache-skywalking-apm-6.5.0\apache-skywalking-apm-bin\agent>java -javaagent:D:\path\cloud\apache-skywalking-apm-6.5.0\apache-skywalking-apm-bin\agent\skywalking-agent.jar -jar D:\path\cloud\apache-skywalking-apm-6.5.0\apache-skywalking-apm-bin\agent\mayikt-thymeleaf-1.0-SNAPSHOT.jar

访问测试springboot接口

skywalking页面最终显示

为了避免skywalking 展示数据延迟问题,建议 将自动刷新改为1-3s

大家在演示效果的过程中,如果没有任何数据 注意:手动点击

SkyWalking数据持久化

SkyWalking 默认是将数据存入在内存中,如果重启SkyWalking 数据则都会丢失。

我们可以选择将数据持久化存放在mysql、es中等。

1.数据可以持久化在mysql、es中等。

修改config下的application.yml

修改为mysql

selector: ${SW_STORAGE:mysql}

  mysql:
   properties:
     jdbcUrl: ${SW_JDBC_URL:"jdbc:mysql://localhost:3306/skywalking?serverTimezone=UTC&characterEncoding=utf-8"}
     dataSource.user: ${SW_DATA_SOURCE_USER:root}
     dataSource.password: ${SW_DATA_SOURCE_PASSWORD:root}
     dataSource.cachePrepStmts: ${SW_DATA_SOURCE_CACHE_PREP_STMTS:true}
     dataSource.prepStmtCacheSize: ${SW_DATA_SOURCE_PREP_STMT_CACHE_SQL_SIZE:250}
     dataSource.prepStmtCacheSqlLimit: ${SW_DATA_SOURCE_PREP_STMT_CACHE_SQL_LIMIT:2048}
     dataSource.useServerPrepStmts: ${SW_DATA_SOURCE_USE_SERVER_PREP_STMTS:true}
   metadataQueryMaxSize: ${SW_STORAGE_MYSQL_QUERY_MAX_SIZE:5000}

修改完毕创建skywalking数据库

2.需要在oap-libs/ 放入 mysql-connector-java-8.0.16.jar

3.重启SkyWalking

自动创建表

相关推荐
程序员徐师兄3 分钟前
Java 基于微信小程序的高校失物招领平台小程序(附源码,文档)
java·微信小程序·小程序·失物招领小程序·高校失物招领小程序
DEARM LINER41 分钟前
RabbitMQ 可靠性投递
java·分布式·后端·rabbitmq·ruby
kfepiza1 小时前
Springboot如何使用面向切面编程AOP?
java·spring boot·后端
fly spider2 小时前
JVM执行流程与架构(对应不同版本JDK)
java·jvm·架构
计算机-秋大田2 小时前
基于微信小程序的培训机构客户管理系统设计与实现(LW+源码+讲解)
java·vue.js·spring boot·后端·微信小程序·小程序·课程设计
不見星空2 小时前
【Java】MyBatis动态SQL
java·sql·mybatis
Lsland..2 小时前
Spring Boot 配置文件详解:YAML vs Properties
java·前端·spring boot
城沐小巷3 小时前
springboot+vue+uniapp的校园二手交易小程序
vue.js·spring boot·uni-app
m0_748248233 小时前
Java进阶14 TCP&日志&枚举
java·开发语言·tcp/ip
Morgenyao3 小时前
常用工具类——Collections集合框架
java