zoukankan      html  css  js  c++  java
  • 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.0agentskywalking-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.0webappwebapp.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-adminauthoritysrcmain esourcesconfiglogback-dev.xml中添加一个appender专用于skywalking:


     

    总结

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

     

    全文完!

     

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

     


    我的其他文章:

         只写原创,敬请关注 

  • 相关阅读:
    [语录]学习和知识建立于见解的多样性上
    [语录]要紧的是选择能干、诚实而且勤勉的人
    [EnterpriseServices]利用assembly定义我们的组件在COM+中的注册方式
    [EntLib]在SR.Strings中使用中文字符串资源
    如何让Win2000和XP SP1支持System.EnterpriseServices(XP已验证)
    [C#]使用HttpWebRequest请求远端服务器时如何加载SSL证书
    [纪事]再见,CodeArtist(下)
    [ZT]Google Web Accelerator 进一步的发展?
    [纪事]再见,CodeArtist
    [WiX]我的第一个WiX安装脚本
  • 原文地址:https://www.cnblogs.com/xxbiao/p/12722137.html
Copyright © 2011-2022 走看看