一. 背景描述
微服务应用过程中,如何构建微服务的可观测性,主要从以下三个方面进行考虑:
- 服务日志(log)
- 服务指标(metric)
- 服务链路(trace)
这三个服务监控领域有不同的技术栈进行支撑,但是如何快速构建一个基础的服务可观测能力?尽量减少业务的侵入性、尽量多的增加业界标准的观测指标,这里我就推荐APM技术体系,在APM技术领域中SkyWalking是一个优秀的解决方案。
二. 技术结构
SkyWalking 在我当前公司的落地领域中,主要围绕PHP、Go两大技术领域,JAVA生态拥有SkyWalking默认友好支撑,针对PHP、Go这两种技术栈,主要包含的APM体系技术结构如下图所示:
从技术结构图可以看出,APM技术体系主要包括以下几部分:
- 技术结构最底层采用了apache SkyWalking开源项目作为方案支撑。
- Go生态使用Go2sky客户端进行APM数据丰富与数据包发送。
- 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技术体系对于微服务治理工作有超强的观测领域能力的弥补,增强服务的可观测程度,是微服务治理的重要工作。