咱们知道,微服务不是独立的存在,不然就不须要微服务这个架构了,那么当发起一次请求,如何知道此次请求的轨迹,或者说遇到响应缓慢、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
难度: 新手--战士--老兵--大师浏览器
目标:缓存
步骤:
为了碰见各类问题,同时保持时效性,我尽可能使用最新的软件版本。源码地址:https://github.com/xiexiaobiao/vehicle-shop-admin
JavaAgent开启java探针(使用ASM字节码技术开发的工具),即运行在main方法以前的拦截器,简单讲就是动态代理和方法拦截器的组合,拦截并分析
请求/响应的信息。更多关于java探针的内容,在此不展开,略!
下载Skywalking,略!7.0.0版本以后编译好的二进制文件就是一个Window/Linux通用的包了,直接解压便可。
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文件中配置,但只能配一个!!感受这配置就是个鸡肋。
若是没有在apache-skywalking-apm-bin-7.0\webapp\webapp.yml中对 server: port: 8080 修改端口号,运行解压包下的 bin/startup 文件,
便可启动 Skywalking Server 端,打开浏览器地址便可:http://localhost:8080/
启动vehicleadmin项目,顺序:souladmin—>soulbootstrap—>redis—>authority—>customer—>stock—>order —>business, 进入WEBUI仪表盘总览:
服务拓扑图,能够展现服务、DB、缓存、网关信息,能够独立出单个服务显示:
调用链追踪,能够树形、表格、列表方式展现,好比显示 /order/list的跨度(span)信息和调用链信息,能够了解链路总耗时和span耗时:
点击一个链对象后展现的span信息,如下为一个dubbo调用实例:
若是须要在日志中打印,即手动埋点,也可使用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 进行存储展现,喜欢的就赶忙拿去用吧。
全文完!
原创文章,谢绝一切形式转载!
个人其余文章:
只写原创,敬请关注