Skip to content

Instantly share code, notes, and snippets.

@homura
Created March 8, 2021 09:43
Show Gist options
  • Save homura/de01eb0f999db22482b9086ab9f38de2 to your computer and use it in GitHub Desktop.
Save homura/de01eb0f999db22482b9086ab9f38de2 to your computer and use it in GitHub Desktop.
关于 Metric 监控全家桶 Prometheus 的 Querying

Metric 监控全家桶 Prometheus —— Querying 篇

Motivation

如果看过官方的 Querying 而且觉得没有任何理解上的困难,那么可以跳过这篇。如果你和我一样,觉得文档有些难以理解,可以尝试看看这篇文章。当然了,这边更多的是介绍一些概念以及自己的理解,不会事无巨细的罗列所有的 API

Prometheus 很强大,但随之而来的是与之匹配的复杂度。因此,整理了一些相关的、比较基础的、个人认为比较难以理解的知识点,某种意义上算是__用前必读__,以及可能其实是自己理解有误,可以被 comment 打打脸涨涨知识。

A Quick Glance

各节点处理请求的增长斜率

sum by (instance) (muta_api_request_result_total) 

各节点的 TPS

sum by (instance) (
  rate(muta_api_request_result_total{type="send_transaction"}[5m])
) 

Metric

Metric 是用以归类数据的一种表达方式,一般表示为

<metric name>{<label name>=<label value>, ...}

Data types

当前(Prometheus 2.18)的版本中,其实主要有三种数据类型,即 Instant vector(瞬时向量), Range vector(区间向量) 以及 Scalar(量)。不同的数据类型会有不同的用法,对应不同的函数。如上面例子中,sum 函数接收的是一个瞬时向量,并返回一个量,而 rate 函数接收的是一个区间向量,并返回瞬时向量。关于更加具体的函数描述,下面会有介绍。

以下将尝试使用图形用以描述两种向量,帮助理解它们之间的区别

Scalar(标量)

一个简单的,可以是浮点数的数值

image

Instant vector(瞬时向量)

瞬时向量可以理解成某一时间点上的一系列 metric 点以及对应的数值

image

Range vector(区间向量)

区间向量一般是多个瞬时向量外加一个时间轴描述这些瞬时向量的时间,它的表现会像是一个矩阵

image

Operator

Binary Operator

与大部分编程语言,或是 Query Language 类似,我们需要对量进行操作,可能是普通的 + - * / ,或是逻辑比较 == != > < >= <=,但一般而言, Operator 都是二元操作符(binary operator),即将两个元素进行一系列操作后转换为一个元素。区间向量一般不能直接用于二元操作符,但瞬时向量不受这些限制,

Instant vector + Instant vector

我们这边例举两个瞬时向量相减的场景,下面的这个例子可以理解为,当前的值比 15min 前增加了多少

image

Aggregation Operator

此外,与大部分的 Query Language 类似,Prometheus 提供了聚合操作,包括 sum avg max min 等常用的聚合操作

Function

Prometheus 提供了不少函数,但是不同的函数接收不同的数据类型,如我们常用的 rate 函数,它接收一个区间向量作为变量,并算出每秒的(频)率

image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment