深入理解Prometheus监控系统

978-7-115-64267-7
作者: 鲍光亚张帆
译者:
编辑: 李齐强

图书目录:

详情

本书按照监控数据的采集和加工流程的顺序,深入剖析 Prometheus 监控系统的主要模块,旨在帮助读者理解 Prometheus 监控系统的底层工作机制。本书主要内容包括监控数据来源模块、监控目标发现模块、监控数据采集模块、监控数据存储与读写模块、监控数据查询语言、监控数据计算与告警模块、Web模块,以及警报管理系统等。通过对主要模块的学习,读者可以了解 Prometheus 监控系统是如何充分利用并发能力和 Go 语言的关键特性来应对动态变化的云环境的。 本书适合已经对 Prometheus 有初步了解的读者,也适合想要进一步探究其内部工作机制的运维工程师、软件设计人员及软件开发工程师阅读。

图书摘要

版权信息

书名:深入理解Prometheus监控系统

ISBN:978-7-115-64267-7

本书由人民邮电出版社发行数字版。版权所有,侵权必究。

您购买的人民邮电出版社电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。

我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。

如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。

版  权

著    鲍光亚 张 帆

责任编辑 刘雅思

人民邮电出版社出版发行  北京市丰台区成寿寺路11号

邮编 100164  电子邮件 315@ptpress.com.cn

网址 http://www.ptpress.com.cn

读者服务热线:(010)81055410

反盗版热线:(010)81055315

内 容 提 要

本书按照监控数据的采集和加工流程的顺序,深入剖析Prometheus监控系统的主要模块,旨在帮助读者理解Prometheus监控系统的底层工作机制。本书主要内容包括监控数据来源模块、监控目标发现模块、监控数据采集模块、监控数据存储与读写模块、监控数据查询语言、监控数据计算与告警模块、Web模块,以及警报管理系统等。通过对主要模块的学习,读者可以了解Prometheus监控系统是如何充分利用并发能力和Go语言的关键特性来应对动态变化的云环境的。

本书适合已经对Prometheus有初步了解的读者,也适合想要进一步探究其内部工作机制的运维工程师、软件设计人员及软件开发工程师阅读。

序  一

我认识光亚六年有余,我们曾在京东零售基础架构部合作过。他工作认真负责,对技术充满热情,给我留下了深刻的印象。他在学习和使用Zabbix的过程中,积累了丰富的知识和经验,并将这些知识和经验写入《深入理解Zabbix监控系统》一书中,该书受到广泛好评。

在那之后,光亚并未止步,而是投入更多的热情和时间去学习和使用Prometheus。他不仅研读了Prometheus的源代码,还深入挖掘了源代码背后的逻辑和原理。他与朋友合作编写了《深入理解Prometheus监控系统》一书,这份努力和毅力令人钦佩。

Prometheus是云原生计算基金会(CNCF)继Kubernetes之后的第二个托管项目,为云原生监控系统提供了高效、可靠的解决方案,使得包括Kubernetes在内的云原生监控系统能够充分发挥其潜力,构建更为稳健、智能的监控体系。对从事云原生监控系统的开发和使用的工程师来说,学习和掌握Prometheus是非常有必要的。

本书系统地阐述了Prometheus的功能和特性,深入剖析了其设计与实现过程中的技术细节。作者结合自身丰富的实践经验和对技术的独到见解,为系统运维工程师和系统开发者提供了一本极具参考价值的书。阅读本书,有助于相关专业人士深入理解Prometheus的工作原理,提升在业务实践中快速定位并解决问题的能力。

在这个信息爆炸、节奏日益加快的时代,作者能够静下心来,深入探索技术的本质,参与并完成这样一本好书,实属难能可贵。本书不仅向读者展示了Prometheus的强大功能,更传递了作者持续探索和不断学习的精神。

我衷心希望,读者在阅读完这本书后,不仅能够掌握Prometheus的相关知识,将其深入运用到自己的实践中,还能从本书中汲取灵感,在未来写出一本属于自己的好书。

陈源

佐治亚理工学院计算机科学博士、英伟达公司主任工程师

序  二

据Gartner预测,到2025年,部署在云原生平台上的数字工作负载将达到95%。面对这种趋势,不同行业、不同体量的场景化应用对云端监控提出了更高的要求。

Prometheus作为现在最重要的云原生监控平台之一,凭借其开源的属性、灵活的架构和强大的功能,受到越来越多企业和开发者的青睐。与此同时,相关的学习资料也越来越丰富。我认为本书无疑是市面上一系列相关资料中的佼佼者,本书清晰的结构和丰富的案例能够帮助读者更好地理解和应用Prometheus。

本书从监控数据来源到数据存储,再到告警处理,系统地介绍了Prometheus的关键组成部分。如果读者深入本书的技术细节,就可以发现作者对Prometheus的独到解读。例如,第6章详细介绍了Prometheus的本地存储数据库TSDB,包括监控数据写入头部块的具体过程、头部块和主体块的逐级压缩过程,以及WAL文件和事务隔离机制。这些细致入微的技术讲解,将帮助读者更深入地理解Prometheus的工作原理,从而将其更好地应用于实际场景中。

在此,我由衷地对本书作者鲍光亚和张帆表示赞赏,他们的辛勤劳动和专业造诣为我们呈现了一本深入剖析Prometheus的宝贵图书。

鲍光亚是开源监控领域的专家,我通过他的著作《深入理解Zabbix监控系统》与他结识。该书深入解析了Zabbix 5.0的源码,揭示了Zabbix监控系统的核心原理,并指导技术人员和决策者有效解决问题,广受Zabbix社区成员赞誉。鲍光亚还多次参加Zabbix中国峰会,其深刻的见解为观众提供了丰富的启发和思考。

张帆是Zabbix社区的专家,多年来利用个人时间免费为社区成员解答问题,是社区的意见领袖,也是Zabbix支持原厂订阅的使用者。张帆在Zabbix多服务器架构设计、自动化监控方案设计实现以及源码解析方面拥有丰富的经验。随着业务需求的不断发展,张帆引入了将Prometheus与Zabbix结合使用的方法,并分享了《基于Prometheus和Zabbix实现容器云平台整体监控方案》等系列文章和演讲,极大地增加了开源社区的活力与创造力。

正是有了像鲍光亚、张帆这样的有能力、有情怀、有担当的人,开源工具在中国的落地才更加顺利!

宏时数据作为Zabbix大中华区总代理,对监控系统的发展历程有着清晰的认知。在这个领域中,Zabbix作为一款成熟、稳定的监控系统,长期以来为众多企业提供了可靠的监控解决方案。然而,随着信息技术的不断演进和需求的日益复杂化,尤其是云原生的快速发展,为了达到更全面、更有效的监控覆盖,越来越多的企业选择将Prometheus与Zabbix结合使用,因此学习、掌握Prometheus和Zabbix都是非常有必要的。

最后,再次感谢两位作者的贡献,并对本书的问世表示热烈的祝贺。我相信,这本书将为广大对Prometheus感兴趣的读者和即将使用Prometheus的朋友提供宝贵的帮助和指导。也期待在未来的实践中,Prometheus与Zabbix的结合使用能够为更多企业带来卓越的监控体验和效果。

侯健

上海宏时数据系统有限公司创始人兼CEO

前  言

写作目的

随着Kubernetes在信息技术领域的广泛应用以及运维工作对监控系统的依赖程度的增加,Prometheus监控系统逐渐成为信息技术架构中不可缺少的功能组件。本书全面而深入地剖析Prometheus监控系统的各个组成部分,帮助读者理解Prometheus监控系统各个模块的底层工作机制。

内容结构

本书共11章,总体上按照监控数据的采集和加工流程顺序讲解各个模块的底层工作机制。

第1章选取Prometheus发展过程中的4个具有里程碑意义的版本,讲解各主要模块的功能发展、演变过程。

第2章讲解Prometheus各个模块中广泛用到的YAML文本以及Prometheus配置文件的加载与刷新过程。

第3章讲解监控数据来源模块Exporter的典型工作架构以及原始监控数据是如何加工和对外输出的。

第4章讲解监控目标的自动发现机制,即Prometheus如何探测并发现多种多样的监控目标。

第5章讲解监控数据的采集与加工,即Prometheus服务器如何向大量监控目标请求监控数据,以及如何将监控数据转换为需要的数据结构并写入数据库。

第6章讲解Prometheus的本地数据库TSDB,包括监控数据写入头部块以及头部子块的具体过程、头部块和主体块的逐级压缩过程,以及WAL文件和事务隔离机制等。

第7章讲解Prometheus本地数据库的查询语言PromQL,包括PromQL解析器、语法树的结构和语法树的执行等。

第8章讲解监控数据的计算与告警触发,包括转录规则和告警规则的执行以及警报消息的通知等。

第9章讲解Prometheus提供的Web服务,包括Web API的各项功能和Web用户界面中PromQL编辑器的功能等。

第10章讲解Prometheus的构建与部署,以及与部署相关的问题。

第11章讲解分布式系统Alertmanager,包括分布式集群工作原理以及警报管理系统对警报消息的整个处理流程(从警报接收到分组、滤除、派发和登记)等。

致  谢

特别感谢陈源博士为本书作序,这份认可和支持对本书来说是莫大的荣幸。在本书的创作过程中,陈源博士给予了我无尽的鼓励和帮助。陈源博士在IT领域的成就令人瞩目,他的研究成果不仅丰富了理论知识,更为实际应用提供了重要的指导。他在计算机学术会议上发表的50多篇学术论文,以及拥有的21项专利,充分展现了他的学术造诣和创新能力。同时,陈源博士作为CNCF云原生社区的积极参与者、Kubernetes开源软件社区的代码贡献者,以及KubeCon云原生技术峰会的连续嘉宾,他的影响力和贡献力在业界有目共睹。此外,他常年活跃于社交媒体,在新浪微博(@硅谷陈源博士)和领英(LinkedIn)等社交媒体上分享知识和职场经验,具有广泛的影响力。

特别感谢侯健先生为本书作序。侯健先生是Zabbix中国上海宏时数据的创始人兼CEO,国内开源监控工具领导者。从本书的兄弟篇《深入理解Zabbix监控系统》到本书的编写,侯健先生给予了我们极大的支持和鼓励。

此外,我要感谢人民邮电出版社的编辑刘雅思和李齐强。两位编辑为本书倾注了大量时间和精力,对稿件进行了细致入微的打磨。他们以认真负责的态度为本书提出了大量宝贵意见,使本书得以更加完善地呈现给读者。

感谢我的家人,他们的支持让我能够专心致志地完成这本书的编写。

感谢我的工作单位的领导和同事,他们为我提供了在国内大型企业负责监控工作的舞台,并给予了我许多指导和帮助,让我有机会深入使用和研究Prometheus。

感谢来自开源监控社区以及各行业监控同行的技术分享,他们的专业知识和经验为本书的构思提供了重要的参考。

再次向所有支持和帮助本书出版的人表示衷心的感谢!

鲍光亚

资源与支持

本书由异步社区出品,社区(https://www.epubit.com/)为您提供相关资源和后续服务。

配套资源

本书提供如下资源:

本书源码;

电子附录。

要获得以上配套资源,您可以扫描下方二维码,根据指引领取。

您也可以在异步社区本书页面中点击,跳转到下载界面,按提示进行操作。注意:为保证购书读者的权益,该操作会给出相关提示,要求输入提取码进行验证。

提交勘误

作者和编辑尽最大努力来确保书中内容的准确性,但难免会存在疏漏。欢迎您将发现的问题反馈给我们,帮助我们提升图书的质量。

当您发现错误时,请登录异步社区,按书名搜索,进入本书页面,点击“发表勘误”,输入勘误信息,点击“提交勘误”按钮即可(见下图)。本书的作者和编辑会对您提交的勘误进行审核,确认并接受后,您将获赠异步社区的100积分。积分可用于在异步社区兑换优惠券、样书或奖品。

与我们联系

本书责任编辑的联系邮箱是liuyasi@ptpress.com.cn。

如果您对本书有任何疑问或建议,请您发邮件给我们,并请在邮件标题中注明本书书名,以便我们更高效地做出反馈。

如果您有兴趣出版图书、录制教学视频,或者参与图书技术审校等工作,可以发邮件给我们。

如果您来自学校、培训机构或企业,想批量购买本书或异步社区出版的其他图书,也可以发邮件给我们。

如果您在网上发现有针对异步社区出品图书的各种形式的盗版行为,包括对图书全部或部分内容的非授权传播,请您将怀疑有侵权行为的链接通过邮件发给我们。您的这一举动是对作者权益的保护,也是我们持续为您提供有价值的内容的动力之源。

关于异步社区和异步图书

“异步社区”(www.epubit.com)是由人民邮电出版社创办的IT专业图书社区。异步社区于2015年8月上线运营,致力于优质学习内容的出版和分享,为读者提供优质学习内容,为作译者提供优质出版服务,实现作者与读者在线交流互动,实现传统出版与数字出版的融合发展。

“异步图书”是由异步社区编辑团队策划出版的精品IT专业图书的品牌,依托于人民邮电出版社计算机图书出版积累和专业编辑团队,相关图书在封面上印有异步图书的LOGO。异步图书的出版领域包括软件开发、大数据、人工智能、测试、前端、网络技术等。

第1章 Prometheus技术演进史

本章讲解了Prometheus技术演进史,从而帮助读者理解Prometheus监控系统的发展方向。Prometheus的版本变更很频繁,有众多版本,本章选取其中4个具有里程碑意义的版本进行对比和分析。Prometheus监控系统可以划分为12个模块,即配置信息处理(Config)、监控目标自动发现(ServiceDiscovery)、采样管理(ScrapeManager)、本地存储(TSDB)、远程存储(RemoteStorage)、监控数据查询语言(PromQL)、告警规则管理器(AlertingRules)、转录规则管理器(RecordingRules)、通知器(Notifier)、Web API、Web 用户界面和工具箱(Promtool)。其中大部分模块一开始就存在,只是功能较少,少量模块在发展过程中被添加进来,各个模块的功能都在Prometheus发展过程中不断升级、完善。

1.1 Prometheus 0.1.0(首个版本)

Prometheus目前在GitHub上公开的首个版本为0.1.0版本,发布于2014年3月份前后。相较于首个长期支持版本(2.37版本),0.1.0版本的功能并不少,只不过每项功能要简单得多,使用的数据库也不是后来Prometheus开发者官方开发的TSDB,而是基于LevelDB的本地存储开发的数据库,同时0.1.0版本支持OpenTSDB作为远程存储。如果用一句话概括0.1.0版本,可以说是麻雀虽小,五脏俱全。

在模块方面,0.1.0版本主要包含配置信息处理、采样管理器、监控目标管理器、基于LevelDB的本地存储、支持OpenTSDB的远程存储、告警规则管理器、转录规则管理器、通知器、Web API、Web 用户界面和工具箱共11个模块。上述模块的实现分布在代码文件目录的不同文件夹中,如代码清单1-1所示。相比于2.37版本,0.1.0版本缺少PromQL模块,但是规则模块(rules文件夹)中具有的数据查询功能在后期独立出来形成了PromQL模块。

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

.
|-- coding           # 底层模块,提供时间戳的编码和解码功能
|-- config           # 配置信息处理模块,实现了配置信息的结构定义和解析,以及配置文件的加载等
|-- documentation    # 配置文件及说明文档
|-- main.go          # 主程序文件
|-- model            # ProtoBuf消息定义,定义了标签和监控项等核心消息
|-- notification     # 通知器模块,仅支持以HTTP POST方式发送通知
|-- retrieval        # 采样管理器模块和监控目标管理器模块
|-- rules            # 告警规则管理器模块、转录规则管理器模块,以及数据查询功能
|-- stats            # 计时器模块(底层模块,用于上层模块的性能监控)
|-- storage          # 基于LevelDB的本地存储模块和支持OpenTSDB的远程存储模块
|-- tools            # 工具箱,包含数据导出、数据压缩和规则检查共3种工具,后发展为Promtool模块
|-- utility          # 底层数据结构模块,包含LRU缓存、集合、列表、时间处理、字符串处理等
`-- web              # Web API和Web UI用户界面模块

首个版本中各个模块的功能尚不完善。配置信息处理模块能够实现对配置信息的加载,但是此时使用的配置文件为ProtoBuf格式,而非YAML格式,并且不支持运行时动态加载。在监控目标管理方面,0.1.0版本实现了采样管理器模块,该模块可以从配置文件中加载监控目标数据以及从监控目标中采集样本数据,相当于具有非常初级的监控目标自动发现功能和采样过程管理功能。本地存储模块则是基于LevelDB的分级存储,它先将数据写入内存,然后每15 min进行一次持久化。由于数据模型的特殊性,本地存储的这一实现方式在数据量较大的情况下容易遇到瓶颈。远程存储模块实现了OpenTSDB客户端,但是仅支持对OpenTSDB数据库的远程写入,不能进行远程读取。告警规则管理器模块和转录规则管理器模块通过读取本地存储中的样本数据进行计算并将计算结果写入存储或者生成告警。虽然该版本不具备独立的PromQL模块,但是告警规则管理器模块和转录规则管理器模块内部定义了一套通用的规则表达式句法来实现规则定义和数据查询,这一句法后来演变为PromQL模块的基础,而句法本身也发生了很大变化。通知器模块实现了发送警报消息的功能,但是只能通过HTTP的POST方法发送JSON格式的消息。Web API模块实现了监控数据查询功能,能够对外提供数据查询服务,同时实现了监控目标更新功能(此时还不具备主动发现监控目标的能力,只能被动地接收监控目标数据)。该版本的Web 用户界面模块主要利用Go语言的html/template包所提供的功能来实现,功能相对简单。首个版本中的工具箱模块包含3种工具,可以实现数据导出、数据压缩和规则检查,相较于后期发展出的Promtool工具,其功能要少得多。

在样本类型方面,0.1.0版本仅支持Counter、Gauge和Summary这3种类型,并不支持Histogram类型。该版本支持的样本数据格式只有ProtoBuf和JSON两种,这意味着监控目标返回的样本数据的格式须为这两种格式之一。

1.2 Prometheus 1.0

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所示。

代码清单1-2 Prometheus 1.0主要代码文件目录

.
|-- 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用户界面两个模块,增加了联邦功能

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

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

相关图书

推荐系统:产品与算法解析
推荐系统:产品与算法解析
流式系统
流式系统
程序员的制胜技
程序员的制胜技
Verilog HDL程序设计教程(第2版)
Verilog HDL程序设计教程(第2版)
面向电子鼻的复合光气体传感方法
面向电子鼻的复合光气体传感方法
程序设计竞赛专题挑战教程
程序设计竞赛专题挑战教程

相关文章

相关课程