2017年11月,Prometheus发布了2.0版本。在2.0版本中,Prometheus开始使用完全独立的全新存储引擎TSDB (不再依赖于LevelDB,与之前的版本不兼容)。新的存储引擎的引入使得Prometheus的数据存储性能大幅增强,为Prometheus的后续发展奠定了坚实基础。此外,在该版本的远程读写过程中,请求和响应消息开始使用snappy算法进行压缩,从而提高了网络I/O 吞吐量。同时远程存储使用的连接开始启用HTTP keep-alive(在1.0版本中该模式是未启用的),从而减少了应用层远程连接方面的开销。
除了存储方面的升级,2.0版本还增加或者升级了其他方面的功能。自动发现功能支持的目标增加到11种,包括Kubernetes、Azure、Consul、ZooKeeper、File、DNS、EC2、GCE、Marathon、OpenStack、Triton等。其中,GCE、OpenStack和Triton为新增的功能。在Web API方面,2.0版本增加了监控目标数据查询功能、Alertmanager查询功能以及配置信息查询功能,并且开始支持远程读取。
2.0版本的各个模块在代码文件中的分布如代码清单1-3所示。
. |-- cmd # 包含主程序,以及由工具箱发展而来的Promtool模块 |-- config # YAML配置信息处理模块,实现了配置信息的结构定义和编解码,以及配置文件的加载等 |-- console_libraries # Web用户界面所使用的模板定义,包含导航栏、菜单、通用函数等 |-- consoles # Web用户界面使用的HTML文件 |-- discovery # 监控目标自动发现模块,支持11种目标的自动发现 |-- docs # 说明文档和用户手册 |-- documentation # 各种配置文件 |-- notifier # 通知器模块 |-- pkg # 底层模块,包含各种底层数据结构和底层函数 |-- prompb # 各种.proto文件 |-- promql # 数据查询语言模块 |-- relabel # 只有3个函数,实现标签集的重新打标功能 |-- retrieval # 采样管理器模块和监控目标管理器模块,监控目标自动发现模块被拆分并转移到
# discovery目录中 |-- rules # 规则模块,包含告警规则管理器模块和转录规则管理器模块 |-- scripts # 包含2个文件,用于检查许可声明,以及编译.proto文件并生成Go代码 |-- storage # 存储模块,本地存储改为TSDB(以外部依赖包方式引入) |-- template # 底层模块,用于增强监控数据的处理能力 |-- util # 底层数据结构模块,包含缓存、文件操作、定时器、字符串处理和HTTP客户端等 |-- vendor # 实现其他模块功能所需的外部库,包含自动发现功能所需的外部库 `-- web # 该模块包含Web API和Web用户界面这2个模块