您当前的位置:首页 > 电脑百科 > 程序开发 > 架构

Skywalking微服务监控分析

时间:2020-01-04 11:47:41  来源:  作者:
Skywalking微服务监控分析

 

转载本文需注明出处:微信公众号EAWorld,违者必究。

引言:

微服务框架落地后,分布式部署架构带来的问题就会迅速凸显出来。服务之间的相互调用过程中,如果业务出现错误或者异常,如何快速定位问题?如何跟踪业务调用链路?如何分析解决业务瓶颈?...本文我们来看看如何解决以上问题。

目录:

一、SkyWalking初探

二、业务调用链路监控

三、服务性能指标监控

四、服务告警

一、SkyWalking初探

Skywalking 简介

Skywalking是一款国内开源的应用性能监控工具,支持对分布式系统的监控、跟踪和诊断。

它提供了如下的主要功能特性:

Skywalking微服务监控分析

 

Skywalking 技术架构

Skywalking微服务监控分析

 

SW总体可以分为四部分:

1.Skywalking Agent:使用JAVAagent做字节码植入,无侵入式的收集,并通过HTTP或者gRPC方式发送数据到Skywalking Collector。

2. Skywalking Collector :链路数据收集器,对agent传过来的数据进行整合分析处理并落入相关的数据存储中。

3. Storage:Skywalking的存储,时间更迭,sw已经开发迭代到了6.x版本,在6.x版本中支持以ElasticSearch、MySQL、TiDB、H2、作为存储介质进行数据存储。

4. UI :Web可视化平台,用来展示落地的数据。

Skywalking Agent配置

通过了解配置,可以对一个组件功能有一个大致的了解。让我们一起看一下skywalking的相关配置。

解压开skywalking的压缩包,在agent/config文件夹中可以看到agent的配置文件。

从skywalking支持环境变量配置加载,在启动的时候优先读取环境变量中的相关配置。

Skywalking微服务监控分析

 

  • agent.namespace: 跨进程链路中的header,不同的namespace会导致跨进程的链路中断
  • agent.service_name:一个服务(项目)的唯一标识,这个字段决定了在sw的UI上的关于service的展示名称
  • agent.sample_n_per_3_secs: 客户端采样率,默认是-1代表全采样
  • agent.authentication: 与collector进行通信的安全认证,需要同collector中配置相同
  • agent.ignore_suffix: 忽略特定请求后缀的trace
  • collecttor.backend_service: agent需要同collector进行数据传输的IP和端口
  • logging.level: agent记录日志级别

skywalking agent使用javaagent无侵入式的配合collector实现对分布式系统的追踪和相关数据的上下文传递。

Skywalking Collector关键配置

Collector支持集群部署,zookeeper、kubernetes(如果你的应用是部署在容器中的)、consul(Go语言开发的服务发现工具)是sw可选的集群管理工具,结合大家具体的部署方式进行选择。详细配置大家可以去Skywalking官网下载介质包进行了解。

Collector端口设置

Skywalking微服务监控分析

 

downsampling: 采样汇总统计维度,会分别按照分钟、【小时、天、月】(可选)来统计各项指标数据。

通过设置TTL相关配置项可以对数据进行自动清理。

Skywalking 在6.X中简化了配置。collector提供了gRPC和HTTP两种通信方式。

UI使用rest http通信,agent在大多数场景下使用grpc方式通信,在语言不支持的情况下会使用http通信。

关于绑定IP和端口需要注意的一点是,通过绑定IP,agent和collector必须配置对应ip才可以正常通信。

Collector存储配置

Application.yml中配置的storage模块配置中选择要使用的数据库类型,并填写相关的配置信息。

Skywalking微服务监控分析

 

Collector Receiver

Receiver是Skywalking在6.x提出的新的概念,负责从被监控的系统中接受指标数据。用户完全可以参照OpenTracing规范来上传自定义的监控数据。Skywalking官方提供了service-mesh、istio、zipkin的相关能力。

Skywalking微服务监控分析

 

现在Skywalking支持服务端采样,配置项为sampleRate,比例采样,如果配置为5000则采样率就是50%。

关于采样设置的一点注意事项

关于服务采样配置的一点建议,如果Collector以集群方式部署,比如:Acollector和Bcollector,建议Acollector.sampleRate = Bcollector.sampleRate。如果采样率设置不相同可能会出现数据丢失问题。

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: 服务可用性(主要是通过请求成功与失败次数来计算)

CPM: 每分钟调用次数

Avg Response Time: 平均响应时间

Skywalking微服务监控分析

 

从应用整体外部来看我们可以监测到应用在一定时间段内的

  • 服务可用性指标SLA
  • 每分钟平均响应数
  • 平均响应时间
  • 服务进程PID
  • 服务所在物理机的IP、HostName、Operation System

Service JVM信息监控

Skywalking微服务监控分析

 

还可以监控到Service运行时的CPU、堆内存、非堆内存使用率、以及GC情况。这些信息来源于JVM。注意这里的数据可不是机器本身的数据。

四、服务告警

前文我们提到了通过查看拓扑图以及调用链路可以定位问题,可是运维人员又不可能一直盯着这些数据,那么我们就需要告警能力,在异常达到一定阈值的时候主动的提示我们去查看系统状态。

在Sywalking 6.x版本中新增了对服务状态的告警能力。它通过webhook的方式让我们可以自定义我们告警信息的通知方式。诸如:邮件通知、微信通知、短信通知等。

Skywalking 服务告警

先来看一下告警的规则配置。在alarm-settings.xml中可以配置告警规则,告警规则支持自定义。

Skywalking微服务监控分析

 

一份告警配置由以下几部分组成:

  • service_resp_time_rule:告警规则名称 ***_rule (规则名称可以自定义但是必须以’_rule’结尾
  • indicator-name:指标数据名称: 定义参见http://t.cn/EGhfbmd
  • op: 操作符: > , < , = 【当然你可以自己扩展开发其他的操作符】
  • threshold:目标值:指标数据的目标数据 如sample中的1000就是服务响应时间,配合上操作符就是大于1000ms的服务响应
  • period: 告警检查周期:多久检查一次当前的指标数据是否符合告警规则
  • counts: 达到告警阈值的次数
  • silence-period:忽略相同告警信息的周期
  • message:告警信息
  • webhooks:服务告警通知服务地址

Skywalking通过HttpClient的方式远程调用在配置项webhooks中定义的告警通知服务地址。

Skywalking微服务监控分析

 

了解了SW所传送的数据格式我们就可以对告警信息进行接收处理,实现我们需要的告警通知服务啦!

我们将一个服务停掉,并将另外一个服务的某个对外暴露的接口让他休眠一定的时间。然后调用一定的次数观察服务的状态信息以及告警情况。

Skywalking微服务监控分析

 

总结:

本文简单的通过skwaylking的配置来对skywlaking的功能进行一次初步的了解,对skwaylking新提出的概念以及新功能进行简单的诠释,方便大家了解和使用。通过使用APM工具,可以让我们方便的查看微服务架构中系统瓶颈以及性能问题等。

Skywalking微服务监控分析

 

关于作者:赵瑞栋,普元java工程师,从事Eclipse插件开发,参与普元EOS8 Platform开发,现主要参与EOS8微服务管理平台开发工作。

关于EAWorld:微服务,DevOps,数据治理,移动架构原创技术分享。长按二维码关注!



Tags:Skywalking   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
导读:本文摘自于SkyWalking创始人吴晟撰写的《Apache SkyWalking实战》一书,详细讲述了SkyWalking的架构设计与优势。吴晟:Apache基金会会员,Apache SkyWalking创始人、项目VP和...【详细内容】
2020-08-10  Tags: Skywalking  点击:(231)  评论:(0)  加入收藏
Skywalking主要由Agent、OAP、Storage、UI四大模块组成(如下图): Agent和业务程序运行在一起,采集链路及其它数据,通过gRPC发送给OAP(部分Agent采用http+json的方式);OAP还原链路(图...【详细内容】
2020-07-20  Tags: Skywalking  点击:(197)  评论:(0)  加入收藏
转载本文需注明出处:微信公众号EAWorld,违者必究。引言:微服务框架落地后,分布式部署架构带来的问题就会迅速凸显出来。服务之间的相互调用过程中,如果业务出现错误或者异常,如何...【详细内容】
2020-01-04  Tags: Skywalking  点击:(52)  评论:(0)  加入收藏
▌简易百科推荐
为了构建高并发、高可用的系统架构,压测、容量预估必不可少,在发现系统瓶颈后,需要有针对性地扩容、优化。结合楼主的经验和知识,本文做一个简单的总结,欢迎探讨。1、QPS保障目标...【详细内容】
2021-12-27  大数据架构师    Tags:架构   点击:(3)  评论:(0)  加入收藏
前言 单片机开发中,我们往往首先接触裸机系统,然后到RTOS,那么它们的软件架构是什么?这是我们开发人员必须认真考虑的问题。在实际项目中,首先选择软件架构是非常重要的,接下来我...【详细内容】
2021-12-23  正点原子原子哥    Tags:架构   点击:(7)  评论:(0)  加入收藏
现有数据架构难以支撑现代化应用的实现。 随着云计算产业的快速崛起,带动着各行各业开始自己的基于云的业务创新和信息架构现代化,云计算的可靠性、灵活性、按需计费的高性价...【详细内容】
2021-12-22    CSDN  Tags:数据架构   点击:(10)  评论:(0)  加入收藏
▶ 企业级项目结构封装释义 如果你刚毕业,作为Java新手程序员进入一家企业,拿到代码之后,你有什么感觉呢?如果你没有听过多模块、分布式这类的概念,那么多半会傻眼。为什么一个项...【详细内容】
2021-12-20  蜗牛学苑    Tags:微服务   点击:(8)  评论:(0)  加入收藏
我是一名程序员关注我们吧,我们会多多分享技术和资源。进来的朋友,可以多了解下青锋的产品,已开源多个产品的架构版本。Thymeleaf版(开源)1、采用技术: springboot、layui、Thymel...【详细内容】
2021-12-14  青锋爱编程    Tags:后台架构   点击:(20)  评论:(0)  加入收藏
在了解连接池之前,我们需要对长、短链接建立初步认识。我们都知道,网络通信大部分都是基于TCP/IP协议,数据传输之前,双方通过“三次握手”建立连接,当数据传输完成之后,又通过“四次挥手”释放连接,以下是“三次握手”与“四...【详细内容】
2021-12-14  架构即人生    Tags:连接池   点击:(16)  评论:(0)  加入收藏
随着移动互联网技术的快速发展,在新业务、新领域、新场景的驱动下,基于传统大型机的服务部署方式,不仅难以适应快速增长的业务需求,而且持续耗费高昂的成本,从而使得各大生产厂商...【详细内容】
2021-12-08  架构驿站    Tags:分布式系统   点击:(23)  评论:(0)  加入收藏
本系列为 Netty 学习笔记,本篇介绍总结Java NIO 网络编程。Netty 作为一个异步的、事件驱动的网络应用程序框架,也是基于NIO的客户、服务器端的编程框架。其对 Java NIO 底层...【详细内容】
2021-12-07  大数据架构师    Tags:Netty   点击:(16)  评论:(0)  加入收藏
前面谈过很多关于数字化转型,云原生,微服务方面的文章。虽然自己一直做大集团的SOA集成平台咨询规划和建设项目,但是当前传统企业数字化转型,国产化和自主可控,云原生,微服务是不...【详细内容】
2021-12-06  人月聊IT    Tags:架构   点击:(23)  评论:(0)  加入收藏
微服务看似是完美的解决方案。从理论上来说,微服务提高了开发速度,而且还可以单独扩展应用的某个部分。但实际上,微服务带有一定的隐形成本。我认为,没有亲自动手构建微服务的经历,就无法真正了解其复杂性。...【详细内容】
2021-11-26  GreekDataGuy  CSDN  Tags:单体应用   点击:(35)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条