Prometheus自定义PostgreSQL监控指标

news2024/12/23 13:15:52

本文我们将介绍如何在Prometheus中创建自定义PostgreSQL指标。默认情况下由postgres_export运行的查询可能不能满足用户需求,但我们可以创建自定义查询,并要求postgres_exporter公开自定义查询的结果。postgres_exporter最近被移到了Prometheus Community存储库中,并且它已经从PostgreSQL 11~16版本进行了测试。

这个工具将提供了大量PostgreSQL实例的性能指标,让你检查PostgreSQL的运行状态,并通过9187(默认)端口公开指标。

指标定义结构

postgres_exporter提供默认指标,它们非常有用。但也支持灵活地使用yaml文件添加自定义指标。这个yaml文件必须包含查询来获取你想要监控的数据,并且需要有固定的结构:

metric_name:
  master: true  (optional)
  cache_seconds: 30 (optional)
  query: "SELECT metric_1, metric_2 FROM table"
  metrics:
    - metric_1:
        usage: "LABEL"
        description: "Metric 1 description"
    - metric_2:
        usage: "GAUGE"
        description: "Metric 2 description"

它的结构非常简单,每个部分都需要了解一些注意事项:

  • metric_name:与你想要的度量名称一样简单。

  • master:在复制环境中,这个值经常与Leader主机混淆。但它真正的意思是查询将只在DATA_SOURCE_NAME参数中配置的数据库中执行。

  • cache_seconds:再次运行查询之前保留最后值的时间。如果度量数据不经常更改,请考虑添加此参数。

  • query:这是你的查询定义,它的复杂性并不重要,它可以是简单的或非常复杂的,只要确保执行速度快。查询返回的每个字段将表示定义中的一个度量。

  • metrics:这是查询返回的每个字段的数组。按照查询结果的顺序定义它,对于每个度量(字段),您需要指定:

    • usage:LABEL、GAUGE、COUNTER或HISTROGRAM。这将取决于所检索的数据以及何在图表中展示。

    • description:对检索到的数据的简短描述。

定义指标实例

Postgres exporter将度量名称和度量字段连接起来作为度量的完整名称,例如metric_name_metric_1和metric_name_metric_2。

LABEL类型的指标不会由API公开,因为它们将成为数字指标的一部分,并且对于应用过滤器非常有用。这意味着在每个度量中必须至少有一个数值(GAUGE, COUNTER 或 HISTROGRAM)。

度量指标定义

下面是典型的度量指标定义示例:

pg_database_size:
  query: "SELECT pg_database.datname, pg_database_size(pg_database.datname) as bytes FROM pg_database"
  master: true
  cache_seconds: 30
  metrics:
    - datname:
        usage: "LABEL"
        description: "Name of the database"
    - bytes:
        usage: "GAUGE"
        description: "Disk space used by the database"

上面指标的完整名称为:pg_database_size_bytes

从postgresql -export REST-API检查度量:

$ curl http://localhost:9187/metrics -s | grep pg_database_size_bytes
# HELP pg_database_size_bytes Disk space used by the database in bytes
# TYPE pg_database_size_bytes gauge
pg_database_size_bytes{datname="postgres",server="postgres:5432"} 8.758051e+06
pg_database_size_bytes{datname="template0",server="postgres:5432"} 8.602115e+06
pg_database_size_bytes{datname="template1",server="postgres:5432"} 8.602115e+06

我们看到度量显示信息还添加了其他信息:TYPE和描述显示为HELP,并且将LABEL类型的所有字段添加到度量中,我们可以对LABLE进行过滤。
在这里插入图片描述

可以在Grafana中添加简单图表:

在这里插入图片描述

这只是非常简单的例子,说明你可以做什么。下面继续介绍关于postgresql-export配置的一些要点。

PostgreSQL配置

根据你的环境,可以仅使用单个postgres-exporter,也可以在每个PostgreSQL实例中使用postgres-exporter,你可以在DATA_SOURCE_NAME环境变量中使用连接字符串之间的逗号分隔来定义它。

要收集单个实例的指标,可以这样设置DATA_SOURCE_NAME环境变量:

DATA_SOURCE_NAME="postgresql://POSTGRES_USER:PASSWORD@localhost:5432/postgres?sslmode=disable"

如果你想为多个PostgreSQL实例设置postgres-exporter,你可以这样设置环境变量:

DATA_SOURCE_NAME="postgresql://POSTGRES_USER:PASSWORD@host1:5432/postgres?sslmode=disable,postgresql://POSTGRES_USER:PASSWORD@host2:5432/postgres?sslmode=disable"

可以配置postgres-exporter从多个PostgreSQL实例中收集指标,但目前还不是推荐的配置,因为现有的一个尚未解决的错误会打开太多的连接来收集指标,在这里查看问题。因此,建议每个PostgreSQL实例都有自己的postgres-exporter,这样可以在监控仪表板中的查看所有节点。

业务相关指标

通常需要收集与业务相关信息相关的度量,例如最近N小时内创建的用户数量、核心业务相关流程持续时间等。所有这些都可以添加到每个postgres-exporter服务配置中。有时,为了保障数据库主要服务业务,将复杂监控负载移出主节点,例如复杂报告或连续聚合查询是在副本服务器中完成。

自动发现服务

  • PG_EXPORTER_AUTO_DISCOVER_DATABASES=truepg_exporter相关的配置选项。pg_exporter是用于从 PostgreSQL 数据库收集指标并将其暴露给监控系统(如 Prometheus)的工具。还可以将它与PG_EXPORTER_EXCLUDE_DATABASES和PG_EXPORTER_INCLUDE_DATABASES环境变量组合使用。
  • 当设置PG_EXPORTER_AUTO_DISCOVER_DATABASEStrue时,pg_exporter会自动发现 PostgreSQL 服务器中的所有数据库,并开始收集这些数据库的相关指标。这意味着不需要手动为每个数据库配置监控,pg_exporter会自动扫描并收集诸如数据库连接数、查询执行情况、事务处理数量等各种指标信息。

查询配置文件

使用环境变量PG_EXPORTER_EXTEND_QUERY_PATH添加自定义查询queries.yaml文件,该值必须包含文件的路径。例如:

PG_EXPORTER_EXTEND_QUERY_PATH="/opt/postgres_exporter/queries.yaml"

常量标签

PG_EXPORTER_CONSTANT_LABELS将添加到所有指标中。建议至少添加一个标签来帮助识别度量标准的来源,比如cluster_name。当你有多个集群时,将更容易过滤它们。

## 总结

本文中提出的建议是基于使用pg_exporter的经验以及在本地环境和云环境中进行的配置。并不是所有的配置参数都被提及,但是重要的配置参数需要考虑实际需求,但自定义度量指标总是在一定程度会派上用场。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2224493.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

acwing排列数字

排列数字 给定一个整数 n,将数字 1∼n排成一排,将会有很多种排列方法。 现在,请你按照字典序将所有的排列方法输出。 输入格式 共一行,包含一个整数 n。 输出格式 按字典序输出所有排列方案,每个方案占一行。 数…

lvs知识点归纳

LVS(Linux Virtual Server)是 Linux 内核的一种负载均衡技术,主要用于实现高可用性和高性能的服务器集群。以下是一些关键知识点的归纳: 基本概念 虚拟服务器:将多台物理服务器(真实服务器)抽象…

论文速读 - Cleaner Pretraining Corpus Curation with Neural Web Scraping

这是论文 Cleaner Pretraining Corpus Curation with Neural Web Scraping 的速读笔记,同时简要分析这篇论文作者的实现代码. 论文的主要工作是提出了基于神经网络的高效crawler. 这里先澄清scraper和crawler的区别,一图胜千言. Abstract The web conta…

openpnp - bug - 散料飞达至少定义2个物料

文章目录 openpnp - bug - 散料飞达至少定义2个物料笔记END openpnp - bug - 散料飞达至少定义2个物料 笔记 散料飞达上定义的物料个数用完了,现在只需要一个料就可以。 用顶部相机去找编带上是否还有一个单独的料,找到了。 定义散料飞达的料为1个&…

springboot使用attachment方式下载文件损坏问题解决

文章目录 场景解决方式全部代码 场景 之前使用springboot下载文件一直正常&#xff0c;今天新对接一个接口出现文件破损&#xff0c;无法下载。 之前的代码: Overridepublic ResponseEntity<ByteArrayResource> resultExcel(ExcelResultDTO excelResultDTO) {log.info(…

CentOS7系统内核升级

1. 安装新内核 采用离线方式升级 去到下面网站中下载rpm安装包 https://mirrors.coreix.net/elrepo-archive-archive/kernel/el7/x86_64/RPMS/下载 wget https://mirrors.coreix.net/elrepo-archive-archive/kernel/el7/x86_64/RPMS/kernel-lt-5.4.278-1.el7.elrepo.x86_64…

探寻闲鱼libsgmain加解密算法(4) ——JNI入口跳转

关注我的人都知道我一直在学习阿里的加密和算法&#xff0c;除了研究逆向问题&#xff0c;还会把学来的阿里技术用在自己的应用上。 为什么&#xff1f;因为学习大厂的应用&#xff0c;是进步最快的方法。而大厂在安全和加密方面的技术&#xff0c;个人觉得阿里做的是最好的。 …

Maven项目管理工具-初始+环境配置

1. Maven的概念 1.1. 什么是Maven Maven是跨平台的项目管理工具。主要服务于基于Java平台的项目构建&#xff0c;依赖管理和项目信息管理。 理想的项目构建&#xff1a;高度自动化&#xff0c;跨平台&#xff0c;可重用的组件&#xff0c;标准化的流程 maven能够自动下载依…

Maven 不同环境灵活构建

需求: 使用 Maven根据不同的构建环境&#xff08;如开发、测试、生产&#xff09;来定义不同的配置&#xff0c;实现灵活的构建管理。 需要Demo项目的可以参考&#xff1a;我的demo项目 一、项目分层 一般的初创项目不会有特别多的配置文件&#xff0c;所以使用 spring.profile…

Android调用系统相机录像并设置参数

最近要做一个 Android上的录像功能&#xff0c;由于之前做拍照功能完全是用自定义方式&#xff0c;太麻烦。故这次决定直接调用系统相机来录像。 一、添加权限 首先&#xff0c;添加必要的权限 <!-- 授予该程序使用摄像头的权限 --><uses-permission android:name&q…

K8s中TSL证书如何续期

TSL是什么 K8s中的作用是什么&#xff1f; 在 Kubernetes&#xff08;K8s&#xff09;中&#xff0c;TSL 指的是 Transport Layer Security&#xff0c;也就是传输层安全协议。它是用来保护在网络上传输的数据的安全性和隐私性。 TSL 在 Kubernetes 中的作用包括&#xff1a;…

B+树(B树的改进)

目录 一、什么是B树&#xff1f; 二、B树的性质 1.B树被广泛作为数据库索引的索引结构 2.m个分支的结点有m个元素 3.每个元素对应子结点最大值 4.多级索引结构 5.叶子结点层包含所有元素 三、B树和B树的区别 四、B树的查找 1.顺序查找 2.随机查找 3.范围查找 一、什…

JVM机制

文章目录 JVM 简介JVM内存划分堆&#xff08;线程共享&#xff09;Java虚拟机栈&#xff08;线程私有&#xff09;本地方法栈&#xff08;线程私有&#xff09;程序计数器&#xff08;线程私有&#xff09;方法区&#xff08;线程共享&#xff09; JVM类加载机制类加载过程双亲…

校园表白墙源码修复版

此校园表白墙源码基于thinkphp&#xff0c;因为时代久远有不少bug&#xff0c;经本人修复已去除大部分bug&#xff0c;添加了美化元素。 https://pan.quark.cn/s/1f9b3564c84b https://pan.baidu.com/s/1bb9vu9VV2jJoo9-GF6W3xw?pwd7293 https://caiyun.139.com/m/i?2hoTc…

群控系统服务端开发模式-应用开发-业务架构逻辑开发准备工作

安装与仓库已经调整完毕&#xff0c;现在开发业务架构逻辑&#xff0c;其次再开发功能逻辑。业务架构逻辑开发与功能逻辑开发不是一回事&#xff0c;一定要明白。业务架构指的是做某一件事或是某一种类型的事的逻辑&#xff0c;在互联网web应用中通常指一套系统的外在逻辑&…

js 的宏任务和微任务

宏任务 (macro-task) 与微任务 (micro-task) 在 JavaScript 中&#xff0c;宏任务&#xff08;macro-task&#xff09;和微任务&#xff08;micro-task&#xff09;是任务队列&#xff08;task queue&#xff09;中两个不同的任务类型&#xff0c;它们是 JavaScript 异步编程机…

DBeaver查看已保存连接的密码

打开Dbeaver窗口菜单-首选项-工作空间&#xff0c;找到工作空间路径 在文件管理器中打开工作空间路径\General.dbeaver&#xff0c;找到credentials-config.json。 在Linux下&#xff0c;使用如下命令对credentials-config.json文件进行解密 openssl aes-128-cbc -d -K babb4…

13 实战:使用Python和Pygame实现视频运动估计播放器

首先看运行效果: 在多媒体处理领域,视频的运动估计是一个重要的课题。在本文中,我们将详细介绍如何使用Python结合Pygame、OpenCV等库,实现一个支持运动估计的视频播放器。本项目旨在展示如何在Python中处理视频帧,实现块匹配算法进行运动估计,并将结果以可视化的方式呈现…

kafka 分布式(不是单机)的情况下,如何保证消息的顺序消费?

大家好&#xff0c;我是锋哥。今天分享关于【kafka 分布式&#xff08;不是单机&#xff09;的情况下&#xff0c;如何保证消息的顺序消费?】面试题&#xff1f;希望对大家有帮助&#xff1b; kafka 分布式&#xff08;不是单机&#xff09;的情况下&#xff0c;如何保证消息的…

TypeScript基础简介

TypeScript是Javascript的一个超集。 TypeScript在原有的基础之上又添加了编译器类型检查的功能&#xff0c;意味着如果使用ts进行开发&#xff0c;会对变量的类型进行较为严格的验证&#xff0c;防止程序员写出可能出错的代码&#xff0c;规范变成习惯&#xff0c;适合大项目开…