链路追踪Skywalking在微服务中的使用
链路追踪Skywalking
1、Skywalking是什么
01、Apache SkyWalking 是一款开源、无侵入、一站式的可观测性(Observability)平台
02、主打分布式追踪 + 指标 + 日志三位一体
03、专为微服务、云原生架构和基于容器(Docker、K8s、Mesos)架构而设计
04、整体架构:
2、下载
官网:https://skywalking.apache.org/
注意高版本的skywalking需要单独下载agent探针
下载解压apm之后将下载的agent放入apm的根目录,方便后续配置
agent:探针,负责从应用中,收集链路信息,发送给 SkyWalking OAP 服务器
OAP :负责接收Agent发送的Tracing数据信息,然后进行分析(Analysis Core),存储到外部存储器(Storage),最终提供查询(Query)功能
Storage:数据存储,目前支持ES、MySQL、Sharding Sphere、TiDB、H2多种存储器,默认使用H2
3、新建项目测试
新建两个springboot项目便于测试user-service、edu-service
user-service pom主要配置
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<spring-boot.version>2.7.6</spring-boot.version>
<mybatis-plus.version>3.5.2</mybatis-plus.version>
<openfegin.version>3.1.5</openfegin.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Spring Cloud OpenFeign -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>${openfegin.version}</version>
</dependency>
<!-- Spring Cloud LoadBalancer -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
<version>3.1.5</version>
</dependency>
<!-- Spring Cloud Alibaba Nacos Discovery -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2021.0.5.0</version>
</dependency>
<!-- SkyWalking 的日志工具包 -->
<dependency>
<groupId>org.apache.skywalking</groupId>
<artifactId>apm-toolkit-logback-1.x</artifactId>
<version>9.0.0</version>
</dependency>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis-plus.version}</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
其中包含Nacos 注册中心、SkyWalking日志包、OpenFeign(调用edu-user服务)、LoadBalancer 负载均衡、mysql、mybatis-plus
edu-service pom主要配置
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<spring-boot.version>2.7.6</spring-boot.version>
<mybatis-plus.version>3.5.2</mybatis-plus.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Spring Cloud Alibaba Nacos Discovery -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2021.0.5.0</version>
</dependency>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis-plus.version}</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
其中包含Nacos 注册中心、mysql、mybatis-plus
4、部署探针
配置启动参数
在idea中配置参数:


#Agent负责收集应用的性能数据、追踪信息
-javaagent:D:\apache-skywalking-apm-bin\agent\skywalking-agent.jar
#被监控服务的名称,唯一的名称以便于在UI界面识别和管理
-Dskywalking.agent.service_name=user-service
#SkyWalking后端收集器地址,可配置远程地址
-Dskywalking.collector.backend_service=localhost:11800
注意服务名不要重复user-service、edu-service
5、启动skywalking采集服务信息
进入skywalking安装bin目录,双击startup.bat即可启动
如需进行端口等其他配置,可操作/config/application.yml文件进行配置
启动后可以看到有两个窗口
Skywalking-Collector (OAP Server) 为核心应用服务作用是接收、分析、存储监控数据(链路、指标、日志)
Skywalking-Webapp (UI) 提供可视化控制台
启动成功之后访问http://localhost:8080/
6、测试接口服务监控
edu-service中application.yml配置
server:
port: 8091
spring:
application:
name: edu-service
cloud:
nacos:
discovery:
server-addr: ${NACOS_SERVER_ADDR:localhost:8848}
namespace: ${NACOS_NAMESPACE:public}
group: DEFAULT_GROUP
username: nacos
password: nacos
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
# 数据库
url:
username:
password:
mybatis-plus:
mapper-locations: classpath*:mapper/**/*.xml
typeAliasesPackage: com.example.eduservice.demos.web.domain
global-config:
db-config:
id-type: auto
field-strategy: 0
column-underline: true
capital-mode: true
logic-delete-value: 1
logic-not-delete-value: 0
refresh: false
configuration:
map-underscore-to-camel-case: true
log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl
database-id: mysql
logging:
level:
root: INFO
com.example.eduservice.mapper: DEBUG
com.example.eduservice.demos.web.service: DEBUG
在edu-service中新增一个建议接口获取数据库中人员教育信息
@RequestMapping("/edu")
@RestController
public class TestUserEduController {
@Autowired
private TestUserEduService testUserEduService;
@GetMapping("/getEduInfo")
public List<TestUserEduDO> getEduInfo(TestUserEduDTO dto) {
return testUserEduService.getEduInfo(dto);
}
}
调用接口
查看skywalking控制台能否正常捕捉请求
图中可以看到skywalking正确记录了接口调用情况
下面使用微服务的方式来调用接口,看下skywalking的跟踪情况
user-service服务调用edu-service服务
user-service服务application.yml
server:
port: 8090
spring:
application:
name: user-service
cloud:
nacos:
discovery:
server-addr: ${NACOS_SERVER_ADDR:localhost:8848}
namespace: ${NACOS_NAMESPACE:public}
group: DEFAULT_GROUP
username: nacos
password: nacos
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url:
username:
password:
mybatis-plus:
mapper-locations: classpath*:mapper/**/*.xml
typeAliasesPackage: com.example.userservice.demos.web.domain
global-config:
db-config:
id-type: auto
field-strategy: 0
column-underline: true
capital-mode: true
logic-delete-value: 1
logic-not-delete-value: 0
refresh: false
configuration:
map-underscore-to-camel-case: true
log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl
database-id: mysql
feign:
client:
config:
default:
loggerLevel: FULL
compression:
request:
enabled: true
response:
enabled: true
logging:
level:
root: INFO
com.example.userservice.mapper: DEBUG
com.example.userservice.demos.web.service: DEBUG
com.example.userservice.feign.EduClient: DEBUG
配置eduClient
@FeignClient(name = "edu-service")
public interface EduClient {
@GetMapping("/edu/getEduInfo")
List<TestUserEduDTO> getOrderById(@RequestParam("userId") Integer userId);
}
开启Nacos自动注入和FeignClient
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class UserServiceApplication {
public static void main(String[] args) {
SpringApplication.run(UserServiceApplication.class, args);
}
}
user-service接口
@RequestMapping("/user")
@RestController
public class TestUserController {
@Autowired
private TestUserService testUserService;
@GetMapping("/getUserInfo")
public TestUserVO getUserInfo(TestUserDTO dto) {
return testUserService.getUserInfo(dto);
}
@GetMapping("/list")
public TestUserVO list() throws InterruptedException{
Thread.sleep(2000);
return new TestUserVO();
}
}
访问接口
查看skywalking跟踪情况
让edu-service服务报错看下能否追踪到某个服务接口异常情况
@Service
public class TestUserEduServiceImpl extends ServiceImpl<TestUserEduMapper, TestUserEduDO> implements TestUserEduService {
@Autowired
private TestUserEduMapper testUserEduMapper;
@Override
public List<TestUserEduDO> getEduInfo(TestUserEduDTO dto) {
throw new RuntimeException("抛出异常-------");
// return testUserEduMapper.selectList(Wrappers.<TestUserEduDO>lambdaQuery().eq(TestUserEduDO::getUserId,dto.getUserId()));
}
}
再次访问接口后查询skywalking追踪情况
图中可以看到跟踪到了具体的edu-service请求异常
7、性能剖析
新建任务
/user/list做了延迟两秒处理,多次访问分析接口情况
可以看到skywalking追踪到了最终结果Thread.sleep
8、监控告警
config/alarm-settings.yml配置文件可自行配置
最近3分钟内服务的平均响应时间超过1秒
最近2分钟服务成功率低于80%
最近3分钟90%服务响应时间超过1秒
最近2分钟内服务实例的平均响应时间超过1秒


9、安全性
agent可跟随微服务所在服务器进行部署,SkyWalking OAP可以单独部署在一台服务器上或者分布式部署,只要保证微服务所在端口能正常连接SkyWalking OAP服务即可完成正常数据采集、分析等操作。
9、其他




后续更多的skywalking配置和控制台各功能的使用留待后续探索
更多推荐
所有评论(0)