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方案)
自从小王玩起了微服务,发现微服务果然很强大,好处真是太多,心中暗喜,然而,却也遇到了分布式中最棘手的问题:分布式事务.小王遍访各路神仙,也无个完美开源解决方案,当然,也有些实际可行的手法,虽不算完美, ...
随机推荐
- Fink SQL 实践之OVER窗口
问题场景 Flink SQL 是一种使用 SQL 语义设计的开发语言,用它解决具体业务需求是一种全新体验,类似于从过程式编程到函数式编程的转变一样,需要一个不断学习和实践的过程.在看完了 Flink ...
- SSM整合搭建(二)
本页来衔接上一页继续来搭建SSM,再提一下大家如果不详细可以再去看视频哦,B站就有 之后我们来配置SpringMVC的配置文件,主要是配置跳转的逻辑 先扫描所有的业务逻辑组件 我们要用SpringMV ...
- java-字节流练习(新手)
参考手册: 关键字: FileInputStream() Input是从硬盘到内存 FileOutputStream() 而output是从内存到硬盘,所以实现了复制粘贴. read() 调用方法读取 ...
- 基于Jquery WeUI的微信开发H5页面控件的经验总结(2)
在微信开发H5页面的时候,往往借助于WeUI或者Jquery WeUI等基础上进行界面效果的开发,由于本人喜欢在Asp.net的Web界面上使用JQuery,因此比较倾向于使用 jQuery WeUI ...
- 从零开始学习R语言(二)——数据结构之“因素(Factor)”
本文首发于知乎专栏:https://zhuanlan.zhihu.com/p/60101041 也同步更新于我的个人博客:https://www.cnblogs.com/nickwu/p/125370 ...
- jwt(JSON Web Tokens)的一道题目代码分析
题目链接https://github.com/wonderkun/CTF_web/tree/5b08d23ba4086992cbb9f3f4da89a6bb1346b305/web300-6 参考链接 ...
- Mysql数据库设置权限
这里使用cmd窗口进行权限设置. 以管理员账号连接数据库 创建数据库 create database 数据库名字 default charset=utf8; 查看用户 select user,host ...
- spring boot项目打war包
1.如果有本地依赖,添加本地依赖到maven <!--lib目录下的jar包--> <dependency> <groupId>com.dm</groupId ...
- Building Applications with Force.com and VisualForce(Dev401)( 九):Designing Applications for Multiple Users: Putting It All Together
Module Objectives1.Apply profiles, organization wide defaults, role hierarchy and sharing to given a ...
- coding++:java操作 FastDFS(上传 | 下载 | 删除)
开发工具 IDEAL2017 Springboot 1.5.21.RELEASE --------------------------------------------------------- ...