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

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

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

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

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

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

本文只发表在"公众号"和"博客园",其他均属复制粘贴!如果觉得排版不清晰,请查看公众号文章。 

准备

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/

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

难度 新手--战士--老兵--大师

目标

  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

Dubbo学习系列之十八(Skywalking服务跟踪)_第1张图片

 

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

Dubbo学习系列之十八(Skywalking服务跟踪)_第2张图片

然后其他每个服务都类似操作,修改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文件中配置,但只能配一个!!感觉这配置就是个鸡肋。

Dubbo学习系列之十八(Skywalking服务跟踪)_第3张图片

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仪表盘总览:

Dubbo学习系列之十八(Skywalking服务跟踪)_第4张图片 Dubbo学习系列之十八(Skywalking服务跟踪)_第5张图片

 

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

Dubbo学习系列之十八(Skywalking服务跟踪)_第6张图片

 

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

Dubbo学习系列之十八(Skywalking服务跟踪)_第7张图片

 

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

Dubbo学习系列之十八(Skywalking服务跟踪)_第8张图片

2.5 日志接入

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

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

Dubbo学习系列之十八(Skywalking服务跟踪)_第9张图片

 

输出示例:

Dubbo学习系列之十八(Skywalking服务跟踪)_第10张图片

 

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

Dubbo学习系列之十八(Skywalking服务跟踪)_第11张图片


 

总结

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

 

全文完!

 

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

 


我的其他文章:

  • 1 Spring优雅整合Redis缓存
  • 2 SOFARPC模式下的Consul注册中心
  • 3 八种控制线程顺序的方法
  • 4 移动应用APP购物车(店铺系列二)
  • 5 H5开发移动应用APP(店铺系列一)

     只写原创,敬请关注 

Dubbo学习系列之十八(Skywalking服务跟踪)_第12张图片

你可能感兴趣的:(Dubbo学习系列之十八(Skywalking服务跟踪))