专栏首页四颗咖啡豆Prometheus2.25新特性讲解
原创

Prometheus2.25新特性讲解

前言

Prometheus作为第二个从CNCF毕业的顶级项目,其成熟程度是毋庸置疑的,甚至推出了另一个CNCF项目OpenMetrics,希望将Prometheus的指标格式演进成为一个行业规范。

更新总览

在Prometheus-v2.25.0版本中更新一览:

  1. 实验性功能支持remote_write请求,默认不启用,启用需要启动参数指定--enable-feature = remote-write-receiver
  2. 实验性功能新增'@'修饰符,默认不启用,启用需要启动参数指定--enable-feature = promql-at-modifier
  3. 增强完善测试案例testgroup添加name属性
  4. 增强UI界面上添加警告相关信息
  5. 增强加大压缩Histogram类型metrics的存储存储桶数,由512增大到8192
  6. 增强允许设置自定义的header在远程写请求中
  7. 增强将dashboard和config的libsonnet中的grafana替换成了grafanaPrometheus
  8. 增强kubernetes服务发现中添加ndponits labels的metadata
  9. 增强UI界面添加显示TSDB标签对的总数数据
  10. 增强TSDB每分钟加载块数据,如果检测到有更新就执行保留数据操作.(这个PR标记成了#8243 应该是写错了,看了下这个PR 和块数据没关系)
  11. BugFix修复启动时web.listen-address参数没有传递端口报错问题
  12. BugFix完善一个错误处理,打开Mmap文件时继续走逻辑而不是立刻返回错误
  13. BugFix弃用未使用的参数--alertmanager.timeout
  14. BugFixMixins:支持在警报中的v2.23中重命名的远程写入指标
  15. BugFix远程写请求写入错误日志修改为警告
  16. BugFix启动时删除2.21之前版本的临时块数据undefined17-20 ...

总共是2个实验性功能8个增强10个BugFix

https://github.com/prometheus/prometheus/pull/8424

本文会主要讲解两个实验性功能和两个增强和一个BUGFIX

官方地址是:https://github.com/prometheus/prometheus/releases/tag/v2.25.0

实验性功能

默认关闭的功能列表在这里可以找到:https://github.com/prometheus/prometheus/blob/main/docs/disabled_features.md

prometheus命令help中也可以找到:

      --enable-feature= ...      Comma separated feature names to enable. Valid options: 'promql-at-modifier' to enable the @
                                 modifier, 'remote-write-receiver' to enable remote write receiver. See
                                 https://prometheus.io/docs/prometheus/latest/disabled_features/ for more details.

prometheus可以作为另一个prometheus的远程存储

也就是说可以支持Prometheus将拉取到的数据写入到另一个Prometheus.

想象一下这样一个场景:监控中心的Prometheus部署在服务器A,而业务程序部署在服务器B并且由于网络安全等问题服务器B不能开放Exporter端口或路径到外部访问,这时候一般会加一个PushGateway,由业务程序主动将Metrics推送到PushGateway,Prometheus再从PushGateway拉取Metrics.

但这种方式并不是很好,PushGateway没有收到业务程序最新的Metrics了,但Prometheus依然能够从PushGateway拉取到数据,并且这还存在PushGateway单点问题.

现在Prometheus支持作为远程存储后可以怎么玩呢?在业务程序网络覆盖的范围内部署一个Prometheus,再由这个Prometheus将数据远程存储到监控中心的Prometheus.

这就是一个典型的SideCar模式.

这让我想到一个套娃的Prometheus,比如现在有两个Prometheus,他们都设置对方为远程存储,那么是不是就无限循环了呢?感兴趣的可以试试!

PR地址:https://github.com/prometheus/prometheus/pull/8424

新增'@'修饰符

简单来说就是多了一个'@'的语法,在v2.25.0之前topk()只支持及时查询,也就是无法查询某段时间内的topk,当你使用topk查询图表时,会查询出不符合预期的结果,比如topk(2, rate(jvm_memory_used_bytes[10m]))希望查询出10分钟内jvm_memory_used_bytes指标的平均速率增长趋势最大的2个指标,但是查询的结果会多余预期的2个.

说明: Graph(图表)即某段时间范围内的结果,Table即实时查询.可以看看下面两个图再进一步理解.

table
graph

一起来看看下面的PromQL:

rate(jvm_memory_used_bytes[1m])
and 
topk(2, rate(jvm_memory_used_bytes[30m] @ end())) 

rate(jvm_memory_used_bytes[1m])是希望查询的实际数据,topk(2, rate(jvm_memory_used_bytes[30m] @ end())) 意思是筛选出最近时间段内(如果是Table则是实时)30分钟平均速率趋势最大的2个指标,然后展示他们在时间段内1分钟的平均速率数据.

相关PR有三个,分别是:#8121 #8436 #8425

增强

远程存储支持自定义HTTP Header

只需要在remote_writeurl配置下添加一个headers的参数即可,填充map类型内容,如果版本在v2.25以下时填写了header内容会报错

remote_write:
  - url: http://192.168.3.75:9494/api/v1/write
    headers:
      key: value

当然了,一些HTTP自身的Header是不允许覆盖内容的,贴一下源码:

	unchangeableHeaders = map[string]struct{}{
		// NOTE: authorization is checked specially,
		// see RemoteWriteConfig.UnmarshalYAML.
		// "authorization":                  {},
		"host":                              {},
		"content-encoding":                  {},
		"content-type":                      {},
		"x-prometheus-remote-write-version": {},
		"user-agent":                        {},
		"connection":                        {},
		"keep-alive":                        {},
		"proxy-authenticate":                {},
		"proxy-authorization":               {},
		"www-authenticate":                  {},
	}

毕竟这是HTTP自带的header,如果覆盖了会引起一些未知的错误.

PR地址:https://github.com/prometheus/prometheus/pull/8273

在UI界面上添加TSDB标签对的总数

这算一个TSDB数据基本信息完善,把标签对总数数据显示了出来

add-label-pair

BugFix

在启动时删除2.21以前版本的临时数据

这个Issue在https://github.com/prometheus/prometheus/issues/8180

是一位用户在2.15.2时遇到的一个问题,后来升级到了2.22.1版本.

在Prometheus压缩或保留失败时产生了一些*.tmp文件,例如01EQ0DZ14E04F7P51Q3NA1562G.tmp,而且prometheus永远也没有清理这些文件,导致这些临时文件越来越多.如果你已经在生产环境看到了一些tmp文件并且越来越多的话,是时候升级prometheus了,否则这些临时文件会越来越多,直到磁盘空间满载.

PR地址:https://github.com/prometheus/prometheus/pull/8353

总结

prometheus社区非常活跃,v2.25.0到v2.26.0只用了一个半月,并且更新点也不少.偶尔关注一下新版本的一些更新点还是很有用的,可以了解社区发展方向的同时也可以看看社区的活跃程度.当然,官方推出的更新内容说明都是英文的,也可以等待本系列文章,发布中文版本说明.

系列文章

将会持续发布prometheus版本发布中文说明,欢迎关注系列文章目录

始发于 四颗咖啡豆 发布!

关注公众号->四颗咖啡豆 获取最新内容

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • React 新特性讲解及实例(一)

    定义:Context 提供了一种方式,能够让数据在组件树中传递而不必一级一级手动传递。

    前端小智@大迁世界
  • React 新特性 Hooks 讲解及实例(三)

    使用 Context ,首先顶层先声明 Provier 组件,并声明 value 属性,接着在后代组件中声明 Consumer 组件,这个 Consumer 子...

    前端小智@大迁世界
  • 最通俗易懂的 Java 11 新特性讲解

    大多数开发者还是沉浸在 Java 8 中,而 Java 14 将要在 2020 年 3 月 17 日发布了,而我还在写着 Java 11 的新特性。Java 1...

    未读代码
  • 最通俗易懂的 Java 10 新特性讲解

    自从 Java 9 开始,Oracle 调整了 Java 版本的发布策略,不再是之前的 N 年一个大版本,取而代之的是 6 个月一个小版本,三年一个大版本,这样...

    未读代码
  • 新特性解读 | mysql 8.0 memcached api 新特性

    资深数据库专家,专研 MySQL 十余年。擅长 MySQL、PostgreSQL、MongoDB 等开源数据库相关的备份恢复、SQL 调优、监控运维、高可用架构...

    爱可生开源社区
  • Hadoop 2.X新特性回收站功能的讲解

    开启回收站功能,可以将删除的文件在不超时的情况下,恢复原数据,起到防止误删除、备份等作用。

    砸漏
  • 给女朋友讲React18新特性:startTransition

    startTransition的出现当然不是为了逆转命运,而是为了逆转React的更新流程。

    公众号@魔术师卡颂
  • HTML5.2新特性解读

    不到一个月之前,W3C官方发布 HTML5.2,并成为官方推荐使用标准。这意味着作为web开发者,我们可以愉快地使用5.2中的新特性了。 W3C在HTML5.2...

    司想君
  • Java11新特性解读

    在去年的9月26日,Oracle官方宣布Java11正式发布,这是Java大版本周期变化后的第一个长期支持版本,非常值得关注。Java9和Java10都在很短的...

    wangweijun
  • 新特性解读 | MySQL 8.0 新特性-副本集(replicaset)

    MySQL Innodb Cluster = MySQL Shell + MySQL Router + MySQL Group Replication(MGR)

    爱可生开源社区
  • 给女朋友讲React18新特性:Automatic batching

    今天,在一口气把《致命女人2》存货都看完后,可能是感受到了单调乏味,她跑来问我技术问题。

    公众号@魔术师卡颂
  • 最强Vue3.0新特性讲解,99%的人都觉得很赞!

    2020年4月前端开发框架Vue发布了3.0-Beta版本,9月发布正式版。 纳尼?2.0还没玩转,3.0的时代就来了???

    pingan8787
  • Java 10 新特性解密

    随着Java开发工具包(JDK)9的发布,大量的注意力都集中在Java的最新特性上,包括引入模块(通过集成项目Jigsaw)。尽管最近的很多关注都集中在这些强大...

    程序员宝库
  • Java 10新特性解密

    请注意,本文中所包含的信息在写本文时是准确的。但是到发布时,JDK 10特性组预计将会增加。

    华章科技
  • Java 10新特性解密

    随着Java开发工具包(JDK)9的发布,大量的注意力都集中在Java的最新特性上,包括引入模块(通过集成项目Jigsaw)。尽管最近的很多关注都集中在这些强大...

    CSDN技术头条
  • MongoDB 4.2 新特性解读

    MongoDB World 2019 上发布新版本 MongoDB 4.2 Beta,包含多项数据库新特性,本文尝试从技术角度解读。

    MongoDB中文社区
  • java8新特性详解(一)

    java8已经出了很久,项目中也在使用。其最重要的特性就是Lambda表达式和函数式编程,这让我们的代码可以大大简化,更加优雅。

    Java编程指南
  • 详解 ES 2018 新特性~

    第9版ECMAScript标准于2018年6月发布,正式名称为ECMAScript 2018(简称ES2018)。从ES2016开始,ECMAScript规范的...

    苏南
  • MySQL 5.7 新特性详解

    我们自豪的宣布 MySQL 5.7 稳定版开放下载了。 MySQL 5.7.9 是目前世界上最流行开源数据库的一令人兴奋的新版本, 比 MySQL 5.6 快 ...

    用户7657330

扫码关注云+社区

领取腾讯云代金券