链路追踪

文章40 |   阅读 30634 |   点赞0

来源:https://blog.csdn.net/weixin_42073629/category_9940428.html

SkyWalking 源码分析 —— 运维界面(一)之应用视角

x33g5p2x  于2021-12-21 转载在 其他  
字(1.5k)|赞(0)|评价(0)|浏览(660)

1. 概述

本文主要分享运维界面的第一部分,应用视角
SkyWalking WEBUI :https://github.com/apache/incubator-skywalking-ui

在我们打开 SkyWalking WEBUI 的首页时,如下图:

  • 以应用为维度进行展示。
  • 紫色部分,时间进度条,调用 「2. AllInstanceLastTimeGetHandler」 接口,获得应用实例最后心跳时间。大多情况下,我们进入该界面,看的是从最后心跳时间开始的应用调用情况。
  • 红色部分,应用调用拓扑图,初始化以 [ 实例最后心跳时间前一小时 , 实例最后心跳时间 ] 调用 「3. TraceDagGetHandler」 接口,获得数据,而后每 2 秒刷新一次,30 次刷新后,即过了 1 分钟后,数据范围向前走一分钟,为 [ 实例最后心跳时间前一小时 + 一分钟 , 实例最后心跳时间 + 一分钟 ]。
  • 通过进度条的【播放/暂停按钮】可以切换到暂停模式,切换时间范围,查看时间范围为一小时内的应用调用拓扑图。注意,一定要切换到【暂时模式】才可调整时间范围,在【播放模式】下,每次自动请求都会重设时间范围。
    基情提示:运维界面相关 HTTP 接口,逻辑简单易懂,笔者写的会比较简略一些。

2. AllInstanceLastTimeGetHandler

org.skywalking.apm.collector.ui.jetty.handler.time.AllInstanceLastTimeGetHandler ,实现 JettyHandler 接口,获得应用实例最后心跳时间处理器。代码如下:

  • #pathSpec() ,路径定义,"/time/allInstance" 。
  • 响应示例:

  • #doGet() 方法,代码如下:

  • 第 55 至 59 行:调用 TimeSynchronousService#allInstanceLastTime() 方法,获得应用实例最后心跳时间。

  • InstanceEsUIDAO#lastHeartBeatTime()

  • 第 61 至 65 行:减 5 秒,因为应用心跳是最频繁的,防止其他信息还没上传。

  • 第 68 至 69 行:返回数据。

3. TraceDagGetHandler

org.skywalking.apm.collector.ui.jetty.handler.TraceDagGetHandler ,实现 JettyHandler 接口,获得应用拓扑图数据逻辑处理器。

  • #pathSpec() ,路径定义,"traceDag" 。
  • 响应示例:

  • #doGet() 方法,代码如下:

  • 第 73 行:调用 TraceDagService#load(startTime, endTime) 方法,获得应用拓扑图数据。代码如下:

  • 第 53 行:调用 NodeComponentEsUIDAO#load(startTime, endTime) 方法,获得 NodeComponent JSON 数组。

  • 第 56 行:调用 NodeMappingEsUIDAO#load(startTime, endTime) 方法,获得 NodeMapping JSON 数组。

  • 第 59 行:调用 NodeReferenceEsUIDAO#load(startTime, endTime) 方法,获得 NodeReference JSON 数组。

  • 第 62 行:调用 TraceDagDataBuilder#build(nodeCompArray, nodesMappingArray, resSumArray) 方法,使用获得的 NodeComponent 、NodeMapping 、NodeReference 数据,构建应用拓扑图。逻辑较为繁琐,笔者已经添加注释,胖友调试一下,很容易明白滴。

相关文章