微服务治理:服务遥测之APM-SkyWalking技术应用

Posted by LB on Mon, Sep 7, 2020

一. 背景描述

微服务应用过程中,如何构建微服务的可观测性,主要从以下三个方面进行考虑:

  1. 服务日志(log)
  2. 服务指标(metric)
  3. 服务链路(trace)

这三个服务监控领域有不同的技术栈进行支撑,但是如何快速构建一个基础的服务可观测能力?尽量减少业务的侵入性、尽量多的增加业界标准的观测指标,这里我就推荐APM技术体系,在APM技术领域中SkyWalking是一个优秀的解决方案。

二. 技术结构

SkyWalking 在我当前公司的落地领域中,主要围绕PHP、Go两大技术领域,JAVA生态拥有SkyWalking默认友好支撑,针对PHP、Go这两种技术栈,主要包含的APM体系技术结构如下图所示:

从技术结构图可以看出,APM技术体系主要包括以下几部分:

  1. 技术结构最底层采用了apache SkyWalking开源项目作为方案支撑。
  2. Go生态使用Go2sky客户端进行APM数据丰富与数据包发送。
  3. PHP生态由于自身短生命期的特征,分为PHP内核APM扩展和数据中转SideCar两部分,PHP内核扩展通过函数Hook机制完成Redis、MySQL、PDO、grpc等关键网络IO的拦截,并无感构建APM数据包结构,在RS周期发送APM数据包到SideCar,SideCar负责流转PHP内核的APM监控数据包到APM-Server上。

三. 关键领域监控

APM技术生态包含内容比较多,主要的使命就是对于服务应用进行运行态监控,这里主要阐述一下几方面的监控效果:

3.1 服务指标监控

服务指标监控主要包括Apdex、平均响应时间、成功率、CPM、TP数据、也包括很多的服务EndPoint数据,主要用来阐述服务健康、性能、可靠性的指标数据。

3.2 服务调用链监控

微服务场景下,调用关系复杂、服务调用关系层级深,所以APM构建了服务调用链监控体系,方面研发、架构对于自己服务的调用关系有较好的可视化效果,调用链也遵循OpenTracing协议,主要效果如下所示:

3.3 微服务内核Runtime监控

服务监控除了需要对于服务自身的可靠性、服务之间的调用关系进行监控之外,还需要针对服务Runtime进行拦截分析,通常的实现方式有OAP编程、内核Runtime Hook方式,Runtime监控可以很好的监控服务不同EndPoint内部的关键不稳定点的性能情况,除了PDO、Redis、Mysql、GRPC等关键IO,也可以监控长时间的cpu计算等程序行为逻辑。 主要的效果图如下:

3.4 微服务拓扑关系监控

针对微服务调用关系,除了可以使用全链路Trace这种表达形式,也可以通过更具有动感效果的拓扑关系图进行描述,在拓扑关系图中可以形象的显示服务的类别、服务的流量走向、服务的当前状态、服务调用间的频率等数据。相关的效果图如下所示:

三. 总结

APM技术体系对于微服务治理工作有超强的观测领域能力的弥补,增强服务的可观测程度,是微服务治理的重要工作。