当监控遇上微服务
在过去数年里,微服务的落地一直都是业界重点关注的问题,其始终面临着部署、监控、配置和治理等方面的挑战。轻舟微服务平台是网易云为企业提供的一套微服务解决方案,其中微服务监控是其关注的重点问题之一。与传统监控相比,微服务监控面临着更多难点,包括:
监控对象动态可变,无法进行预先配置;
监控范围非常繁杂,各类监控难以互相融合;
微服务实例间的调用关系非常复杂,故障排查会很困难;
微服务架构仍在快速发展,难以抽象出稳定的通用监控模型。
在工程角度也面临着不少考验,如:
在微服务架构里,软件系统通常会被拆分为数十甚至数百个微服务,这种拆分会使得监控数据爆炸增长,监控系统必须具备处理和展示这些数据的能力;
监控系统必须要保证可靠性,具体而言:保证不会因为单点故障而全局失效,监控数据有备份机制,系统各服务的实例均可通过备份数据得到恢复;
监控系统必须支持云上部署及快速水平扩容,这既是云原生的基本要求,也符合企业系统微服务化演进的实际情况。
微服务监控的技术选型
微服务监控的诸多挑战使得我们不得不慎重地进行技术选型。选择开源还是再造轮子,这个问题在项目初期一直困扰着我们,经过一段时间的调研和论证,开源项目Prometheus成了最终的答案。
Prometheus是CNCF旗下的项目,该项目是一个用于系统和应用服务监控的软件,它能够以给定的时间间隔从给定目标中收集监控指标,并能够通过特定查询表达式获取查询结果。
选择Prometheus的主要原因是:
灵活的数据模型:在Prometheus里,监控数据是由值、时间戳和标签表组成的,其中监控数据的源信息是完全记录在标签表里的;同时Prometheus支持在监控数据采集阶段对监控数据的标签表进行修改,这使其具备强大的扩展能力;
强大的查询能力:Prometheus提供有数据查询语言PromQL。从表现上来看,PromQL提供了大量的数据计算函数,大部分情况下用户都可以直接通过PromQL从Prometheus里查询到需要的聚合数据;
健全的生态: Prometheus能够直接对常见操作系统、中间件、数据库、硬件及编程语言进行监控;同时社区提供有Java/Golang/Ruby语言客户端SDK,用户能够快速实现自定义监控项及监控逻辑;
良好的性能:在性能方面来看,Prometheus提供了PromBench基准测试,从最新测试结果来看,在硬件资源满足的情况下,Prometheus单实例在每秒采集10w条监控数据的情况下,在数据处理和查询方面依然有着不错的性能表现;