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

本文详细解析了SkyWalking WEBUI中应用实例视角的运维界面,包括时间进度条、应用列表、实例健康信息获取等关键接口的工作原理。通过实例展示了如何获取应用实例的最后心跳时间、应用列表、健康状态以及实例指标,并解释了接口背后的数据查询逻辑。此外,还介绍了如何通过操作界面调整时间范围以查看应用调用拓扑图。
摘要由CSDN通过智能技术生成

1. 概述

本文主要分享运维界面的第二部分,应用实例视角

SkyWalking WEBUI :https://github.com/apache/incubator-skywalking-ui

在我们打开 SkyWalking WEBUI 的 Instance Override ( health/health.html ) 页时,如下图:

  • 以应用实例为维度进行展示。
  • 红色部分,时间进度条,调用 「2. AllInstanceLastTimeGetHandler」 接口,获得应用实例最后心跳时间。大多情况下,我们进入该界面,看的是从最后心跳时间开始的应用调用情况。
  • 绿色部分,应用列表,初始化以 [ 实例最后心跳时间前一小时 , 实例最后心跳时间 ] 调用 「3. ApplicationsGetHandler」 接口,获得范围数据,而后每 4 秒刷新一次,数据范围向前走 4 秒( 时间进度条是走 2 次 2 秒 ),为 [ 实例最后心跳时间前一小时 + 四秒 , 实例最后心跳时间 + 四秒 ]。
  • 红色部分,【点击任意应用】,应用实例列表,调用 「4. InstanceHealthGetHandler」 接口,获得当前时间数据,而后每 2 秒刷新一次。
  • 通过进度条的【播放/暂停按钮】可以切换到暂停模式,切换时间范围,查看时间范围为一小时内的应用调用拓扑图。注意,一定要切换到【暂时模式】才可调整时间范围,在【播放模式】下,每次自动请求都会重设时间范围。

在我们【点击任意应用实例】,打开 SkyWalking WEBUI 的 Instance ( instance/instance.html ) 页时,如下图:

  • 单个应用实例为维度进行展示。
  • 橘色部分,应用实例指标,初始化以 [ 打开页面时间前五分钟 , 打开页面时间 ] 调用 「5. InstanceMetricGetRangeTimeBucketHandler」 接口,获得范围数据。
  • 红色部分,【点击 auto 开关】,每 1 秒刷新一次,数据范围向前走 1 秒,为 [ 打开页面时间 + 一秒 , 打开页面时间 + 一秒 ],获得每秒增量数据。

基情提示:运维界面相关 HTTP 接口,逻辑简单易懂,笔者写的会比较简略一些。

2. AllInstanceLastTimeGetHandler

同 《SkyWalking 源码分析 —— 运维界面(一)之应用视角》「2. AllInstanceLastTimeGetHandler」 相同。

3. ApplicationsGetHandler

org.skywalking.apm.collector.ui.jetty.handler.application.ApplicationsGetHandler ,实现 JettyHandler 接口,获得应用列表逻辑处理器。

4. InstanceHealthGetHandler

org.skywalking.apm.collector.ui.jetty.handler.instancehealth.InstanceHealthGetHandler ,实现 JettyHandler 接口,获得应用的应用实例健康相关信息数组。

  • #pathSpec() ,路径定义,"/instance/health/applicationId" 。
  • 响应示例:

  • #doGet() 方法,代码如下:
    • 第 58 至 62 行:解析 timeBucket 参数,秒级。
    • 第 65 至 72 行:解析 applicationIds 参数,应用编号数组
    • 第 75 至 79 行:返回字段设置。
    • 第 82 至 85 行:循环应用编号数组,调用 InstanceHealthService#getInstances(timeBucket, applicationId) 方法,获得应用的应用实例健康相关信息数组。代码如下:
      • 第 80 行:获得指定时间内的 5 秒内的数组,倒序。为什么?见下文的 InstPerformance 的查询。
      • 第 81 至 82 行:调用 InstanceEsUIDAO#getInstances(applicationId, timeBucket) 方法,查询查询半小时内有心跳的 Instance 数组。
      • 第 90 行:循环 Instance 数组,逐个查询应用实例的健康相关信息。
      • 第 98 行:调用 InstPerformanceEsUIDAO#get(timeBuckets, instanceId) 方法,查询应用实例五秒内的( timeBuckets )的 InstPerformance 累加数据。
        • 第 100 至 105 行:基于 InstPerformance 数据,设置 tps 返回字段。
        • 第 108 至 121 行:基于 InstPerformance 数据,设置 avg 和 healthLevel 返回数据。
      • 第 124 至 130 行:基于 Instance 数据,设置应用实例是否存活( 两分钟内是否有心跳 )。
      • 第 133 至 135 行:调用 GCMetricEsUIDAO#getGCCount(timeBuckets, instanceId) 方法,查询应用实例五秒内的( timeBuckets )的 GCCount 累加数据,设置 ygc 和 ogc 返回字段。

5. InstanceMetricGetRangeTimeBucketHandler

org.skywalking.apm.collector.ui.jetty.handler.instancemetric.InstanceMetricGetRangeTimeBucketHandler ,实现 JettyHandler 接口,获得应用实例指定时间范围内的 Metric 信息。

  • #pathSpec() ,路径定义,"/instance/jvm/instanceId/rangeBucket" 。
  • 响应示例:

  • #doGet() 方法,代码如下:
    • 第 60 至 74 行:解析 startTimeBucket 和 endTimeBucket 参数,秒级。
    • 第 77 至 88 行:解析 instanceId 参数,应用实例编号。
    • 第 84 至 92 行:解析 metricTypes 数组。
    • 第 94 行:调用 InstanceJVMService#getInstanceJvmMetrics(instanceId, metricTypes, startTimeBucket, endTimeBucket) 方法,获得应用实例指定时间范围内的 Metric 信息,涉及 GCMetric 、InstPerformanceMetric 、MemoryMetric 、MemoryPoolMetric 数据表。代码比较简单易懂( 笔者太懒了 ),胖友自己阅读理解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值