如何使用 SkyWalking 给 Dubbo 服务做链路追踪?

点击上方“芋道源码”,选择“置顶公众号”

技术文章第一时间送达!

源码精品专栏

 

来源:http://t.cn/EyQa9Cs

  • Apache Skywalking(Incubator)简介

  • Dubbo与Apache Skywalking(Incubator)

    • 编写Dubbo示例程序

    • 部署Apache Skywalking(Incubator)

  • Skywalking监控截图:

    • 首页

    • 拓扑图

    • 应用视图

    • 服务视图

    • Trace视图

    • 告警视图


Apache Skywalking(Incubator)简介

Apache Skywalking(Incubator) 专门为微服务架构和云原生架构系统而设计并且支持分布式链路追踪的APM系统。Apache Skywalking(Incubator)通过加载探针的方式收集应用调用链路信息,并对采集的调用链路信息进行分析,生成应用间关系和服务间关系以及服务指标。Apache Skywalking (Incubating)目前支持多种语言,其中包括Java,.Net Core,Node.js和Go语言。

目前Skywalking已经支持从6个可视化维度剖析分布式系统的运行情况。

  • 总览视图是应用和组件的全局视图,其中包括组件和应用数量,应用的告警波动,慢服务列表以及应用吞吐量;

  • 拓扑图从应用依赖关系出发,展现整个应用的拓扑关系;

  • 应用视图则是从单个应用的角度,展现应用的上下游关系,TopN的服务和服务器,JVM的相关信息以及对应的主机信息。

  • 服务视图关注单个服务入口的运行情况以及此服务的上下游依赖关系,依赖度,帮助用户针对单个服务的优化和监控;

  • 调用链展现了调用的单次请求经过的所有埋点以及每个埋点的执行时长;

  • 告警视图根据配置阈值针对应用、服务器、服务进行实时告警。

Dubbo与Apache Skywalking(Incubator)

编写Dubbo示例程序

Dubbo实例程序已上传到Github仓库中。方便大家下载使用。

API工程

服务接口:

package org.apache.skywalking.demo.interfaces;

public interface HelloService {
    String sayHello(String name);
}

Dubbo服务提供工程

package org.apache.skywalking.demo.provider;

@Service(version = "${demo.service.version}",
    application = "${dubbo.application.id}",
    protocol = "${dubbo.protocol.id}",
    registry = "${dubbo.registry.id}", timeout = 60000)
public class HelloServiceImpl implements HelloService {

    public String sayHello(String name) {
        LockSupport.parkNanos(TimeUnit.SECONDS.toNanos(1));
        return "Hello, " + name;
    }

}

Consumer工程

package org.apache.skywalking.demo.consumer;

@RestController
public class ConsumerController {

    private static int COUNT = 0;

    @Reference(version = "${demo.service.version}",
        application = "${dubbo.application.id}",
        url = "dubbo://localhost:20880", timeout = 60000)
    private HelloService helloService;

    @GetMapping("/sayHello/{name}")
    public String sayHello(@PathVariable(name = "name") String name) {
        if ((COUNT++) % 3 == 0){
            throw new RuntimeException();
        }
        LockSupport.parkNanos(TimeUnit.SECONDS.toNanos(2));
        return helloService.sayHello(name);
    }
}

部署Apache Skywalking(Incubator)

Apache Skywalking(Incubator)共提供两种部署模式:单节点模式和集群模式,以下为单节点模式部署步骤,集群模式部署详情参考文档。

依赖第三方组件

  1. JDK8+

  2. Elasticsearch 5.x

部署步骤

  1. 下载 Apache Skywalking Collector

  2. 部署ElasticSearch

  • 修改elasticsearch.yml文件,并设置cluster.name设置成CollectorDBCluster。此名称需要和collector配置文件一致。

  • 修改ES配置network.host值,将network.host的值修改成0.0.0.0

  • 启动Elasticsearch

  1. 解压并启动Skywalking Collector。运行bin/startup.sh命令即可启动Skywalking Collector

启动示例程序

在启动示例程序之前,执行编译打包的命令:

./mvnw clean package

启动服务提供端

java -jar -javaagent:$AGENT_PATH/skywalking-agent.jar -Dskywalking.agent.application_code=dubbo-provider -Dskywalking.collector.servers=localhost:10800 dubbo-provider/target/dubbo-provider.jar

启动服务消费端

java -jar -javaagent:$AGENT_PATH/skywalking-agent.jar -Dskywalking.agent.application_code=dubbo-consumer -Dskywalking.collector.servers=localhost:10800 dubbo-consumer/target/dubbo-consumer.jar 

访问消费端提供的服务

curl http://localhost:8080/sayHello/test

Skywalking监控截图:

首页

640?wx_fmt=png
/admin-guide/images/skywalking-dashboard.png

拓扑图

640?wx_fmt=png
/admin-guide/images/skywalking-topology.png

应用视图

640?wx_fmt=png
/admin-guide/images/skywalking-application.png

JVM信息

640?wx_fmt=png
/admin-guide/images/skywalking-application_instance.png

服务视图

服务消费端:

640?wx_fmt=png
/admin-guide/images/skywalking-service-consumer.png

服务提供端:

640?wx_fmt=png
/admin-guide/images/skywalking-service-provider.png

Trace视图

640?wx_fmt=png
/admin-guide/images/skywalking-trace.png

Span信息:

640?wx_fmt=png
/admin-guide/images/skywalking-span-Info.png

告警视图

640?wx_fmt=png
/admin-guide/images/skywalking-alarm.png




欢迎加入我的知识星球,一起探讨架构,交流源码。加入方式,长按下方二维码噢

640

已在知识星球更新源码解析如下:

  • 《精尽 Dubbo 源码解析系列》69 篇。

  • 《精尽 Netty 源码解析系列》61 篇。

  • 《精尽 Spring 源码解析系列》35 篇。

  • 《精尽 Spring MVC 源码解析系列》24 篇。

  • 《精尽 MyBatis 源码解析系列》34 篇。

  • 《数据库实体设计》17 篇。


目前在知识星球更新了《Dubbo 源码解析》目录如下:

01. 调试环境搭建
02. 项目结构一览
03. 配置 Configuration
04. 核心流程一览

05. 拓展机制 SPI

06. 线程池

07. 服务暴露 Export

08. 服务引用 Refer

09. 注册中心 Registry

10. 动态编译 Compile

11. 动态代理 Proxy

12. 服务调用 Invoke

13. 调用特性 

14. 过滤器 Filter

15. NIO 服务器

16. P2P 服务器

17. HTTP 服务器

18. 序列化 Serialization

19. 集群容错 Cluster

20. 优雅停机

21. 日志适配

22. 状态检查

23. 监控中心 Monitor

24. 管理中心 Admin

25. 运维命令 QOS

26. 链路追踪 Tracing

... 一共 69+ 篇

目前在知识星球更新了《Netty 源码解析》目录如下:

01. 调试环境搭建
02. NIO 基础
03. Netty 简介
04. 启动 Bootstrap

05. 事件轮询 EventLoop

06. 通道管道 ChannelPipeline

07. 通道 Channel

08. 字节缓冲区 ByteBuf

09. 通道处理器 ChannelHandler

10. 编解码 Codec

11. 工具类 Util

... 一共 61+ 篇


目前在知识星球更新了《数据库实体设计》目录如下:


01. 商品模块
02. 交易模块
03. 营销模块
04. 公用模块

... 一共 17+ 篇


目前在知识星球更新了《Spring 源码解析》目录如下:


01. 调试环境搭建
02. IoC Resource 定位
03. IoC BeanDefinition 载入

04. IoC BeanDefinition 注册

05. IoC Bean 获取

06. IoC Bean 生命周期

... 一共 35+ 篇


目前在知识星球更新了《Spring MVC 源码解析》目录如下:


01. Spring MVC 面试题
02. Spring MVC 学习指南
03. 调试环境搭建
04. 容器的初始化
05. 组件一览
06. 请求处理一览
07. HandlerMapping 组件
08. HandlerAdapter 组件
09. HandlerExceptionResolver 组件
10. RequestToViewNameTranslator 组件
11. LocaleResolver 组件
12. ThemeResolver 组件
13. ViewResolver 组件

14. MultipartResolver 组件

15. FlashMapManager 组件

... 一共 24+ 篇


目前在知识星球更新了《MyBatis 源码解析》目录如下:


01. 调试环境搭建
02. 项目结构一览
03. MyBatis 面试题合集

04. MyBatis 学习资料合集

05. MyBatis 初始化

06. SQL 初始化

07. SQL 执行

08. 插件体系

09. Spring 集成

... 一共 34+ 篇


源码不易↓↓↓

点赞支持老艿艿↓↓

在Spring Cloud Alibaba中,可以使用SkyWalking进行链路追踪SkyWalking是一个开源的APM(应用程序性能管理)系统,支持多语言和多框架,包括Java、.NET Core、Node.js等。下面简单介绍如何使用SkyWalking进行链路追踪: 1. 添加依赖 在Spring Boot项目中,需要添加以下依赖: ```xml <dependency> <groupId>org.apache.skywalking</groupId> <artifactId>apm-toolkit-trace</artifactId> <version>${skywalking.version}</version> </dependency> <dependency> <groupId>org.apache.skywalking</groupId> <artifactId>apm-toolkit-logback-1.x</artifactId> <version>${skywalking.version}</version> <scope>runtime</scope> </dependency> ``` 其中${skywalking.version}可以根据需要自行指定。 2. 配置SkyWalking 在Spring Boot项目中,可以通过application.properties或application.yml配置文件进行配置。以下是一个示例: ```yml # SkyWalking配置 skywalking: # SkyWalking OAP地址 address: 127.0.0.1:11800 # 应用名称 application-name: my-application ``` 其中,address指定了SkyWalking OAP的地址,application-name指定了应用的名称。 3. 启用SkyWalking 在Spring Boot项目中,可以通过注解@EnableSkyWalking来启用SkyWalking。例如: ```java @SpringBootApplication @EnableSkyWalking public class MyApplication { public static void main(String[] args) { SpringApplication.run(MyApplication.class, args); } } ``` 4. 查看链路追踪数据 启动应用后,可以在SkyWalking控制台中查看链路追踪数据。打开浏览器并输入http://localhost:8080进入SkyWalking控制台,查看应用的链路追踪数据。 以上是使用SkyWalking进行链路追踪的基本步骤,具体使用过程中可以根据需要进行配置和调整。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值