Dubbo学习系列之十八(Skywalking服务跟踪)

  咱们知道,微服务不是独立的存在,不然就不须要微服务这个架构了,那么当发起一次请求,如何知道此次请求的轨迹,或者说遇到响应缓慢、java

请求出错的状况,咱们该如何定位呢?这就涉及到APM(Application Performance Management)组件了,主流的选型有Zipkin、Pinpoint、Jaeger、git

Skywalking,我在VehicleAdmin项目中试用了Dubbo+Zipkin组合,但发现当服务既是生产者又是消费者时有不兼容问题,因而我在此作了个Dubbo+github

Skywalking的演示版本,仅供参考。web

 

原创文章,谢绝一切形式转载,违者必究!redis

 

准备sql

Idea2019.03/Gradle6.0.1/Maven3.6.3/JDK11.0.4/Lombok0.28/SpringBoot2.2.4RELEASE/mybatisPlus3.3.0/Soul2.1.2/Dubbo2.7.5/Druid1.2.21/apache

Zookeeper3.5.5/Mysql8.0.11/Redis5.0.5/Skywalking7.0.0bootstrap

难度 新手--战士--老兵--大师浏览器

目标缓存

  1. Skywalking作微服务链路监控

步骤

为了碰见各类问题,同时保持时效性,我尽可能使用最新的软件版本。源码地址:https://github.com/xiexiaobiao/vehicle-shop-admin

1 原理

JavaAgent开启java探针(使用ASM字节码技术开发的工具),即运行在main方法以前的拦截器,简单讲就是动态代理和方法拦截器的组合,拦截并分析

请求/响应的信息。更多关于java探针的内容,在此不展开,略!

2 步骤

2.1 下载

下载Skywalking,略!7.0.0版本以后编译好的二进制文件就是一个Window/Linux通用的包了,直接解压便可。

2.2 开发环境使用

IDE开发环境Idea下的使用举例,JVM参数行添加:

-javaagent:C:\apache-skywalking-apm-bin-7.0\agent\skywalking-agent.jar -DSW_AGENT_NAME=authority-service -Dskywalking.collector.servers=localhost:10800

 

以上javaagent地址为skywalking-agent.jar地址,能够为相对/绝对路径:

而后其余每一个服务都相似操做,修改DSW_AGENT_NAM内容为具体的服务名。

若是服务打包成Jar文件,启动时加参数便可,这里给个实例:

java -jar -javaagent:$AGENT_PATH/skywalking-agent.jar -Dskywalking.agent.application_code=dubbo-consumer -Dskywalking.collector.servers=localhost:10800 authority-1.0-SNAPSHOT.jar

 

服务名称也能够在config文件中配置,但只能配一个!!感受这配置就是个鸡肋。

2.3 运行Skywalking

若是没有在apache-skywalking-apm-bin-7.0\webapp\webapp.yml中对 server: port: 8080 修改端口号,运行解压包下的 bin/startup 文件,

便可启动 Skywalking Server 端,打开浏览器地址便可:http://localhost:8080/

2.4 运行项目

启动vehicleadmin项目,顺序:souladmin—>soulbootstrap—>redis—>authority—>customer—>stock—>order —>business, 进入WEBUI仪表盘总览:

 

服务拓扑图,能够展现服务、DB、缓存、网关信息,能够独立出单个服务显示:

 

调用链追踪,能够树形、表格、列表方式展现,好比显示 /order/list的跨度(span)信息和调用链信息,能够了解链路总耗时和span耗时:

 

点击一个链对象后展现的span信息,如下为一个dubbo调用实例:

2.5 日志接入

若是须要在日志中打印,即手动埋点,也可使用API,对任何须要追踪的方法,使用 @Trace 标注,则此方法会被加入到追踪链中,

经过TraceContext.traceId() 在应用任意位置获取traceId,还能够经过ActiveSpan.tag() 自定义标签,例如我在com.biao.shop.authority.controller.SystemUserController中:

 

输出示例:

 

另外,还能够结合Logback进行日志处理,例如我在vehicle-shop-admin\authority\src\main\resources\config\logback-dev.xml中添加一个appender专用于skywalking:


 

总结

Skywalking链路监控已为Apache顶级项目,UI界面丰富,监控范围广、维度多,对代码零侵入,系统性能损失低,还支持接入 ELK 进行存储展现,喜欢的就赶忙拿去用吧。

 

全文完!

 

原创文章,谢绝一切形式转载!

 


个人其余文章:

     只写原创,敬请关注 

相关文章
相关标签/搜索