正则表达式对系列的普罗米修斯率

     2023-02-15     23

关键词:

【中文标题】正则表达式对系列的普罗米修斯率【英文标题】:prometheus rate on series by regex 【发布时间】:2020-01-07 08:38:13 【问题描述】:

我正在使用以下查询根据名称获取一些指标:

__name__=~"bus_listener.+_processed"

有多个指标与此名称匹配,并且多个应用正在发布这些指标。

我正在尝试计算一个费率,用:

rate(__name__=~"bus_listener.+_processed"[5m])

但这给了我以下错误:

vector cannot contain metrics with the same labelset

我不能使用记录指标,我只能访问从 prometheus 读取指标的 grafana。

如何使用正则表达式获得此费率?

【问题讨论】:

【参考方案1】:

听起来您有多个具有相同标签的指标(__name__ 除外)。 rate() 保留除 __name__ 之外的所有标签,但它会删除 __name__ 以避免任何混淆。这意味着如果您有两个时间序列,例如:

bus_listener_foo_processedjob="a_job" 1
bus_listener_bar_processedjob="a_job" 2

将它们通过rate() 将导致两个时间序列都具有相同的标签集:

job="a_job" 0.1
job="a_job" 0.2

理论上,您可以通过首先使用label_replace() 并在其结果上应用rate() 来将__name__ 标签复制为其他标签,从而为每个原始时间序列生成不同的标签集。但是,由于您只能直接在时间序列上计算 rate()(而不是另一个函数的输出),因此您只能使用 subqueries 来执行此操作,这既是重量级的,又比其他情况下要慢:

rate(label_replace(__name__=~"bus_listener.+_processed", "old_name", "$1", "__name__", "(.+)")[5m:1m])

(可选地将1m 替换为接近您的抓取间隔的内容,因此尽可能少地发生混叠。)

但理想情况下,如果您确实可以访问 Prometheus 配置(这似乎不太可能,因为您说您不能使用记录规则),您应该在摄取时使用指标重新标记来提取指标的各个位命名为单独的标签,这样您以后就不必费劲了。或者让导出原始指标的服务使用标签,而不是将它们连接到指标名称中。

【讨论】:

感谢您的回答。您是否有关于为什么删除 name 以及为什么相同的标签集是一个问题的参考资料? 该名称已被删除,因为它在应用操作后很可能在语义上不正确。 (例如,如果up + 1 仍然被称为up,结果会是什么意思?)至于为什么相同的标签集是一个问题,Prometheus 期望任何一个指标只有一个实例。相同的标签集意味着相同的指标,因此相同指标的两个实例。有关详细信息,请参阅prometheus.io/docs/prometheus/latest/querying/operators、github.com/prometheus/prometheus/issues/380 和 github.com/prometheus/prometheus/issues/5757。【参考方案2】:

我了解到您有多个报告 _processed 指标的“bus_listeners”。 最好的方法是让此类指标符合 Prometheus 数据模型,并将 bus_listener 作为指标中的标签,而不是将其嵌入指标名称中。这将需要更改发出这些指标的应用程序。

如果修改应用程序不可行,那么您可以使用记录规则创建符合要求的新指标。

如果您创建类似于以下内容的录制规则:

 - record: processed_count
   expr: label_replace(__name__=~"bus_listener.+_processed", "bus_listener", "$1", "__name__", "bus_listener(.+)_processed")

那么你就可以查询新的指标了:

  rate(processed_count[5m])

由于您没有提供准确的指标名称,此规则可能需要进行一些调整

【讨论】:

Helm-Charts(yaml):正则表达式被破坏

...遇到了一些正则表达式查询的问题。我遇到的问题专门与普罗米修斯图表的节点导出器部分有关 查看详情

javascript系列文章:详解正则表达式之二

在上一篇文章中我们讲了正则表达式的基本用法,接下来博主想聊聊其中的细节,今天就从正则修饰符开始吧。正则修饰符又称为正则标记(flags),它会对正则的匹配规则做限定,进而影响匹配的最终结果。在上次的文章中我们... 查看详情

如何在普罗米修斯中对具有高基数的指标发出警报

】如何在普罗米修斯中对具有高基数的指标发出警报【英文标题】:Howtoalertonmetricswithahighcardinalityinprometheus【发布时间】:2021-02-0204:36:08【问题描述】:当尝试使用表达式countby(__name__)(__name__=~".+")>50创建高度量基数... 查看详情

正则表达式用于一系列数字和一个用于验证的字符

】正则表达式用于一系列数字和一个用于验证的字符【英文标题】:Regexforarangeofnumbersandonecharacterforvalidation【发布时间】:2019-02-2113:04:39【问题描述】:我正在尝试使用正则表达式来验证用户对我正在从事的项目的输入。我目前... 查看详情

Grafana - 在查询中使用自定义变量作为正则表达式

...nquery【发布时间】:2019-08-1019:16:37【问题描述】:我们有普罗米修斯数据源,我一直在尝试使用具有少量值的自定义变量作为逗号分隔值,我想用它来替换label_values(job=~$"eks_cluster:regex"中的正则表达式),但我得到错误模板变量无... 查看详情

python应用实战系列-正则表达式大全

...高级教程(附源码)tableau可视化数据分析高级教程正则表达式是对字符串(包括普通字符(例如,a到z之间的字母)和特殊字符(称为“元字符”))操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的... 查看详情

普罗米修斯查询中来自grafana变量的多个值

】普罗米修斯查询中来自grafana变量的多个值【英文标题】:multiplevaluesfromgrafanavariableinprometheusquery【发布时间】:2020-03-2804:58:49【问题描述】:我们有一种情况,我们需要从grafana变量字段中选择多个值(实例/服务器),并且需... 查看详情

正则表达式系列之——unicode:修饰符"u"和类p...(代码片段)

本号是《现代JavaScript教程》[1]官方微信公众号Unicode:修饰符"u"和类\\p...JavaScript对字符串使用Unicode编码[2]。大多数字符使用2个字节编码,但这种方式只能编码最多65536个字符。这个范围不足以对所有可能的字符进... 查看详情

javascript系列文章:详解正则表达式之一

正则表达式是一个精巧的利器,经常用来在字符串中查找和替换,JavaScript语言参照Perl,也提供了正则表达式相关模块,开发当中非常实用,在一些类库或是框架中,比如jQuery,就存在大量的正则表达式,所以说学好正则表达式... 查看详情

一步步教你用prometheus搭建实时监控系统系列——上帝之火,普罗米修斯的崛起(代码片段)

...词很牛逼。每次我都能联想到带来上帝之火的希腊之神,普罗米修斯。而这个开源的logo也是火,个人挺喜欢这个logo的设计。本系列着重介绍Prometheus以及如何用它和其周边的生态来搭建一套属于自己的实时监控告警平台。本系列... 查看详情

了解熊猫系列提取函数中的正则表达式

】了解熊猫系列提取函数中的正则表达式【英文标题】:Understandingaregularexpressioninaseriesextractfunctioninpandas【发布时间】:2019-08-1409:06:05【问题描述】:我有以下代码:importpandasaspds=pd.Series([\'toystory(1995)\',\'thepirates(2014)\'])print(s.str... 查看详情

golang系列文章:正则表达式(代码片段)

...发程序,来抓取几个站点的网页内容,其中使用到了正则表达式来获取站点的域名部分,作为文件名存储本地文件,今天,我们就来总结一下正则表达式的常用方法。首先,在Go语言中,正则表达式相关的操作都封装在regexp这个... 查看详情

正则介绍grep

正则介绍在计算机科学中,对“正则表达式”的定义是:它使用单个字符串来描述或匹配一系列符合某个句法规则的字符串。在很多文本编辑器或其它工具里,正则表达式通常用来检索和替换那些符合某个模式的文本内容。许多... 查看详情

正则表达式匹配 .htaccess 中的一系列文件类型

】正则表达式匹配.htaccess中的一系列文件类型【英文标题】:regextomatchaseriesoffiletypesin.htaccess【发布时间】:2011-08-2922:18:37【问题描述】:我猜这将是一个愚蠢的问题,但我不明白这里发生了什么。我想通过.htaccess文件中的正则... 查看详情

系列正则表达式提取产生数据帧

】系列正则表达式提取产生数据帧【英文标题】:Seriesregexextractproducingadataframe【发布时间】:2020-04-0901:32:15【问题描述】:我正在处理Dataquest的正则表达式任务。以下代码sn-p运行正确在DataquestIDE内部:titles=hn["title"]pattern=r\'\\[(\... 查看详情

如何在 python 的正则表达式中指定一系列 unicode 字符? [复制]

】如何在python的正则表达式中指定一系列unicode字符?[复制]【英文标题】:HowdoIspecifyarangeofunicodecharactersinaregular-expressioninpython?[duplicate]【发布时间】:2011-04-1412:19:28【问题描述】:我正在尝试匹配一系列Unicode字符,我想知道该... 查看详情

将一个系列中的数字添加到同一数据框中的一系列字母,可能使用正则表达式

...的数字添加到同一数据框中的一系列字母,可能使用正则表达式【英文标题】:Addingnumbersfromoneseriestoaseriesofletterswithinthesamedataframes,possiblyusingregex【发布时间】:2021-12-2404:14:20【问题描述】:我有一个更大数据框的子集:importpand... 查看详情

hive正则表达式

...考技术A参考维基百科、HadoopHive概念学习系列之hive的正则表达式初步(六)和Hive正则匹配函数之前没有在意过正则表达式,但是工作组不可避免的遇到了,感觉也比较重要,就花点时间理解一下。正则表达式的目的:对字符串st... 查看详情