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

1.3 Prometheus 2.0

2017年11月,Prometheus发布了2.0版本。在2.0版本中,Prometheus开始使用完全独立的全新存储引擎TSDB[1](不再依赖于LevelDB,与之前的版本不兼容)。新的存储引擎的引入使得Prometheus的数据存储性能大幅增强,为Prometheus的后续发展奠定了坚实基础。此外,在该版本的远程读写过程中,请求和响应消息开始使用snappy算法进行压缩,从而提高了网络I/O[2]吞吐量。同时远程存储使用的连接开始启用HTTP keep-alive(在1.0版本中该模式是未启用的),从而减少了应用层远程连接方面的开销。


[1]时间序列数据库(Time Series Database,TSDB)

[2]输入/输出(input/output,IO)

除了存储方面的升级,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所示。

代码清单1-3 Prometheus-2.0主要代码文件目录

.
|-- 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个模块