深入理解Prometheus监控系统
上QQ阅读APP看书,第一时间看更新

1.4 Prometheus 2.37(LTS版本)

Prometheus 2.37发布于2022年7月,是Prometheus的首个长期支持(long term support,LTS)版本。该版本在2.0版本的基础上进行了多个方面的增强和完善。

在本地存储方面,2.37版本的一项重要改进是增加了事务隔离功能,从而能够更可靠地进行并发操作。本地存储增加了快照功能,当系统重启时能够通过加载快照文件快速恢复内存状态,减少启动时间。2.37版本实现了以mmap方式访问本地存储的头部块,提高了监控数据的读写性能。此外,2.37版本采用snappy格式压缩WAL文件,节约了存储空间。

2.37版本中的PromQL模块引入了多项改进:增加了@修饰符,从而能够更准确、更灵活地控制查询数据的时间;支持嵌套子查询,从而能够表示更复杂的查询请求。

在服务自动发现方面,2.37版本新增了对多种目标的自动发现,包括DigitalOcean、Eureka、Hetzner、HTTP、IONOS、Linode、Moby、Nomad、PuppetDB、Scaleway、Uyuni、Vultr和XDS等。至此版本,Prometheus自动发现的目标达到24种。

2.37版本的Web API功能也得到大幅增强,除了支持对监控数据、监控项元数据和监控目标的查询,还增加了远程写功能(可接收远程写入的数据)以及告警规则和警报消息的查询功能等,支持通过API执行某些存储管理操作(如快照生成、删除数据等)。

2.37版本各个模块在代码文件中的分布如代码清单1-4所示。

代码清单1-4 Prometheus 2.37主要代码文件目录

.
|-- cmd                # 包含主程序以及Promtool模块
|-- config    # YAML配置信息处理模块,实现了配置信息的结构定义和编解码,以及配置文件的加载等
|-- console_libraries  # Web用户界面所使用的模板定义,包含导航栏、菜单、通用函数等
|-- consoles           # Web用户界面使用的HTML文件
|-- discovery          # 监控目标自动发现模块,支持24种目标的自动发现
|-- docs               # 说明文档和用户手册
|-- documentation      # 各种配置文件
|-- model              # 底层模块,包含标签处理、样本数据解析和时间戳处理等功能
|-- notifier           # 通知器模块
|-- plugins            # 用于管理自动发现功能而引入的外部库
|-- prompb             # 各种.proto文件
|-- promql             # 数据查询语言模块
|-- rules              # 规则模块,包含告警规则管理器模块和转录规则管理器模块
|-- scrape    #采样管理器模块和监控目标管理器模块,监控目标自动发现模块被拆分并转移到discovery
#目录中 |-- scripts # 包含2个文件,用于检查许可声明,以及编译.proto文件并生成Go代码 |-- storage # 存储模块,本地存储改为TSDB(以外部依赖包方式引入) |-- template # 底层模块,用于增强监控数据的处理能力 |-- tracing # 跟踪器模块 |-- tsdb # 本地存储模块,此前在2.0版本中该模块以外部依赖包方式引入 |-- util # 底层数据结构模块,包含缓存、文件操作、定时器、字符串处理、HTTP客户端等 `-- web # 该模块包含Web API和Web用户界面这2个模块