当前位置: 首页 > article >正文

Prometheus自定义PostgreSQL监控指标

本文我们将介绍如何在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.kler.cn/a/371654.html

相关文章:

  • 【Mac】Homebrew
  • Chrome和Firefox哪款浏览器的密码管理更安全
  • 针对初学者的PyTorch项目推荐
  • ArcGIS必会的选择要素方法(AND、OR、R、IN等)位置选择等
  • macOS 15 Sequoia dmg格式转用于虚拟机的iso格式教程
  • 小米迎来「新起点」:硬核创新从超越到引领,小米SU7 Ultra 发布
  • 直接删除Github上的文件
  • [flask] flask-mail邮件发送
  • 论区块链技术及应用
  • 网络安全领域推荐职位
  • Data+AI下的数据飞轮:如何重塑企业增长
  • SpringBoot 解析@Value注解型解析注入时机以及原理
  • GPT-4V 是什么?
  • springboot工作原理以及自动装配原理
  • 软考高级架构 - 7.3 - 软件架构风格 - 超详细讲解+精简总结
  • Stable Diffusion 3.5发布:图像生成新纪元,多模态AI的突破!
  • 宽带自动获取ip地址好不好:利与弊的深度剖析
  • 【云原生】云原生后端:监控与观察性
  • STM32 SRAM写入16位数据时死机问题
  • 数据分析案例-苹果品质数据可视化分析+建模预测
  • React核心思维模型(一)
  • Linux中Web服务器配置和管理(Apache)
  • 时序动作定位 | CASE:基于聚类的弱监督时间动作定位前景与背景分离研究(ICCV 2023)
  • 关于AI绘画 | Stable Diffusion 技术专栏推荐文章
  • 气膜球幕:沉浸式音乐体验的新境界—轻空间
  • C++中list的使用与实现