分享网易云轻舟微服务选择基于 Prometheus 开发微服务监控系统的考量:
开源
云原生
与微服务监控需求的匹配度很高
开源
Prometheus是CNCF(云原生计算基金会)旗下成熟的开源项目,而开源技术栈是网易云坚定不移的选择,不仅因为选择主流开源项目可以站在巨人的肩膀上创新,规避重复造轮子的浪费,更因为开源开放让客户无需担心厂商锁定。Prometheus拥有活跃的社区,在GitHub 上获得的 star 数超过了 2 万,符合网易云的选择。
云原生
作为CNCF组织第二个毕业的开源项目,Prometheus与它的“师兄”Kubernetes都自带云原生的光环,天然能够友好协作,而网易云轻舟微服务另一个重要组件——容器服务正是基于开源Kubernetes深度定制优化的(当然轻舟微服务的服务治理设计是基础设施无关的,同时支持物理机、VM和容器)。
目前,轻舟微服务监控系统所有组件及配置均实现容器化并由 Kubernetes 编排,理论上,在任意 Kubernetes 集群里都能够一键部署,系统需要变更时,仅需修改相关编排文件,即可完成改变。
与微服务监控需求的匹配度很高
微服务监控有四大难点:
1. 配置难:监控对象动态可变,无法进行预先配置;
2. 融合难:监控范围非常繁杂,各类监控难以互相融合;
3. 排查难:微服务实例间的调用关系非常复杂,故障排查会很困难;
4. 建模难:微服务架构仍在快速发展,难以抽象出稳定的通用监控模型。
Prometheus 有五大优势:
灵活的数据模型:在 Prometheus 里,监控数据是由值、时间戳和标签表组成的,其中监控数据的源信息是完全记录在标签表里的;同时 Prometheus 支持在监控数据采集阶段对监控数据的标签表进行修改,这使其具备强大的扩展能力;
强大的查询能力:Prometheus 提供有数据查询语言 PromQL。从表现上来看,PromQL 提供了大量的数据计算函数,大部分情况下用户都可以直接通过 PromQL 从 Prometheus 里查询到需要的聚合数据;
健全的生态:Prometheus 能够直接对常见操作系统、中间件、数据库、硬件及编程语言进行监控;同时社区提供有 Java/Golang/Ruby 语言客户端 SDK,用户能够快速实现自定义监控项及监控逻辑;
良好的性能:Prometheus 提供了 PromBench 基准测试,从最新测试结果来看,在硬件资源满足的情况下,Prometheus 单实例在每秒采集 10万条监控数据的情况下,在数据处理和查询方面依然有着不错的性能表现;
更契合的架构:采用推模型的监控系统,客户端需要负责在服务端上进行注册及监控数据推送;而在 Prometheus 采用的拉模型架构里,具体的数据拉取行为是完全由服务端来决定的。服务端是可以基于某种服务发现机制来自动发现监控对象,多个服务端之间能够通过集群机制来实现数据分片。推模型想要实现相同的功能,通常需要客户端进行配合,这在微服务架构里是比较困难的。
当然,Prometheus 也有一些不足,比如不能用于日志监控、分布式追踪等范围,所以网易云也做了很多设计和优化。
相关文章:
【推荐】 消息推送平台高可用实践(下)
【推荐】 手把手带你打造一个 Android 热修复框架(上篇)
【推荐】 深情留不住,套路得人心- -聊聊套路那些事儿