zoukankan      html  css  js  c++  java
  • Prometheus的PromQL纪要

    1、字符串

    字符串可以用单引号、双引号或反引号指定为文字常量。

    2、标量

    标量浮点值可以字面上写成 [-](digits)[.(digits)] 的形式。

    3、时间序列过滤器

    • 瞬间向量过滤器   瞬时向量过滤器允许在指定的时间戳内选择一组时间序列和每个时间序列的单个样本值。在最简单的形式中,近指定指标(metric)名称。这将生成包含此指标名称的所有时间序列的元素的瞬时向量。

         PromQL支持两种匹配模式:完全匹配和正则匹配

         标签匹配运算符:

    • =:选择与提供的字符串完全相同的标签
    • !=:选择与提供的字符串不相同的标签
    •              

    • =~:选择正则表达式与提供的字符串(或子字符串)相匹配的标签

    •            

    • !~:选择正则表达式与提供的字符串(或子字符串)不匹配的标签

    • 区间向量过滤器  区间向量与瞬时向量的工作方式类似,唯一的差异在于在区间向量表达式中我们需要定义时间选择的范围,时间范围通过时间范围选择器 [] 进行定义,以指定应为每个返回的区间向量样本值中提取多长的时间范围。

          时间范围通过数字来表示,单位可以使用以下其中之一的时间单位:

    • s - 秒

    • m - 分钟

    • h - 小时

    • d - 天

    • w - 周

    • y - 年

    时间位移操作   在瞬时向量表达式或者区间向量表达式中,都是以当前时间为基准。而如果我们想查询,5 分钟前的瞬时样本数据,或昨天一天的区间内的样本数据呢? 这个时候我们就可以使用位移操作,位移操作的关键字为 offset

    http_requests_total offset 5m    #返回相对于当前查询时间过去 5 分钟的 http_requests_total 值
    rate(http_requests_total[5m] offset 1w)   #该操作同样适用于区间向量。以下表达式返回指标 http_requests_total 一周前的 5 分钟之内的 HTTP 请求量的增长率:

    操作符

    • 算术运算
      • + 加法

      • - 减法

      • * 乘法

      • / 除法

      • %

      • ^ 幂等

    • 布尔运算
      • == (相等)

      • != (不相等)

      • > (大于)

      • < (小于)

      • >= (大于等于)

      • <= (小于等于)

    • 集合运算
      • and (并且)
      • or (或者)
      • unless (排除)
     
    匹配模式

     向量与向量之间进行运算操作时会基于默认的匹配规则:依次找到与左边向量元素匹配(标签完全一致)的右边向量元素进行运算,如果没找到匹配元素,则直接丢弃。

    接下来将介绍在 PromQL 中有两种典型的匹配模式:一对一(one-to-one),多对一(many-to-one)或一对多(one-to-many)。

    • 一对一匹配

    一对一匹配模式会从操作符两边表达式获取的瞬时向量依次比较并找到唯一匹配(标签完全一致)的样本值。默认情况下,使用表达式:

    vector1 <operator> vector2

    在操作符两边表达式标签不一致的情况下,可以使用 on(label list) 或者 ignoring(label list)来修改便签的匹配行为。使用 ignoreing 可以在匹配时忽略某些便签。而 on 则用于将匹配行为限定在某些便签之内。

    <vector expr> <bin-op> ignoring(<label list>) <vector expr>
    <vector expr> <bin-op> on(<label list>) <vector expr>
    • 多对一和一对多

    多对一和一对多两种匹配模式指的是“一”侧的每一个向量元素可以与"多"侧的多个元素匹配的情况。在这种情况下,必须使用 group 修饰符:group_left 或者 group_right 来确定哪一个向量具有更高的基数(充当“多”的角色)。

    <vector expr> <bin-op> ignoring(<label list>) group_left(<label list>) <vector expr>
    <vector expr> <bin-op> ignoring(<label list>) group_right(<label list>) <vector expr>
    <vector expr> <bin-op> on(<label list>) group_left(<label list>) <vector expr>
    <vector expr> <bin-op> on(<label list>) group_right(<label list>) <vector expr>

    多对一和一对多两种模式一定是出现在操作符两侧表达式返回的向量标签不一致的情况。因此需要使用 ignoring 和 on 修饰符来排除或者限定匹配的标签列表。

    聚合操作

    Prometheus 还提供了下列内置的聚合操作符,这些操作符作用域瞬时向量。可以将瞬时表达式返回的样本数据进行聚合,形成一个具有较少样本值的新的时间序列。

    • sum (求和)

    • min (最小值)

    • max (最大值)

    • avg (平均值)

    • stddev (标准差)

    • stdvar (标准差异)

    • count (计数)

    • count_values (对 value 进行计数)

    • bottomk (样本值最小的 k 个元素)

    • topk (样本值最大的k个元素)

    • quantile (分布统计)

    这些操作符被用于聚合所有标签维度,或者通过 without 或者 by 子语句来保留不同的维度(without 不包含的标签,by与whithou相反)


    列出所有指标
    ({__name__=~".+"})

    显示当前每个metric有多少个
    count({__name__=~".+"}) by (__name__)

    # 统计每个指标的时间序列数,超出 10000 的报警
    count by (__name__)({__name__=~".+"}) > 10000

    Prometheus都会存储以下的度量指标采样点

    • up{job="[job-name]", instance="instance-id"}        up值=1,表示采样点所在服务健康; 否则,网络不通, 或者服务挂掉了
    • scrape_duration_seconds{job="[job-name]", instance="[instance-id]"}          尝试获取目前采样点的时间开销
    • scrape_samples_post_metric_relabeling{job="<job-name>", instance="<instance-id>"}      表示度量指标的标签变化后,标签没有变化的度量指标数量。
    • scrape_samples_scraped{job="<job-name>", instance="<instance-id>"}          这个采样点目标暴露的样本点数量
  • 相关阅读:
    Objective-C写出Json文件(可作配置文件)
    关于快速排序的部分内容
    关于折半查找排序的部分内容
    异步下载网络图片
    pytest(5):setup/teardown框架结构
    pytest(4):用例参数化
    pytest(3):pytest运行参数介绍
    pytest(2):使用pycharm运行pytest
    pytest(1):pytest的安装与使用
    pytest文档4-Allure报告清除上一次数据
  • 原文地址:https://www.cnblogs.com/gavin11/p/12636605.html
Copyright © 2011-2022 走看看