Skywalking微服务监控分析( 二 )


Skywalking微服务监控分析

文章插图
 
假设Agent端将所有数据发送到后端Collector处,A采样率设置为30%,B采样率为50% 。
假设有30%的数据,发送到A上,这些数据被全部正确接受并存储,极端情况(与期望的采样数据量相同)下,如果剩下20%待采样的数据发送到了B,这个时候一切都是正常的,如果这20%中有一部分数据被送到了A那么,这些数据将是被忽略的,由此就会造成数据丢失 。
二、业务调用链路监控Service Topology监控
调用链路监控可以从两个角度去看待 。我们先从整体上来认识一下我们所监控的系统 。
通过给服务添加探针并产生实际的调用之后,我们可以通过Skywalking的前端UI查看服务之间的调用关系 。
我们简单模拟一次服务之间的调用 。新建两个服务,service-provider以及service-consumer,服务之间简单的通过Feign Client 来模拟远程调用 。
Skywalking微服务监控分析

文章插图
 
从图中可以看到:
有两个服务节点:provider & consumer
有一个数据库节点:localhost【mysql】
一个注册中心节点
consumer消费了provider提供出来的接口 。
一个系统的拓扑图让我们清晰的认识到系统之间的应用的依赖关系以及当前状态下的业务流转流程 。细心的可能发现图示节点consumer上有一部分是红色的,红色是什么意思呢?
红色代表当前流经consumer节点的请求有一断时间内是响应异常的 。当节点全部变红的时候证明服务现阶段内就彻底不可用了 。运维人员可以通过Topology迅速发现某一个服务潜在的问题,并进行下一步的排查并做到预防 。
Skywalking Trace监控
Skywalking通过业务调用监控进行依赖分析,提供给我们了服务之间的服务调用拓扑关系、以及针对每个endpoint的trace记录 。
我们在之前看到consumer节点服务中发生了错误,让我们一起来定位下错误是发生在了什么地方又是什么原因呢?
Skywalking微服务监控分析

文章插图
 
在每一条trace的信息中都可以看到当前请求的时间、GloableId、以及请求被调用的时间 。我们分别看一看正确的调用和异常的调用 。
Trace调用链路监控
Skywalking微服务监控分析

文章插图
 
图示展示的是一次正常的响应,这条响应总耗时19ms,它有4个span:
  • span1 /getStore = 19ms 响应的总流转时间
  • span2 /demo2/stores = 14ms feign client 开始调用远程服务后的响应的总时间
  • span3 /stores = 14ms 接口服务响应总时间
  • span4 Mysql = 1ms 服务提供端查询数据库的时间
这里span2和span3的时间表现相同,其实是不同的,因为这里时间取了整 。
在每个Span中可以查看当前Span的相关属性 。
  • 组件类型: SpringMVC、Feign
  • Span状态: false
  • HttpMethod: GET
  • Url: http://192.168.16.125:10002/demo2/stores

Skywalking微服务监控分析

文章插图
 
这是一次正常的请求调用Trace日志,可能我们并不关心正常的时候,毕竟一切正常不就是我们期待的么!
我们再来看下,异常状态下我们的Trace以及Span又是什么样的呢 。
Skywalking微服务监控分析

文章插图
 
发生错误的调用链中Span中的is error标识变为true,并且在名为Logs的TAB中可以看到错误发生的具体原因 。根据异常情况我们就可以轻松定位到影响业务的具体原因,从而快速定位问题,解决问题 。
通过Log我们看到连接被拒,那么可能是我们的网络出现了问题(可能性小,因为实际情况如果网络出现问题我们连这个trace都看不到了),也有可能是服务端配置问题无法正确建立连接 。通过异常日志,我们迅速就找到了问题的关键 。
实际情况是,我把服务方停掉了,做了一次简单的模拟 。可见,通过拓扑图示我们可以清晰的看到众多服务中哪个服务是出现了问题的,通过trace日志我们可以很快就定位到问题所在,在最短的时间内解决问题 。
三、服务性能指标监控Skywalking还可以查看具体Service的性能指标,根据相关的性能指标可以分析系统的瓶颈所在并提出优化方案 。
Skywalking 性能监控
在服务调用拓扑图上点击相应的节点我们可以看到该服务的
SLA: 服务可用性(主要是通过请求成功与失败次数来计算)


推荐阅读