宣布推出 Prometheus 2.0
2017 年 11 月 8 日作者 Fabian Reinartz 代表 Prometheus 团队
大约一年半以前,我们向外界发布了 Prometheus 1.0。该版本的发布是项目的一个重要里程碑。我们实现了一系列广泛的功能,构成了 Prometheus 简单而又极其强大的监控理念。
自那时起,我们添加并改进了各种服务发现集成,扩展了 PromQL,并对远程 API 的首次迭代进行了实验,以实现可插拔的长期存储解决方案。
但还有哪些变化值得我们发布一个新的主版本呢?
Prometheus 2.0
Prometheus 有一个简单而稳健的运行模型,我们的用户很快就爱上了它。然而,基础设施领域并未停滞不前,像 Kubernetes 和 Mesos 这样的项目正在迅速改变软件的部署和管理方式。被监控的环境变得越来越动态。
我们越来越感受到这给 Prometheus 的性能带来的压力。存储子系统需要根据预期的负载进行仔细配置。Prometheus 1.6 凭借其自动调优功能极大地缓解了这一痛苦。尽管如此,我们的用户还是不可避免地会遇到一些硬性限制。
存储
2017年初,底层开始发生变化。最初只是为了一种新的、性能更强的时间序列数据库而进行的实验,很快在实际基准测试中得到了证实。在过去的六个月里,我们一直忙于将这项工作稳定为一个独立的时间序列数据库 ,并将其重新集成到 Prometheus 本身中。其结果是 Prometheus 2.0 的性能显著提升,几乎所有方面都有所改进。查询延迟更加稳定,尤其是在面对高序列流失(high series churn)时扩展性更好。在不同的真实生产场景中测量的资源消耗也显著降低。
- CPU 使用率相较于 Prometheus 1.8 降低到 20% - 40%
- 磁盘空间使用量相较于 Prometheus 1.8 减少到 33% - 50%
- 在没有大量查询负载的情况下,磁盘 I/O 平均通常低于 1%

它也为未来几年应对现代计算环境日益动态的特性做好了充分准备。
过时处理 (Staleness handling)
此外,还发生了许多大大小小的变化,使 Prometheus 的体验更加一致和直观。其中最引人注目的是过时处理 ,这是最古老、呼声最高的路线图项目之一。通过新的改进,消失的监控目标或来自这些目标的序列现在会被明确跟踪,这减少了查询中的假象(artefacts)并提高了警报的响应速度。
其他改进
Prometheus 2.0 还内置了对整个数据库的快照备份 的支持。
我们还将记录规则和警报规则从自定义格式迁移到了普遍使用的 YAML 格式。这使得与配置管理和模板化集成变得更加容易。
还进行了许多其他较小的更改和清理。请查看 Prometheus 1.x 到 2.0 的迁移指南,以全面了解变化以及如何调整您的设置。但别担心,Prometheus 2 仍然是您所熟悉和喜爱的 Prometheus——只是速度更快,操作和使用也更简单了。
下一步计划
新的存储子系统被设计为易于访问和扩展。这既适用于直接集成到 Prometheus 中的新功能,也适用于可以在其之上构建的自定义工具。简单开放的存储格式和库也允许用户轻松构建自定义扩展,如动态保留策略。这使得存储层能够满足各种需求,而不会给 Prometheus 本身带来复杂性,使其能够专注于其核心目标。
远程 API 将继续发展,以满足长期存储的要求,同时不牺牲 Prometheus 通过简单性实现可靠性的模型。
试一试!
您可以像往常一样通过下载我们的官方二进制文件和容器镜像 来试用 Prometheus 2.0。请参阅入门指南页面,获取有关如何启动和运行 Prometheus 的教程。
如果您正在从 Prometheus 1.x 升级,请查看我们的迁移指南,了解您需要进行的调整,以及如何在迁移期间使用远程 API 从旧的 Prometheus 服务器读取数据 。
最后,我们要感谢所有广泛测试预发布版本并帮助我们调试问题的用户。没有你们,这个巨大的里程碑是不可能实现的!