微服务架构已经是后端架构领域老生常谈的话题了,微服务治理、发现等技术已经在业界有了很多成熟的解决方案,Dubbo 作为一个社区认可度较高的微服务治理框架也在这个方面颇有建树。但是在微服务架构中,服务的数量和复杂度都远超过之前的单体架构,如何保证服务的稳定和高效运行呢?这时候,可观测性就显得尤为重要。

我们都知道 Dubbo 自身有指标监控[1],但仅聚焦在应用代码层面,同时指标只是可观测性主要的数据之一,我们还需要联合日志、追踪等数据共同去观测服务,才能去多维度保证服务的稳定性和可靠性,而 DeepFlow 具备在应用、网络及系统等多个层面采集指标、日志及追踪等数据的能力,同时可基于 AutoTagging 能力,为所有的数据注入上统一的标签,解决数据孤岛的问题。

所以我们基于 DeepFlow 构建了一个针对 Dubbo 协议的可观测性 Dashboard,分别提供在应用、网络及系统三个层面的监控视角,通过分析时延、错误及访问量,可快速定位突发性能瓶颈和异常流量,帮助我们快速排查故障。

01|Dashboard 概览

进入 Dashboard,我们可以通过变量切换来查看不同集群、不同命名空间下的应用服务情况。通过切换 Tap Side 变量,我们可以基于应用、网络及系统三个不同视角进行分析。

Variables

首先,我们在 Overview 通过总请求量客户端与服务端的异常服务拓扑查看集群内服务的概况,如果微服务规模较大,有助于先对集群中的服务运行状况有个大概把握。

Overview

接下来我们有网络层时延应用服务时延,当出现故障时,可以快速判断是哪个服务发生了异常,并结合时延查看高时延发生在网络还是应用层。

Overview-时延

02|排障与分析

对集群内应用服务有个大概的把握之后,我们可以接着看具体不同面板视角下的分析:

Connection:查看集群中 Consumer 视角以及 Provider 视角对比分析 RequestResponse 的请求、响应速率,我们通过两端请求量与响应量对比判断连接情况:如果请求明显大于响应,说明服务端异常,大量消息无法回复。此时可以结合服务拓扑,快速定位哪两个应用之间发生了异常

Connections

Delay:找到目标应用之后,我们还可以继续分析时延发生的过程,通过基于ProviderConsumer 两端视角的时延序列分析 P90/P95/P99 指标,我们可以判断故障对应用集群的影响程度大小:如果发生故障时,P9x 指标维持在一个较低值,说明有 9x%的用户保证了正常使用,准确的判断有助于我们做出优秀的决策。根据高时延发生的时间点,我们可以结合基础设施、应用的变更情况判断是否某次变更引起了异常。

Delay

Error:掌握了连接时延信息之后,我们再来分析应用服务间异常的时序,这样可以更清晰地分析是否发生错误导致服务无法响应,从而产生了高时延,让我们能够快速定位具体异常位置。

Error

通过上方的错误分析,我们发现在这个时间段 Provider 有大量 Error ,根据错误码与错误异常汇总结合,发现错误为 BAD_RESPONSE 服务端异常,结合 Consumer 视角的错误概览,我们可以明确断定异常发生在 web-shop 应用与 svc-order 的调用之间,且就在 svc-order 内部发生了大量错误。

Request Log Analysis:最后我们根据请求调用日志分析访问量大小与发生时间点,对 TopN 访问量结合服务访问量时延分析,发现 OrderService 内仅有 createOrder 一个函数有大量请求。

Request Log

对高时延请求(>100ms)的调用链分析,快速定位应用、网络及系统的瓶颈问题,找到发生异常的具体位置。

Distributed Tracing

经过时延异常调用日志分析,我们知道这些大量的错误就是发生在 createOrder 这个函数内,由于错误数调用次数不对等,我们还可以断定这个错误是由某个业务条件错误而引发的,我们只需要直接查看这个函数修改代码并解决问题即可。

最后有个彩蛋:在文章的开头,我们提过 Dubbo 有指标监控[2],那我们是否可以将 Dubbo 提供的指标与我们的可观测面板结合起来呢?当然!我们已经支持了集成 Prometheus[3],而且我们也支持 PromQL 查询,请期待我们即将推出的基于 PromQL 搭建指标监控的功能,在 DeepFlow 体验丝滑的可观测能力。

03|什么是 DeepFlow

DeepFlow[4] 是一款开源的高度自动化的可观测性平台,是为云原生应用开发者建设可观测性能力而量身打造的全栈、全链路、高性能数据引擎。DeepFlow 使用 eBPF、WASM、OpenTelemetry 等新技术,创新的实现了 AutoTracing、AutoMetrics、AutoTagging、SmartEncoding 等核心机制,帮助开发者提升埋点插码的自动化水平,降低可观测性平台的运维复杂度。利用 DeepFlow 的可编程能力和开放接口,开发者可以快速将其融入到自己的可观测性技术栈中。

GitHub 地址:https://github.com/deepflowio/deepflow

访问 DeepFlow Demo[5],体验高度自动化的可观测性新时代。

参考资料

[1]指标监控: https://cn.dubbo.apache.org/zh-cn/overview/reference/metrics/standard_metrics/

[2]指标监控: https://cn.dubbo.apache.org/zh-cn/overview/reference/metrics/standard_metrics/

[3]集成 Prometheus: https://deepflow.io/docs/zh/agent-integration/metrics/prometheus/

[4]DeepFlow: https://github.com/deepflowio/deepflow

[5]DeepFlow Demo: https://deepflow.yunshan.net/docs/zh/install/overview/

使用 DeepFlow 开启 Dubbo 可观测性相关推荐

  1. 如何开启Dubbo框架内部的日志?

    为什么80%的码农都做不了架构师?>>>    欢迎加入DUBBO交流群:259566260 这里将对如何在自己的项目里面开启dubbo框架自己的日志,并对输出的日志进行控制.在讲这 ...

  2. 开启dubbo之旅——Dubbo Admin(新版)

    正经学徒,佛系记录,不搞事情 根据dubbo官网的指示,来到了Dubbo ops,这个其实可以理解为zookeeper的可视化界面,就像是springcloud的eureka提供的可视化界面,可以直观 ...

  3. 基于 eBPF 的云原生可观测性深度实践

    本文整理自云杉网络 DeepFlow 产品负责人向阳在 QCon 2023 的演讲分享,主题为 "基于 eBPF 的云原生可观测性深度实践". 分享从四个方面展开.第一部分回顾分布 ...

  4. dubbo 单元测试_技术分享——一路踩坑构建Dubbo源码

    源码环境 随着目前对技术栈的求知欲,也开始入手Dubbo源码啦!!! 构建源码第一步: 必备开发环境:Java 1.5 以上的版本:Maven 2.2.1 或者以上的版本: 官网下载源代码 官网构建文 ...

  5. Spring boot整合dubbo

    GitHub dubbo的GitHub地址 https://github.com/apache/incubator-dubbo dubbo场景启动器 https://github.com/apache ...

  6. dubbo consumer 端口_基于Springboot+Dubbo+Nacos 注解方式实现微服务调用

    今天跟大家分享基于Springboot+Dubbo+Nacos 注解方式实现微服务调用的知识. 1 项目结构 |-- spring-boot-dubbo-demo (父级工程) |-- spring- ...

  7. Dubbo与SpringBoot整合流程(从实例入手,附代码下载)

    场景 Dubbo环境搭建-管理控制台dubbo-admin实现服务监控: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/10362 ...

  8. SpringBoot + Dubbo + Zookeeper搭建一个简单的分布式服务

    本文使用SpringBoot + Dubbo + Zookeeper 来搭建一个简单的分布式服务 文章目录 dubbo-spring-boot-starter 如何发布 Dubbo 服务 如何消费 D ...

  9. 一路踩坑构建Dubbo源码

    dubbo构建 源码环境 构建 快速启动 总结 源码环境 随着溪源目前对技术栈的求知欲,也开始入手Dubbo源码啦!!! 构建源码第一步: 必备开发环境:Java 1.5 以上的版本:Maven 2. ...

最新文章

  1. 嵌入式学习笔记之XMODEM
  2. Linux管道指令(pipe)与shell 重定向的区别
  3. MapReduce的优化
  4. BZOJ4569: [Scoi2016]萌萌哒
  5. platform设备驱动全透析
  6. #我要10000+# 计划启动啦!让文章拥有更多曝光~
  7. Surrounded Regions
  8. golang Println、Printf、Sprintf的区别
  9. mate7 刷机 android 7,Mate7 四大版本完整稳定版刷机包大集合!
  10. Numpy 模块的使用
  11. MultiRow发现之旅(五)- MultiRow版俄罗斯方块(exe + 源码)
  12. android 按键上报流程,input子系统详解,按键如何上报
  13. eve-ng 添加dynamips镜像文件
  14. 北京极通EWebs与服务器蓝屏死机
  15. w3school离线文档分享。
  16. python爬虫——web前端基础(4)
  17. 人工智能:智能优化算法
  18. a.c:5:5: warning: ignoring return value of ‘scanf’, declared with attribute warn_unused_result [-Wun
  19. ps CS6 不能直接拖入图片的问题!!win8 系统下
  20. android n 状态栏分析,Android N状态栏图标白底问题

热门文章

  1. win10无法连接这个网络的解决方案【亲测有效】
  2. windows下的谷歌翻译(Google Translate SDK)使用
  3. 解决 “您必须首先安装.NETFramework的以下版本“
  4. BIRTV 2018媒体融合峰会:TVU CEO演讲干货分享
  5. vue 公共列表选择组件,引用museUI的样式
  6. 如何两周学会Python 第00天
  7. IPMP国际项目管理资质认证培训班
  8. 使用微信开发工具制作一个简单的古诗词展示微信小程序
  9. C语言变量常量和标识符
  10. 什么游戏蓝牙耳机好?专业电竞玩家教你如何选择