写点什么

Prometheus 基本查询时序数据的瞬时向量

用户头像
耳东@Erdong
关注
发布于: 刚刚

瞬时向量

瞬时向量允许在给定的时间戳中选择一组时间序列和每个时间序列的单个数值:在最简单的形式中,只指定一个指标名称。这将得到一个包含所有时间序列元素的瞬时向量,这些元素具有这个指标名称。


比如 http_requests_total 这个指标名称的时间序列:


http_requests_total
复制代码


可以通过在花括号({})中添加逗号分隔的标签匹配器列表来进一步筛选这些时间序列。


这次依然选择 http_requests_total 指标名称的时间序列,这些时间序列的 job 标签(label)设置为 prometheus,group 标签(label)设置为canary:


http_requests_total{job="prometheus",group="canary"}
复制代码


在匹配过程中可以使用否定匹配标签值,或者使用正则表达式匹配标签值。存在以下的标签匹配操作符:


  • =: 选择与提供的字符串完全相等的标签。

  • !=: 选择不等于提供的字符串的标签。

  • =~: 选择与提供的字符串正则表达式匹配的标签。

  • ~: 选择与提供的字符串不匹配的标签。


例如下列的语句可以查询 http_requests_total 时间序列数据,将环境变量为 staging, testing, development 的数据查询出来 ,并且排除掉 HTTP 方法为 GET 的数据。


http_requests_total{environment=~"staging|testing|development",method!="GET"}
复制代码


匹配空标签值的标签匹配器也会选择完全没有特定标签集的所有时间序列。正则表达式匹配完全锚定。对于相同的标签名,可以有多个匹配器。


向量查询必须指定与空字符串不匹配的名称或至少一个标签,不能匹配到并且只匹配到空的字符串。比如下面的表达式是错误的:


# 错误的查询{job=~".*"} 
复制代码


相反,下面这些表达式是有效的,因为它们都有不匹配空标签值的选择器。


# 正确的查询{job=~".+"}              {job=~".*",method="get"} 
复制代码


通过匹配内部的__name__标签(双下划线开头的名称都是内部保留的指标名称),标签也可以应用于指标名称。例如,表达式 http_requests_total 等价于{__name__="http_requests_total"}


=!==~!~这些都可以使用。下面的表达式选择所有名称以 job 开头的指标


{__name__=~"job:.*"}
复制代码


指标名称不能是 bool、on、ignore、group_left 和 group_right 这些关键字之一。下面的表达式是错误的:


# 错误的查询on{}
复制代码


解决这个限制的方法是使用__name__标签:


# 正确用法{__name__="on"}
复制代码


发布于: 刚刚阅读数: 3
用户头像

耳东@Erdong

关注

还未添加个人签名 2020.05.24 加入

主要研究分享运维技术,专注于监控、CICD、操作系统、云原生领域,公众号【耳东学堂】,知识星球同名,坚持原创,希望能和大家在运维路上结伴而行 邮箱:erdong@mail.erdong.site

评论 (1 条评论)

发布
没有更多了
Prometheus 基本查询时序数据的瞬时向量