本章主要介绍如何去追踪各微服务的调用过程。在之前章节我们讲解了用Feign在微服务之间进行相互调用,那么在整个微服务体系运行时,我们怎么宏观地监测和跟踪这些微服务的调用过程呢?接下来我们就引入:微服务链路追踪技术
现在比较流行的链路追踪框架主要有 Zipkin,Pinpoint,SkyWalking,CAT
主流技术对比: https://blog.csdn.net/u011177064/article/details/104383133
通过比较,从代码侵入、性能、UI等角度,我比较倾向于使用 Skywalking。
SkyWalking 是观察性分析平台和应用性能管理系统。
提供分布式追踪、服务网格遥测分析、度量聚合和可视化一体化解决方案。官网介绍地址
首先,我们下载Skywalking最新稳定版
下载地址:http://skywalking.apache.org/zh/downloads/
我们目前只想快速地使用起来,那么下载Distribution的版本即可。
Skywalking 包含两大部分:
代理端:/agent 目录 , 启动实际应用前,添加 jvm 参数,使用 javaagent 技术监控 应用。
服务端:/bin 目录中有启动脚本,用于收集监控数据以及可视化界面展示。
进入解压后目录 : apache-skywalking-apm-6.6.0\apache-skywalking-apm-bin\bin
选择脚本进行启动
windows : startup.bat (个人电脑上先试试windows)
linux : startup.sh
启动后会运行两个服务:
Skywalking-Collector:追踪信息收集器,通过 gRPC/Http 收集客户端的采集信息 ,Http默认端口 12800,gRPC默认端口 11800。
Skywalking-Webapp:管理平台页面 ,默认端口 8080,登录信息 admin/admin
默认存储是使用的h2,配置文件:apache-skywalking-apm-6.6.0\apache-skywalking-apm-bin\config\application.yml
可修改为mysql 、elasticsearch等存储系统。
默认启动端口是8080,配置文件:apache-skywalking-apm-6.6.0\apache-skywalking-apm-bin\webapp\webapp.yml
更多的配置项,根据需要可查阅官网文档:https://github.com/apache/skywalking/tree/v6.6.0/docs (6.6.0版本)
启动之后,可在浏览器登录查看控制台效果:
我们把之前的工程跑起来,然后用Skywalking去监控调用链路。
选用工程 combat-provider、combat-provider-feign ,这两个工程我们在之前章节搭建过。
我们只需要在SpringBoot启动类加上javaagent的启动参数,即可实现Skywalking监控应用。
-javaagent:D:\Dev\workspace_csdn\apache-skywalking-apm-6.6.0\apache-skywalking-apm-bin\agent\skywalking-agent.jar -Dskywalking.agent.service_name=provider
-javaagent : skywaling目录\agent\skywalking-agent.jar
-Dskywalking.agent.service_name :服务名,定义该微服务在skywalking监控统计中的名称。
agent目录的config下配置Skywalking服务端的信息:
apache-skywalking-apm-6.6.0\apache-skywalking-apm-bin\agent\config\agent.config
# Backend service addresses.
collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:127.0.0.1:11800}
我本地依次启动了如下应用:
服务注册中心:Nacos 端口:8848
combat-provider 端口:9999
combat-provider-feign 端口:9997
我们测试一下 combat-provider-feign 中的接口,在 之前章节 中,有介绍过,调用链路为:
浏览器-》 接口 【/config/version】 -》combat-provider-feign-》combat-provider
然后,我们在Skywalking后台中查看一下监控记录。
拓扑图:
可以看见调用过程,从User --》combat-provider-feign-》combat-provider
切换到【追踪】视图,我们刚刚的请求记录,观测还是非常清晰的。
右侧调用表中, 紫色provider-feign有两个记录,一个是 http SpringMvc,一个是 http Feign,从浏览器开始,第一个http请求是SpringMVC类型(浏览器到provider-feign服务器),第二个请求是Feign(服务器provider-feign中把请求通过Feign转到provider服务器);蓝色provider有一个记录,即中转后provider服务器响应了这个请求。
利用Skywalking,我们可以非常方便地监控微服务的调用过程,对于故障排错,问题定位是很有帮助的。
到此,我们其实已经把微服务架构中的核心组件已经基本串讲了一遍,
服务注册发现中心:SpringCloud Alibaba Nacos
配置中心:SpringCloud Alibaba Nacos
网关:SpringCloud Gateway
负载均衡:Robin
远程调用: SpringCloud Feign
流控:SpringCloud Alibaba Sentinel
链路追踪:Skywalking
接下来,我打算通过一个完整的微服务项目,来从实际生产环境的角度把我们的微服务架构完整实战一遍,之后更多的是细节!