Prometheus监控学习之路(二)

PromQL基础

Prometheus时间序列

时间序列数据:按照时间顺序记录系统、设备状态变化的数据,每个数据成为一个样本。

  • 数据采集特定的时间周期进行,因而随着时间流逝,讲这些样本时间记录下来,将生产一个离散的样本数据序列
  • 该序列也称为向量(Vector)。而将多个序列放在同一个坐标系内(以时间为横轴,以序列为纵轴),将形成一个由数据点组成的矩阵
    在这里插入图片描述

PromQL简介

Prometheus基于指标名称(metrics )以及附属的标签集(labelset)唯一定义一条时间序列

  • 指标名称代表着监控目标上某类可测量属性的基本特征标识
  • 标签则是这个基本特征上再次细分的多个可测量维度
    在这里插入图片描述

基于PromQL表达式,用户可以针对指定的特征及其细分的维度进行过滤、聚合、统计等运算从而产生期望的计算结果

PromQL(Prometheus Query Language)是Prometheus Server内置数据查询语言

  • PromQL使用表达式(expression)来表述查询需求
  • 根据其实用的指标和标签,以及时间范围,表达式的查询请求可灵活地覆盖在一个或多个时间序列的一定范围内的样本之上,甚至是只包含单个时间序列的单个样本

Prometheus数据模型

Prometheus中,每个时间序列都由指标名称(Metric Name)和标签(Label)来唯一标识,格式为“<metric name>{<label name>=<label value>,···}”。
指标名称:通常用于描述系统上要测定的某个特征:

  • 例如,http_requests_total表示接收到HTTP请求总数
  • 支持使用字母、数字、下划线和冒号,且必须能匹配RE2规范的正则表达式

标签:键值型数据,附加在指标名称之上,从而让指标能够支持多维度特征,可选项:

  • 例如,http_requests_total{method=‘GET’}和http_requests_total{method!=‘GET’}代表着两个不同的时间序列
  • 标签名称可使用字母、数字和下划线,且必须能匹配RE2规范的正则表达式
  • 以"__"为前缀的名称为Prometheus系统预留使用

Metric Name的表示方式有两种

  • 后一种通常用于Prometheus内部
    在这里插入图片描述

样本数据格式

Prometheus的每个数据样本由两部分组成

  • float64格式的数据
  • 毫秒精度的时间戳
    在这里插入图片描述

指标名称及标签使用注意事项

指标名称和标签的特定组合代表着一个时间序列

  • 指标名称相同,单标签不同的组合分别代表着不同的时间序列
  • 不同的指标名称自然更是代表着不同的时间序列

PromQL支持基于定义的指标维度进行过滤和聚合

  • 更改任何标签值,包括天剑或删除标签,都会创建一个新的时间序列
  • 应该尽可能地保持标签的稳定性,否则和可能创建新的时间序列,更甚至会生成一个动态的数据环境,并使得监控的数据源难以跟踪,从而导致建立在该指标之上的图形、告警及记录规则变得无效

PromQL的数据类型

PromQL的表达式中支持4种数据类型

  • 即时向量(Instant Vector):特定或全部的时间序列集合上,具有相同时间戳的一组样本值称为即时向量
  • 范围向量(RangeVector):特定或全部的时间序列集合上,在指定的同一时间范围内的所有样本
  • 标量(Scalar):一个浮点型的数据值
  • 字符串(String):支持使用单引号、双引号或反引号进行引用,但反引号中不会对转义字符进行转义

时间序列选择器(Time series Selectors )

PromQL的查询操作需要针对有限个时间序列上的样本数据进行,挑选出目标时间序列是构建表达式时最为关键的一步。
用户可使用向量选择器表达式来挑选出给定指标名称下的所有时间序列或部分时间序列的即时样本值或至过去某个时间范围内的样本值,前者称为即时向量选择器,后者称为范围向量选择器:

  • 即时向量选择器(Instant Vector Selectors):返回0个或多个时间序列上在给定时间戳上各自的一个样本,该样本也可称为即时样本
  • 范围向量选择器(Range Vector Selectors):返回0个或多个时间序列上在给定时间范围内的各自的一组样本
    在这里插入图片描述

向量表达式使用要点

表达式的返回值类型是即时向量、范围向量、标题或字符串4种数据类型其中之一,但是,有些使用场景要求表达式返回值必须满足特定的条件:

  • 需要将返回值绘制成图形时,仅支持即时向量类型的数据
  • 对于想rate一类的速率函数来说,其要求使用的却又必须是范围向量型的数据

由于范围向量选择器的返回的是范围向量型数据,他不能用于表达式浏览器中图形绘制功能,否则表达式浏览器会返回“Error executing query: invalid expression type "range vector"for range query,must be scalar or instant vectos”一类的错误。事实上,范围向量选择几乎总是结合速率类的函数rate一同使用

即时向量选择器

即时向量选择器由两部分组成

  • 指标名称:用于限定特定指标下的时间序列,即负责过滤指标
  • 匹配器(Matcher):或称为标签选择器,用于过滤时间序列上的标签,定义在{}之中

定义即时向量选择器时,以上两个部分应该至少给出一个。这将存在以下三种组合:

  • 仅给定指标名称,在标签名称上使用了空值的匹配器:返回给定的指标下的所有时间序列各自的即时样本;例如,http_requests_total和http_requests_total{}的功能相同,都是用于返回http_requests_total指标下各时间序列的即时样本
  • 仅给定匹配器:返回所有符合给定的匹配器的所有时间序列上的即时样本。注意:这些时间序列可能会有着不同的指标名称,例如:{job=’.*’,method=‘get’}
  • 指标名称和匹配器的组合:返回给定的指定下的,且符合给定的标签过滤器的所有时间序列上的即时样本。例如,http_requests_total{method=‘get’}

匹配器

匹配器用于定义标签过滤条件,目前支持如下4中匹配操作

  • =:选择与提供的字符串完全相等的标签
  • !=:选择与提供的字符串不相等的标签
  • =~:选择正则表达式与提供的字符串匹配的标签
  • !~:选择正则表达式与提供的字符串不匹配的标签

注意事项:

  • 匹配到空标签的匹配器时,所有未定义该标签的时间序列同样符合条件。例如:http_requests_total{env=""},则该指标名称上所有未使用该标签(env)的时间序列也符合条件,比如时间序列http_requests_total{method=“get”}
  • 正则表达式将执行完全锚定机制,他需要匹配指定的标签的整个值
  • 向量选择器至少要包含一个指标名称,或者至少有一个不会匹配到空字符串的匹配器,例如,{job=""}为非法的选择器
  • 使用"__name__"做为标签名称,还能够对指标名称进行过滤,例如,{__name__=~“http_requests_.*”}能够匹配所有以"http_requests_"为前缀的所有指标

偏移量修改器

默认情况下,即时向量选择器和范围向量选择器都以当前时间为基准时间点,而偏移量修改器能能够修改改基准。
偏移量修改器的使用方法是紧跟在选择器表达式之后使用“offset”关键字指定:

  • “http_requests_total offset 5m”,表示获取以http_requests_total为指标名称的所有时间序列在过去5分钟之前的即时样本

在这里插入图片描述
在这里插入图片描述

  • “http_requests_total[5m] offset 1d”,表示获取距此刻一天时间之前的5分钟之内的所有样本

PromQL的指标类型

PromQL有四个指标类型,他们主要由Prometheus的客户端库使用。

  1. Counter:计数器,单调递增,除非重置
  2. Gauge:仪表盘,可增可减的数据
  3. Histogram:直方图,将时间范围内的数据划分成不同的时间段,并各自评估其样本个数及样本值之和,因而可计算出分位数:
  • 可用于分析因异常值而引起的平均值过大的问题
  • 分位数计算要使用专用的histogram_quantile函数
  1. summary:类似于Histogram,但客户端会直接计算并上报分位数

Prometheus Server并不使用类型信息,而是将所有数据展平为时间序列

Counter和Gauge

通常Counter的总数并没有直接作用,而是需要借助于rate、topk、increase和irate等函数来生成样本数据的变化状况(增长率)

  • rate(http_requests_total[2h]),获取2小时内,该指标下各时间序列上的http总请求数的增长速率
  • topk(3,http_requests_total),获取该指标下http请求总数排名前3的时间序列
  • irate(http_requests_total[2h]),高灵敏度函数,用于计算指标的瞬时速率

Gauge用于存储其值可增可减的指标样本数据,常用于进行求和、取平均值、最小值、最大值等聚合计算。也会经常结合PromQL的predict_linear和delta函数使用

  • predict_linear(v range-vector,t,scalar)函数可以预测时间序列v在t秒后的值,他通过线性回归的方式来预测样本数据的Gauge变化趋势
  • delta(v range-vector)函数计算范围向量中的每个时间序列元素的第一个值与最后一个值之差,从而展示不同时间点上的样本值得差值。delta(cpu_temp_celsius{host=“hostname”}[2h]),返回该服务器上的CPU温度与两小时之前的差异

Histogram

Histogram是一种对数据分布情况的图形展示,由一系列高度不等的长条图或线段表示,用于展示单个测度的值的分布。
一般用横轴表示某个指标维度的数据取值区间,用纵轴表示样本统计的频率或频数,从而能够以二维图的形式展现数值的分布状况。
为了构建Histogram,首先需要将值得范围进行分段,将所有值的整个可用范围分成一系列连续、相邻但不重叠的间隔,而后统计每个间隔中有多少值。
从统计学的角度看,分位数不能被聚合,也不能进行算数运算。

在这里插入图片描述

Histogram类型的每个指标有一个基础指标名称<basename>,他会提供多个时间序列:

  • <basename>_bucket{le="<upper inclusive bound>"}:观测桶的上边界(upper inclusive bound),即样本统计区间,最大区间的名称为<basename>_bucket{le="+Inf"}
  • 累积间隔机制生成的样本数据需要额外使用内置的histogram_quantile()函数即可根据Histogram指标来计算相应的分位数(quantile),即某个bucket的样本数在所有样本数中占据的比例。histogram_quantile()函数在计算分位数是会假定每个区间内的样本满足线性分布状态,因而他的结果仅是一个预估值,并不完全准确。预估的准确度取决于bucket区间划分的粒度,粒度越大,准确度越低。

Prometheus的聚合函数

一般来说,单个指标的价值不大,监控场景中往往需要联合并可视化一组指标,这种联合机制即是指“聚合”操作,例如,将计数、求和、平均值、分位数、标准差及方差等统计函数应用于实践序列的样本之上生产具有统计学意义的结果。
对查询结果实现按照某种分类机制进行分组并将查询结果按组进行聚合计算也是较为常见的需求,例如分组统计、分组求平均值、分组求和等。
聚合操作有聚合函数针对一组值进行计算并返回单个值或少量值作为结果

  • Prometheus内置提供的11个聚合函数也称为聚合运算符
  • 这些运算符仅支持应用于单个即时向量的元素,其返回值也是具有少量元素的新向量或标量
  • 这些聚合运算符既可以基于向量表达式返回结果中的时间序列的所有标签维度进行分组聚合,也可以基于指定的标签维度分组后再进行分组聚合

聚合表达式

PromQL中的聚合操作语法格式可采用如下两种格式之一

  • <aggr-op>([parameter]<vector expression>)[without | by(<label list>)]
  • <aggr-op>[without | by(<label list>)]([parameter]<vector expression>)

分组聚合:先分组、后聚合

  • without:从结果向量中删除由without子句指定的标签,未指定的那部分标签则用作分组标准
  • by:功能与without相反,他仅使用by子句中指定的标签进行聚合,结果向量中出现但未被by子句指定的标签会被忽略

11个聚合函数

  • sum():对样本值求和
  • avg():对样本值求平均值,这是进行指标数据分析的标准方法
  • count():对分组内的时间序列进行数量统计
  • stddev():对样本值求标准差,以帮助用户了解数据的波动大小
  • stdvar():对样本值求方差,塔式取标准差过程中的中间状态
  • min():取样本值中的最小值
  • max():取样本值中的最大值
  • topk():逆序返回分组内的样本值最大的前n个时间序列及其值
  • bottomk():顺序返回分组内的样本值最小的前n个时间序列及其值
  • quantile():分位数用于评估数据的分布状态,该函数会返回分组内指定的分位数的值,即数值落在小于等于指定的分为区间的比例
  • count_values():对分组内的时间序列的样本值进行数量统计

猜你喜欢

转载自blog.csdn.net/qq_33235529/article/details/113178756