Prometheus 1.0发布于2016年7月。从首个版本到1.0版本,Prometheus进行了多次迭代,增加了很多功能,本节所述功能并非在1.0版本中一次性添加,但是截至1.0版本发布时这些功能已经存在。由于新增功能较多,本节仅选取其中比较重要的一些功能进行讲解。
1.0版本对本地存储模块进行了重大改进,大幅提高了存储性能,这些改进通过完善大量代码实现。该版本支持的样本类型增加了Histogram,在此之前仅支持Counter、Gauge和Summary类型。为了解决标签集的哈希指纹重复的问题,1.0版本变更了监控项的指纹哈希算法,通过在标签集的各个字符串之间添加分割符来避免哈希指纹重复。1.0版本非常重要的改进之一是改进了数据存储编码,采用delta-on-delta(增量的增量)编码,大约减少了40%的内存和硬盘资源消耗。在远程存储方面,1.0版本在原有OpenTSDB的基础上增加了InfluxDB和Graphite作为远程存储。
1.0版本将配置文件格式由ProtoBuf格式转变为YAML格式,解析和加载方法也相应修改。1.0版本增加了运行时加载配置的功能,由SIGHUP信号触发加载过程。在监控目标管理方面,1.0版本增加了对多种监控目标的自动发现功能,包括Kubernetes、Azure、Consul、Serverset(ZooKeeper)、File、DNS、EC2(AWS)、Marathon和Nerve(SmartStack)共9种。在警报消息处理方面,1.0版本开始支持将警报消息发送到Alertmanager(警报管理系统)。在Web API方面,1.0版本开始支持federate(联邦)功能,并且在提供监控数据查询功能的基础上支持对监控项元数据的条件查询功能,用户可以查询符合指定条件的监控项元数据,而不是全量数据。
总之,1.0版本主要是在不变更存储架构的情况下对存储性能进行了优化,在配置信息处理方面转为使用YAML格式,并且实现了对多种监控目标的自动发现。1.0版本的主要代码文件目录以及各个模块在代码文件中的分布如代码清单1-2所示。
. |-- cmd # 包含主程序,以及由工具箱发展而来的Promtool模块 |-- config # YAML配置信息处理模块,实现了配置信息的结构定义和编解码,以及配置文件的加载等 |-- console_libraries # Web用户界面模块所使用的模板定义,包括导航栏、菜单、通用函数等 |-- consoles # Web用户界面使用的HTML文件,其中的导航栏等内容来自console_libraries |-- documentation # 配置文件及说明文档 |-- notifier # 通知器模块,支持向多个Alertmanager接口发送消息 |-- promql # 数据查询语言模块 |-- retrieval # 采样管理器模块和监控目标管理器模块,包含监控目标自动发现功能 |-- rules # 规则模块,包含告警规则管理器模块和转录规则管理器模块 |-- scripts # 仅包含一个代码检查工具,用于检查各个代码文件的许可声明是否存在 |-- storage # 本地存储模块和远程存储模块,完善了本地存储,远程存储增加对InfluxDB和Graphite | # 的支持,代码量增加约60% |-- template # 底层模块,用于增强监控数据的处理能力 |-- util # 底层数据结构模块,包含缓存、文件操作、定时器、字符串处理和HTTP客户端等 |-- vendor # 实现其他模块功能所需的外部库,包含自动发现功能所需的外部库 `-- web # 该模块包含Web API和Web用户界面两个模块,增加了联邦功能