前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Prometheus2.25新特性讲解

Prometheus2.25新特性讲解

原创
作者头像
用户2672162
修改2021-04-15 10:26:51
1.6K0
修改2021-04-15 10:26:51
举报
文章被收录于专栏:四颗咖啡豆

前言

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中也可以找到:

代码语言:txt
复制
      --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
table
graph
graph

一起来看看下面的PromQL:

代码语言:txt
复制
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内容会报错

代码语言:txt
复制
remote_write:
  - url: http://192.168.3.75:9494/api/v1/write
    headers:
      key: value

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

代码语言:txt
复制
	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
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版本发布中文说明,欢迎关注系列文章目录

始发于 四颗咖啡豆 发布!

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

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 更新总览
  • 实验性功能
    • prometheus可以作为另一个prometheus的远程存储
      • 新增'@'修饰符
      • 增强
        • 远程存储支持自定义HTTP Header
        • 在UI界面上添加TSDB标签对的总数
        • BugFix
          • 在启动时删除2.21以前版本的临时数据
          • 总结
          • 系列文章
          相关产品与服务
          前端性能监控
          前端性能监控(Real User Monitoring,RUM)是一站式前端监控解决方案,专注于 Web、小程序等场景监控。前端性能监控聚焦用户页面性能(页面测速,接口测速,CDN 测速等)和质量(JS 错误,Ajax 错误等),并且联动腾讯云应用性能监控实现前后端一体化监控。用户只需要安装 SDK 到自己的项目中,通过简单配置化,即可实现对用户页面质量的全方位守护,真正做到低成本使用和无侵入监控。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档