宣布推出 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 的性能显著提升,几乎所有方面都有所改进。查询延迟更加稳定,尤其是在面对高频率的时间序列流失时,其扩展性更好。在不同的真实生产场景中测量的资源消耗也显著下降。
- 与 Prometheus 1.8 相比,CPU 使用率降低到 20% - 40%
- 与 Prometheus 1.8 相比,磁盘空间使用率降低到 33% - 50%
- 在没有大量查询负载的情况下,磁盘 I/O 平均通常低于 1%

它也为未来几年应对现代计算环境日益动态的特性做好了充分准备。
过时处理
此外,还发生了许多大大小小的变化,使 Prometheus 的体验更加一致和直观。其中最引人注目的是过时处理 (staleness handling),这是最古老、呼声最高的路线图项目之一。通过新的改进,消失的监控目标或来自这些目标的时间序列现在会被明确跟踪,这减少了查询中的假象,并提高了告警的响应速度。
其他改进
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 服务器读取数据。
最后,我们要感谢所有广泛测试了预发布版本并帮助我们调试问题的用户。没有你们,这个巨大的里程碑是不可能实现的!