PromQL常见的使用场景

PromQL 典型的应用场景就是时序数据的查询和二次计算,这也是 PromQL 的两个核心价值,其中查询操作靠的就是查询选择器。

随便一个公司,时序数据至少都有成千上万条,而每个监控图表的渲染或者每条告警规则的处理,都只是针对有限的几条数据,所以 PromQL 第一个需求就是过滤。

{__name__=~"node_load.*", zone="sh"}[1m]

算术运算符比较简单,就是我们常用的加减乘除、取模之类的符号。

# 计算内存可用率,就是内存可用量除以内存总量,又希望按照百分比呈现,所以最后乘以100
mem_available{app="clickhouse"} / mem_total{app="clickhouse"} * 100
# 计算北京区网口出向的速率,原始数据的单位是byte,网络流量单位一般用bit,所以乘以8
irate(net_sent_bytes_total{zone="beijing"}[1m]) * 8

比较运算符就是大于、小于、等于、不等于之类的,理解起来也比较简单,但是意义重大,告警规则的逻辑就是靠比较运算符来支撑的。

mem_available{app="clickhouse"} / mem_total{app="clickhouse"} * 100 < 20
irate(net_sent_bytes_total{zone="beijing"}[1m]) * 8 / 1024 / 1024 > 700

逻辑运算符有 3 个,and、or 和 unless,用于 instant-vector 之间的运算。and 是求交集,or 是求并集,unless 是求差集。我们来看一个 and 的使用场景。

disk_used_percent{app="clickhouse"} > 70 and disk_total{app="clickhouse"}/1024/1024/1024 < 200

向量之间的操作是想要在右侧的向量中,为左侧向量的每个条目找到一个匹配的元素,匹配行为分为:one-to-one、many-to-one、one-to-many。

mysql_slave_status_slave_sql_running == 0
and ON (instance)
mysql_slave_status_master_server_id > 0

聚合运算针对单个指标的多个 series,还会有一些聚合需求。比如说,我想查看 100 台机器的平均内存可用率,或者想要排个序,取数值最小的 10 台。这种需求可以使用 PromQL 内置的聚合函数来实现。

# 求取 clickhouse 的机器的平均内存可用率
avg(mem_available_percent{app="clickhouse"})

# 把 clickhouse 的机器的内存可用率排个序,取最小的两条记录
bottomk(2, mem_available_percent{app="clickhouse"})

PromQL 的两个核心价值,一个是筛选,一个是计算。筛选是靠查询选择器,查询分为即时查询和范围查询。计算部分内容较多,有算术、比较、逻辑、聚合运算符,还有向量匹配逻辑,特别是 group_left 和 group_right。

此文章为7月Day31学习笔记,内容来源于极客时间《运维监控系统实战笔记》,推荐该课程。

你可能感兴趣的:(运维,监控,监控)