在我的印象中,普罗米希修斯是古希腊神话中的最具智慧之神,不仅创造了人类,还给人类带来了火。同样Prometheus项目也是非常优秀的项目,很早就引起了我们的兴趣,在近期ChubaoFS项目中,我们也启用了Prometheus作为其监控系统。
Prometheus 项目是由前Google员工发布的新一代的云原生监控系统,2016年5月正式加入CNCF基金会的项目,是第二个CNCF的毕业项目。我们的新开源项目ChubaoFS,是一个云原生分布式文件系统,主要用来解决云原生环境(如Kubernetes)的可靠文件存储问题,同时提供高性能、可扩展的功能,实现计算与存储分离。对于已经服务于京东100多个应用以及在线业务的ChubaoFS来说,一个优秀高效的监控系统是十分重要的。
我们之前使用过其他一些监控方案,包括:influxdb 、jmxtrance、zabbix等, 其中influxdb 并不完全开源,jmxtrance主要用于java项目数据采集,zabbix的集群扩展性能不足,最终我们选择了Prometheus 方案 。相较于前面几种监控方案,Prometheus 提供了更好的监控框架、开发接口及其云原生特性。另外Prometheus 托管在CNCF中,对我们很重要。因为CNCF是一个中立的机构,这样我们也不用担心lock-in于限定的vendor中。CNCF开放的管理和广泛的行业参与,保证了我们更放心的参与到CNCF技术开发和使用中,在保障权利的同时,极大促进相关技术的发展。同时Prometheus也是 cloud-native的,它提供了一种更便捷、高效地资源组织和使用方式,让部署和维护变得更简单,便于资源的动态伸缩及可靠服务,大大提升了开发、交付、运维系列流程效率,让我们在软件开发中更关注应用逻辑本身,从而让开发更加高效。
在调研与评估技术方案的过程中,我们发现Prometheus有如下特点,正式因为这些特性,让我们对Prometheus更有信心了。
>易于部署:单一二进制文件,部署简单
>高效数据模型:监控指标以时序序列保存在存储中,并可灵活设置标签来对数据不同维度进行区分;
>高效查询功能:内置的PromQL支持查询、聚合、过滤等复杂操作,可实现高效的查询;
>易于扩展:支持分区和联邦集群部署,并可结合Thanos实现分布式部署;
>易于集成:支持多种语言SDK,拥有大量第三方集成模块,可方便与第三方系统进行集成
在京东,我们的基础设施是部署在Kubernetes集群中的,而Prometheus天然的K8s生态优势,帮助我们更好的将监控应用于生产环境。能够做到支持滚动更新和升级,分钟级迁移,无停机维护等。
联邦(Federate)集群
每一个Prometheus Server都包含一个/federate的接口,可用来获取当前节点中的监控数据。因此可通过该接口对整个Prometheus集群进行拆分组合,建立分级节点,以做到集群的扩展,此模式称为联邦模式。他可以方便扩展,同时部署方式比较灵活。
我们发现使用Prometheus自带的联邦集群功能对监控集群进行扩展,当被监控集群节点过多时,联邦集群的根节点还是会因为内存消耗过多而被容器给kill掉,导致集群规模无法横向扩展。后来我们结合Thanos解决了这个问题。
Prometheus + Thanos + Grafana 监控方案
此部署方案如下:Prometheus node 使用hashmod 对 ChubaoFS node IP进行分区,保证每个Prometheus node 能均衡采集被监控节点数量。前端通过Thanos 聚合Grafana查询请求,统一获取整个集群的监控指标。联邦集群扩展还有一些问题,内存容易打满,导致宕机,Thanos提供了一种分布式部署的模式解决方案,从而可以达到容易扩展的效果。
参考资料:
ChubaoFS云原生应用分布式文件系统:
https://github.com/chubaofs/chubaofs
ChubaoFS 设计相关论文,收录在ACM SIGMOD 2019 :CFS: A Distributed File System for Large Scale Container Platforms.
https://dl.acm.org/citation.cfm?doid=3299869.3314046
作者简介:
张丽颖:CNCF Ambassador,京东技术架构部产品经理, 开源项目ChubaoFS的 contributor。