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
难度: 新手--战士--老兵--大师
目标:
- 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 进行存储展示,喜欢的就赶紧拿去用吧。
全文完!
原创文章,谢绝一切形式转载!
我的其他文章:
只写原创,敬请关注

Dubbo学习系列之十八(Skywalking服务跟踪)的更多相关文章
- Dubbo学习系列之十五(Seata分布式事务方案TCC模式)
上篇的续集. 工具: Idea201902/JDK11/Gradle5.6.2/Mysql8.0.11/Lombok0.27/Postman7.5.0/SpringBoot2.1.9/Nacos1.1 ...
- Dubbo学习系列之十二(Quartz任务调度)
Quartz词义为"石英"水晶,然后聪明的人类利用它发明了石英手表,因石英晶体在受到电流影响时,它会产生规律的振动,于是,这种时间上的规律,也被应用到了软件界,来命名了一款任务调度 ...
- Dubbo学习系列之十六(ELK海量日志分析框架)
外卖公司如何匹配骑手和订单?淘宝如何进行商品推荐?或者读者兴趣匹配?还有海量数据存储搜索.实时日志分析.应用程序监控等场景,Elasticsearch或许可以提供一些思路,作为业界最具影响力的海量搜索 ...
- Dubbo学习系列之十(Sentinel之限流与降级)
各位看官,先提个问题,如果让你设计一套秒杀系统,核心要点是啥???我认为有三点:缓存.限流和分离.想当年12306大面积崩溃,还有如今的微博整体宕机情况,感觉就是限流降级没做好,"用有限的资 ...
- Dubbo学习系列之十四(Seata分布式事务方案AT模式)
一直说写有关最新技术的文章,但前面似乎都有点偏了,只能说算主流技术,今天这个主题,我觉得应该名副其实.分布式微服务的深水区并不是单个微服务的设计,而是服务间的数据一致性问题!解决了这个问题,才算是把分 ...
- Dubbo学习系列之十七(微服务Soul网关)
论起微服务,哪能不谈网关,老将有Zuul,后继有Gateway,但这些都和SpringCloud关系密切,其他网关如Kong,因Lua原因,玩起来略不顺手.这不,就来了个Soul,我顺便拿来整进了我在 ...
- Dubbo学习系列之十一(Dashboard+Nacos规则推送)
中国武术,门派林立,都是号称多少代的XXX传人,结果在面对现代武术时,经常被KO秒杀,为啥,光靠宣传和口号撑门面,终究是靠不住,必须得有真货 ,得经得住考验,所以不能只说Sentinel有多好,也得给 ...
- Dubbo学习系列之十三(Mycat数据库代理)
软件界有只猫,不用我说,各位看官肯定知道是哪只,那就是大名鼎鼎的Tomcat,现在又来了一只猫,据说是位东方萌妹子,暂且认作Tom猫的表妹,本来叫OpencloudDB,后又改名为Mycat,或许Ca ...
- Dubbo学习系列之八(分布式事务之MQ方案)
自从小王玩起了微服务,发现微服务果然很强大,好处真是太多,心中暗喜,然而,却也遇到了分布式中最棘手的问题:分布式事务.小王遍访各路神仙,也无个完美开源解决方案,当然,也有些实际可行的手法,虽不算完美, ...
随机推荐
- C/C++、C#、JAVA(二):基本类型和转换操作
基本类型和转换操作 数据类型 C语言中的基本类型如下. 类型 存储大小 值范围 char 1 字节 -128 到 127 或 0 到 255 unsigned char 1 字节 0 到 255 si ...
- 在linux系统中安装LANMP
1.安装LANMP步骤 root@kali:~# wget http://dl.wdlinux.cn/files/lanmp_v3.tar.gz #下载 root@kali:~# tar xzvf l ...
- 【简介】OpenOCD 由jtag操作到parport driver流程
1. 定义 jtag_command_type 在 OpenOCD 中,JTag 命令在枚举 jtag_command_type 中定义,定义如下: /** * The type of the @c ...
- 推荐一款优秀的web自动化测工具
在业务使用的自动化测试工具很多.有开源的,有商业化的,各有各得特色,各有各得优点!下面我就介绍几个我用过的一款非常优秀的国产自动化测试工具.在现有的自动化软件当中,都是以元素的name.id.xpat ...
- 洛谷P1957口算练习题题解
前言: 题目传送门:https://www.luogu.com.cn/problem/P1957 其实这很简单 纯模拟撒~~~~ 正文开始: _话说 ,就当本蒟蒻正高高兴兴的刷水题时,居然 碰到了这个 ...
- 进制-Iterative-进制转换
2019-12-02 21:15:31 进制转换是计算机科学里的一个基础算法,通常可以使用如下的模版来进行计算. 下面我们来讨论一些关于进制的题目. 1271. Hexspeak 问题描述: 问题求 ...
- 汉诺塔Java实现
public class Hanoi { public static void main(String[] args ) { Hanoi hanoi = new Hanoi(); hanoi.hano ...
- FaceBook 发布星际争霸最大 AI 数据集
简介 我们刚发布了最大的星际争霸:Brood War 重播数据集,有 65646 个游戏.完整的数据集经过压缩之后有 365 GB,1535 million 帧,和 496 million 操作动作. ...
- 移动深度学习 Mobile-deep-learning(MDL)
Free and open source mobile deep learning framework, deploying by Baidu. This research aims at simpl ...
- coding++:快速构建 kindeditor 富文本编辑器(一)
此案例 demo 为 SpringBoot 开发 1.官网下载相关资源包:http://kindeditor.net/down.php 2.编写页面(引入相关JS) <!DOCTYPE html ...