Prometheus记录规则&查询结果持久化
  CXvnc1NhAWTQ 2023年11月02日 61 0

一、查询持久化

在Prometheus的表达式浏览器进行的查询会生成新的时间序列,但其结果仅临时保存于Prometheus Server之上。在样本数据量较大、工作较为繁忙的Prometheus Server上,对于那些查询频率较高且运算较为复杂的查询而言,实时查询会存在一些响应延迟的情况。此时,记录规则和告警规则就派上用场了。

1.1 记录规则

记录规则能够预先运行频繁用到或计算消耗较大的表达式,并将其结果保存为一组新的时间序列。记录规则生成的结果也可以被告警规则使用。

  • 记录规则是定义在Prometheus配置文件中的查询语句,由Server加载后,它能够以类似批处理的方式在后台周期性的执行并记录查询结果;
  • 客户端只需查询由记录规则生成的结果序列上的样本数据即可,速度远快于实时查询;
  • 常用于跨多个时间序列生成聚合数据,或计算消耗较大的查询等场景;
  • 多见于同可视化工具(eg:Grafana)结合使用的需求中,也可用于生成可产生告警信息的时间序列。

1.2 告警规则

告警规则是定义在Prometheus配置文件中的另一种PromQL表达式,它通常是一个基于查询语句的布尔表达式,该表达式负责触发告警。当告警规则中用的查询语句较为复杂时,可将其保存为记录规则,而后通过查询该记录规则生成的时间序列来进行比较,从而避免实时查询导致的较长时间延迟。

二、配置记录规则

2.1 语法

具体参考https://prometheus.io/docs/prometheus/latest/configuration/recording_rules/#recording-rules

#每个规则文件都是含有一到多个规则组(rule_group)的列表,这些列表项定义在顶级字段groups之下
groups:
#每个规则组都要有一个名字,且在当前文件中必须唯一
- name: <string>
 #组内的规则每隔多长时间计算(评估)一次
  [ interval: <duration> | default = global.evaluation_interval ]
 #限制条件。对于告警规则,用于限制其最多生成的告警数量。对于记录规则,用于限制其最多生成的序列数量。0表示无限制
  [ limit: <int> | default = 0 ]
#该规则组中的规则列表,对于每条告警规则,要遵循规则语法
rules:
#记录规则的名称
- record: <string>
  #使用的PromQL表达式。每次评估周期到达时都会基于当前时间进行表达式计算,评估的结果会生成一个新的时间序列
  expr: <string>
  #在记录规则上添加的标签
  labels:
    [ <labelname>: <labelvalue> ]

2.2 示例

#记录规则通常保存在单独的文件中
cd /usr/local/Prometheus && mkair rules
vim rules/record-rules-node.yml
groups:
- name: custom_rules
  interval: 5s
  rules:
  - record: instance:node_cpu:avg_rate5m
    expr: (1 - avg(irate(node_cpu_seconds_total{job="node", mode="idle"}[5m])) by (instance)) * 100
  - record: instace:node_memory_MemFree_percent
    expr: 100 * (node_memory_Buffers_bytes + node_memory_Cached_bytes + node_memory_MemFree_bytes) / node_memory_MemTotal_bytes
  - record: instance:root:node_filesystem_free_percent
    expr: 100 * node_filesystem_free_bytes{mountpoint="/"} / node_filesystem_size_bytes{mountpoint="/"}
#在prometheus.yml通过rule_files加载此文件
vim prometheus.yml
rule_files:
  - "rules/record-rules-*.yml"

#执行Prometheus热加载
curl -XPOST http://192.168.131.11:9090/-/reload

此时,刷新Prometheus Web UI的Rules界面,发现生成了新的规则。

Prometheus记录规则&查询结果持久化_Prometheus

三、Grafana

3.1 简介

Grafana是一款基于go语言开发的通用可视化工具,支持从多种不同的数据源(Prometheus、ElasticSearch、Mysql、PostgreSQL等)加载并展示数据。默认监听TCP协议的3000端口,且能通过/metrics输出内建指标。

3.2 部署Grafana

参考https://mirrors.tuna.tsinghua.edu.cn/help/grafana

##在Prometheus服务器上操作
#下载 Grafana 存储库签名密钥
apt-get install -y apt-transport-https
apt-get install -y software-properties-common wget
wget -q -O /usr/share/keyrings/grafana.key https://apt.grafana.com/gpg.key
#稳定版本添加存储库
echo "deb [signed-by=/usr/share/keyrings/grafana.key] https://apt.grafana.com stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list
#安装
apt -y update && apt-get -y install grafana
#启动grafana
systemctl daemon-reload
systemctl enable --now grafana-server

访问http://Grafana IP:3000,一开始默认登录用户名/密码为admin/admin,也可后续修改密码。

3.3 为Prometheus添加数据源

      进入Grafana界面,选择Connections->Data Sources,点击Add new data source,选择Prometheus

Prometheus记录规则&查询结果持久化_记录规则_02

3.4 导入内置的Dashboard

       内置DashBoard查询地址:https://grafana.com/grafana/dashboards

       Prometheus数据源有其自带的DashBoard可直接导入。

Prometheus记录规则&查询结果持久化_Grafana_03

如果是其它中间件/组件,这里以Consul为例,搜consul关键字(最好选star指数较高、下载次数多的DashBoard模板),复制ID或json内容均可,二者选其一就行。数据源记得选之前设置的Prometheus。

Prometheus记录规则&查询结果持久化_记录规则_04

Prometheus记录规则&查询结果持久化_Grafana_05

Prometheus记录规则&查询结果持久化_Grafana_06

Prometheus记录规则&查询结果持久化_记录规则_07

之后点击load。效果如下(注意数据源与DashBoard模板的兼容性,如果不兼容得重找DashBoard模板):

Prometheus记录规则&查询结果持久化_Grafana_08


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  CXvnc1NhAWTQ   2023年11月13日   34   0   0 PrometheusAlertManager
  zNxK8cIqmu7p   2023年11月02日   52   0   0 Grafana
  yx99X8RMvAE0   2023年11月02日   70   0   0 Prometheus
  zNxK8cIqmu7p   2023年11月02日   37   0   0 Prometheus