【30天精通Prometheus:一站式监控实战指南】第7天:postgres_exporter从入门到实战:安装、配置详解与生产环境搭建指南,超详细

本文主要是介绍【30天精通Prometheus:一站式监控实战指南】第7天:postgres_exporter从入门到实战:安装、配置详解与生产环境搭建指南,超详细,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

亲爱的读者们👋

  欢迎加入【30天精通Prometheus】专栏!📚 在这里,我们将探索Prometheus的强大功能,并将其应用于实际监控中。这个专栏都将为你提供宝贵的实战经验。🚀

  Prometheus是云原生和DevOps的核心监控工具,我们将从基础概念开始,逐步涵盖配置、查询、告警和可视化。💪

  在接下来的30天里,我们将解锁Prometheus的实战技巧,通过案例和分享,助你深入理解其工作原理。📆

  目标:30天后,你将熟练掌握Prometheus,为未来的项目挑战做好准备!💯

  这是一段精彩旅程,期待你的加入!🎉


文章目录

  • 一、postgres_exporter概述📘
  • 二、安装postgres_exporter💾
    • 2.1 访问postgres_exporter官方网站 🌐
    • 2.2 选择适合的版本🔍
    • 2.3 下载postgres_exporter⬇️
    • 2.4 解压安装包📂
    • 2.5 创建postgres_exporter.yml认证文件
    • 2.6 在数据库创建监控用户并授权,以非超级用户身份运行
    • 2.7 运行postgres_exporter🚀
  • 三、postgres_exporter指标和配置详解📖
    • 3.1 postgres_exporter.service
  • 四、实战演练:生产环境搭建指南🔨
    • 4.1 创建普通用户管理postgres_exporter👤
    • 4.2 解压postgres_exporter.tar.gz📦
    • 4.3 将postgres_exporter集成到Prometheus配置中✂️
    • 4.4 更改postgres_exporter软件包名称✂️
    • 4.5 编辑postgres_exporter.service文件📝
    • 4.6 启动postgres_exporter.service🔌
    • 4.7 查看服务是否正常启动🔍
  • 相关资料下载地址📚

一、postgres_exporter概述📘

定义
  postgres_exporter是一个开源的监控工具,专门设计用于收集和导出PostgreSQL数据库的性能指标,以便进行监控和分析。它是Prometheus监控框架的一部分,可以将收集到的数据格式化为Prometheus可以识别的格式。

功能

  1.数据收集:postgres_exporter能够连接到PostgreSQL数据库,并从中收集各种性能指标,如查询执行时间、缓存使用情况、事务状态、连接数等。
  2.数据导出:收集到的数据会被格式化为Prometheus可以理解的metrics格式,使得Prometheus能够抓取并存储这些数据。
  3.兼容性:postgres_exporter支持多种PostgreSQL版本,并能很好地与Prometheus及其他监控工具集成。

应用场景

  • IT运维和数据库管理:对于管理和监控大量PostgreSQL数据库实例的企业或组织,postgres_exporter是一个非常重要的工具。它可以帮助IT运维团队实时监控每个数据库的性能状况,从而及时发现并解决潜在问题。
  • 云服务提供商:云服务提供商可以利用postgres_exporter为客户提供详尽的数据库性能报告,以此提升其服务质量并增强客户满意度。
  • 开发和测试环境:在软件开发和测试阶段,postgres_exporter可以帮助开发和测试团队监控数据库性能,确保应用程序与数据库的交互达到最优效果。

二、安装postgres_exporter💾

注意事项和常见问题
  1.权限问题:在安装postgres_exporter之前,请确认当前用户具有执行安装命令和访问必要目录的足够权限。在类Unix系统中,您可能需要使用sudo或作为root用户来执行安装。
  2.防火墙和安全组配置:默认情况下,postgres_exporter会监听某个特定端口(如9187)。请确保服务器的防火墙或安全组规则允许Prometheus服务器访问该端口。
  3.配置文件与服务管理:如果使用systemd来管理服务,请确保/etc/systemd/system/postgres_exporter.service文件已正确配置,以便服务能顺利启动、停止和重启。
  4.日志与错误排查:定期检查postgres_exporter的日志,以便及时发现问题并解决。如果使用systemd,可以利用journalctl -u postgres_exporter命令来查看相关日志。
  5.版本兼容性:在安装之前,请确认postgres_exporter的版本与您的PostgreSQL数据库以及Prometheus的版本相兼容。
  6.安装路径与权限:确保postgres_exporter的安装路径具有正确的权限,以便服务能够正常访问和执行。同时,检查所有配置文件(如包含数据库连接信息的配置文件)的路径和权限设置是否正确。

2.1 访问postgres_exporter官方网站 🌐

  • 打开浏览器,访问postgres_exporter的官方Github下载页面,通常位于Github官方网站下:https://github.com/prometheus-community/postgres_exporter/tree/v0.12.1?tab=readme-ov-file

2.2 选择适合的版本🔍

  • 在下载页面,你将看到不同操作系统的postgres_exporter二进制包。根据你的操作系统选择适合的版本。例如,如果你使用的是Linux 64位系统,就选择postgres_exporter-x.x.x.linux-amd64.tar.gz(其中x.x.x是版本号)。
postgres_exporter versionpostgres version
0.15.011、12、13、14、15、16+
0.14.010、11、12、13、14、15+
0.13.210、11、12、13、14、15+
0.13.110、11、12、13、14、15+
0.13.010、11、12、13、14、15+
0.12.19.4、9.5、9.6、10、11、12、13、14、15+
0.12.09.4、9.5、9.6、10、11、12、13、14、15+

2.3 下载postgres_exporter⬇️

  • 点击所选版本的下载链接,将postgres_exporter的二进制包下载到你的本地计算机。

2.4 解压安装包📂

  • 将下载的postgres_exporter压缩包解压到你想要安装的目录。你可以使用命令行工具(如tar)来完成这个步骤。解压后,你将看到一个名为postgres_exporter-x.x.x.linux-amd64的目录,其中包含postgres_exporter的二进制文件和其他相关文件。
tar -xzf postgres_exporter-x.x.x.linux-amd64.tar.gz

2.5 创建postgres_exporter.yml认证文件

auth_modules:foo1: # Set this to any name you wanttype: userpassuserpass:username: exporterpassword: exporter!@#2024options:# options become key=value parameters of the DSNsslmode: disable

2.6 在数据库创建监控用户并授权,以非超级用户身份运行

-- 为了使用IF语句,在尝试创建用户之前检查用户是否存在,  
-- 我们需要使用过程式SQL(PL/pgSQL)而不是标准SQL。  
-- 更多信息:https://www.postgresql.org/docs/9.3/plpgsql-overview.html  
-- 为了保持与9.0以下版本的兼容性,不使用DO块;而是创建并随后删除一个函数。  
CREATE OR REPLACE FUNCTION __tmp_create_user() returns void as $$
BEGIN-- 如果用户'exporter'不存在,则创建该用户  IF NOT EXISTS (SELECT                       -- SELECT列表可以为FROM   pg_catalog.pg_userWHERE  usename = 'exporter') THENCREATE USER exporter;END IF;
END;
$$ language plpgsql;-- 调用上面创建的函数来尝试创建用户  
SELECT __tmp_create_user();
-- 删除临时函数
DROP FUNCTION __tmp_create_user();-- 修改用户exporter的密码,并设置其搜索路径
ALTER USER exporter WITH PASSWORD 'exporter!@#2024';
ALTER USER exporter SET SEARCH_PATH TO postgres_exporter,pg_catalog;-- 如果作为非超级用户部署(例如在AWS RDS中),请取消注释下面的GRANT行,  
-- 并用您的根用户替换<MASTER_USER>。  
-- 授予用户exporter连接到postgres数据库的权限  
GRANT CONNECT ON DATABASE postgres TO exporter;-- 如果使用 PostgreSQL 版本大于或等于10,请运行以下命令,  
-- 授予用户postgres_exporter监控数据库的权限  
GRANT pg_monitor to exporter;-- 仅当使用早于10的 PostgreSQL 版本时,才运行以下SQL命令。  
-- 在PostgreSQL中,视图以创建视图的用户的权限运行,因此它们可以充当安全屏障。  
-- 需要创建函数来共享非超级用户的数据。只有通过创建视图,才会遗漏最重要的数据位。 -- 创建一个名为postgres_exporter的模式(如果不存在)  
CREATE SCHEMA IF NOT EXISTS exporter;-- 授予用户exporter 对该模式的使用权限  
GRANT USAGE ON SCHEMA exporter TO exporter;-- 创建一个函数,返回pg_stat_activity的集合  
CREATE OR REPLACE FUNCTION get_pg_stat_activity() RETURNS SETOF pg_stat_activity AS
$$ SELECT * FROM pg_catalog.pg_stat_activity; $$
LANGUAGE sql
VOLATILE
SECURITY DEFINER;-- 创建一个视图,显示get_pg_stat_activity函数的结果  
CREATE OR REPLACE VIEW exporter.pg_stat_activity
ASSELECT * from get_pg_stat_activity();-- 授予用户exporter对该视图的查询权限  
GRANT SELECT ON exporter.pg_stat_activity TO exporter;-- 创建一个函数,该函数返回pg_stat_replication的集合  
-- pg_stat_replication是一个系统视图,提供了复制状态的信息
CREATE OR REPLACE FUNCTION get_pg_stat_replication() RETURNS SETOF pg_stat_replication AS
$$ SELECT * FROM pg_catalog.pg_stat_replication; $$
LANGUAGE sql
VOLATILE
SECURITY DEFINER;-- 创建一个视图,该视图调用上面创建的get_pg_stat_replication函数来获取数据  
-- 注意这里将视图创建在了exporter模式下,与之前示例中的postgres_exporter模式不同  
-- 请确保您的环境中存在exporter模式,或者根据需要调整模式名称
CREATE OR REPLACE VIEW exporter.pg_stat_replication
ASSELECT * FROM get_pg_stat_replication();-- 授予exporter用户对该视图的查询权限,使得exporter用户可以查看复制状态信息  
GRANT SELECT ON exporter.pg_stat_replication TO exporter;-- 如果尚未安装pg_stat_statements扩展,则进行安装  
-- pg_stat_statements扩展用于跟踪SQL语句的执行统计信息  
CREATE EXTENSION IF NOT EXISTS pg_stat_statements;
CREATE OR REPLACE FUNCTION get_pg_stat_statements() RETURNS SETOF pg_stat_statements AS
$$ SELECT * FROM public.pg_stat_statements; $$
LANGUAGE sql
VOLATILE
SECURITY DEFINER;-- 创建一个视图,该视图调用上面创建的get_pg_stat_statements函数来获取数据  
-- 这个视图被创建在postgres_exporter模式下
CREATE OR REPLACE VIEW exporter.pg_stat_statements
ASSELECT * FROM get_pg_stat_statements();-- 授予postgres_exporter用户对该视图的查询权限  
-- 使得postgres_exporter用户可以查看SQL语句的执行统计信息 
GRANT SELECT ON exporter.pg_stat_statements TO exporter;

2.7 运行postgres_exporter🚀

  进入解压后的目录,并运行postgres_exporter服务器。在Linux下,你可以使用如下命令。这样就使用默认的配置启动postgres_exporter服务器。如果一切正常,你应该能在终端看到postgres_exporter的启动日志。

cd postgres_exporter-x.x.x.linux-amd64# 配置变量(DATA_SOURCE_NAME=postgresql://exporter:password@localhost:5432/postgres?sslmode=disable)
export DATA_SOURCE_NAME=postgresql://exporter:'exporter!@#2024'@127.0.0.1:5432/postgres?sslmode=disable# 启动服务
/home/deploy/postgres_exporter/postgres_exporter \--config.file=/home/deploy/postgres_exporter/postgres_exporter.yml \--log.level=info \--web.listen-address=:9187

三、postgres_exporter指标和配置详解📖

3.1 postgres_exporter.service

采集器

  • - -[no-]collector.database
       当启用 --collector.database 时,postgres_exporter 会收集与数据库整体性能相关的指标,如连接数、事务数、缓存命中率等。如果使用 --no-collector.database,则会禁用这个采集器,不收集这些指标。
  • - -[no-]collector.bgwriter
      PostgreSQL 有一个后台写进程(bgwriter),它负责将数据异步写入磁盘,以减轻前台进程的写负担。启用 --collector.bgwriter 时,postgres_exporter 会收集与 bgwriter 相关的性能指标,如写入的缓冲区数量、清理的缓冲区数量等。使用 --no-collector.bgwriter 会禁用这个采集器。
  • - -[no-]collector.replication_slot
       PostgreSQL 支持逻辑复制功能,其中 replication slot 是该功能的一个重要组件,用于保存复制进度。当启用 --collector.replication_slot 时,postgres_exporter 会收集与 replication slot 相关的指标,如 slot 的状态、是否活跃、是否堵塞等。如果使用 --no-collector.replication_slot,则会禁用这个采集器,不收集这些指标。

配置和监听

  • - -config.file=“postgres_exporter.yml”
       指定 postgres_exporter 的配置文件路径。配置文件中通常包含了连接到 PostgreSQL 数据库所需的参数,如数据库地址、端口、用户名、密码等,以及其他可能的配置选项。
  • - -[no-]web.systemd-socket
       使用该标志来指示 postgres_exporter 使用 systemd 套接字激活来监听连接,而不是直接监听特定的网络端口。这种方式可以让 systemd 管理套接字并传递连接给 postgres_exporter,通常用于提高安全性和性能。
  • - -web.listen-address=:9187
      设置 postgres_exporter 监听的 IP 地址和端口。在这个例子中,它监听所有 IP 地址(由 : 表示)的 9187 端口。你可以更改 IP 地址和端口号以满足你的网络配置需求。
  • - -web.config.file=“”
      [实验性] 这个参数允许你指定一个配置文件,该文件可以包含用于启用 TLS 加密连接或设置身份验证的选项。这是一个实验性功能,因此在使用之前应该仔细测试。
  • - -web.telemetry-path=“/metrics”
       定义了 postgres_exporter 暴露指标数据的 HTTP 路径。在这里,Prometheus 或其他监控工具将通过访问 /metrics 路径来获取数据。你可以根据需要更改这个路径。

指标和设置

  • - -[no-]disable-default-metrics
       使用 --disable-default-metrics 标志时,postgres_exporter 将不会收集默认的 PostgreSQL 监控指标。这些默认指标通常包括数据库连接数、事务状态、锁信息等。如果你只想收集特定的自定义指标,而不是默认的全面监控,那么这个选项会很有用。
  • - -[no-]disable-settings-metrics
       PostgreSQL 的 pg_settings 视图提供了数据库的配置信息。如果你不希望 postgres_exporter 收集这些配置信息相关的指标,可以使用 --disable-settings-metrics 标志来禁用它们。
  • - -[no-]auto-discover-databases
       PostgreSQL 服务器上可能运行着多个数据库。当启用 --auto-discover-databases 时,postgres_exporter 会自动发现服务器上的所有数据库,并为每个数据库收集指标。如果你只想监控特定的数据库,可以禁用这个选项,并在配置文件中明确指定要监控的数据库。
  • - -extend.query-path=“”
       允许你指定一个包含自定义查询的文件路径。postgres_exporter 会执行这些自定义查询,并将结果作为指标暴露出来。这对于需要监控 PostgreSQL 中非标准或特定业务逻辑的指标非常有用。你可以在这个文件中编写任意的 SQL 查询,并定义如何将这些查询的结果转换为 Prometheus 可以理解的指标格式。例如:- -extend.query-path=/home/deploy/postgres_exporter/queries.yml

其他选项

  • - -[no-]dumpmaps
       当使用 --dumpmaps 参数时,postgres_exporter 不会实际运行并暴露指标,而是会转储(dump)内部指标映射并退出。这主要用于调试和开发目的,以帮助开发者理解 postgres_exporter 如何将 PostgreSQL 的内部指标映射到 Prometheus 可以理解的格式。

  • - -constantLabels=“”
       此参数允许用户为所有暴露的指标设置一组常量的标签。这些标签将附加到 postgres_exporter 收集的每个指标上。格式应为 label=value,如果有多个标签,它们之间应使用逗号分隔。这有助于在 Prometheus 中对数据进行更细致的划分和查询。

  • - -exclude-databases=“”
       当启用 autoDiscoverDatabases 时,此参数允许用户指定一个数据库列表,这些数据库将被排除在自动发现过程之外。这对于你希望监控大多数数据库但排除某些特定数据库的情况非常有用。

  • - -include-databases=“”
       与 exclude-databases 相反,此参数允许用户指定一个数据库列表,仅当启用 autoDiscoverDatabases 时,postgres_exporter 才会监控这些指定的数据库。这有助于减少监控范围,只关注最重要的数据库。

  • - -metric-prefix=“pg”
       默认情况下,postgres_exporter 暴露的指标名称都以 pg_ 为前缀。使用此参数,用户可以更改这个前缀。例如,如果你希望所有指标都以 mypg_ 开头而不是 pg_,你可以设置 --metric-prefix=“mypg”。

四、实战演练:生产环境搭建指南🔨

4.1 创建普通用户管理postgres_exporter👤

useradd deploy

4.2 解压postgres_exporter.tar.gz📦

注意:
  我的是x86,所以使用postgres_exporter-0.12.1.linux-amd64.tar.gz,您可以使用uname -a命令查看系统架构

tar xvf postgres_exporter-0.12.1.linux-amd64.tar.gz -C /home/deploy/

4.3 将postgres_exporter集成到Prometheus配置中✂️

  将postgres_exporter集成到Prometheus配置中,确保数据能够正常采集。编辑Prometheus的配置文件(通常是prometheus.yml),在scrape_configs部分添加postgres_exporter的配置。告诉Prometheus将采集localhost:9187的数据。

scrape_configs:# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.- job_name: "postgres_exporter"static_configs:- targets: ["localhost:9187"]

4.4 更改postgres_exporter软件包名称✂️

mv /home/deploy/postgres_exporter-0.12.1.linux-amd64.tar.gz /home/deploy/postgres_exporter

4.5 编辑postgres_exporter.service文件📝

cat > /etc/systemd/system/postgres_exporter	.service <<EOF
[Unit]
Description=PostgreSQL Exporter
After=network.target[Service]
Type=simple
User=root
Group=root
Environment="DATA_SOURCE_NAME=postgresql://exporter:'exporter!@#2024'@127.0.0.1:5432/postgres?sslmode=disable"
ExecStart=/home/deploy/postgres_exporter/postgres_exporter \--config.file=/home/deploy/postgres_exporter/postgres_exporter.yml \--log.level=info \--web.listen-address=:9101
ExecReload=/bin/kill -HUP
Restart=on-failure[Install]
WantedBy=multi-user.target
EOF

4.6 启动postgres_exporter.service🔌

sudo systemctl daemon-reloadsudo systemctl enable --now postgres_exporter.service

4.7 查看服务是否正常启动🔍

# 查看service服务是否启动
sudo systemctl status postgres_exporter.service# 查看端口是否存在
sudo ss -ntulp | grep 9187

相关资料下载地址📚

  • 官方文档:https://prometheus.io/docs/introduction/overview/
  • 下载地址:https://github.com/prometheus/prometheus/releases/tag/v2.52.0
  • 文档地址:https://prometheus.io/docs/prometheus/latest/installation/
  • 离线包下载链接:https://pan.baidu.com/s/1ANF_AlFnM5_FMIbKBuzBmg 提取码:yqpt

这篇关于【30天精通Prometheus:一站式监控实战指南】第7天:postgres_exporter从入门到实战:安装、配置详解与生产环境搭建指南,超详细的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1000804

相关文章

Debezium 与 Apache Kafka 的集成方式步骤详解

《Debezium与ApacheKafka的集成方式步骤详解》本文详细介绍了如何将Debezium与ApacheKafka集成,包括集成概述、步骤、注意事项等,通过KafkaConnect,D... 目录一、集成概述二、集成步骤1. 准备 Kafka 环境2. 配置 Kafka Connect3. 安装 D

Java中ArrayList和LinkedList有什么区别举例详解

《Java中ArrayList和LinkedList有什么区别举例详解》:本文主要介绍Java中ArrayList和LinkedList区别的相关资料,包括数据结构特性、核心操作性能、内存与GC影... 目录一、底层数据结构二、核心操作性能对比三、内存与 GC 影响四、扩容机制五、线程安全与并发方案六、工程

Java调用DeepSeek API的最佳实践及详细代码示例

《Java调用DeepSeekAPI的最佳实践及详细代码示例》:本文主要介绍如何使用Java调用DeepSeekAPI,包括获取API密钥、添加HTTP客户端依赖、创建HTTP请求、处理响应、... 目录1. 获取API密钥2. 添加HTTP客户端依赖3. 创建HTTP请求4. 处理响应5. 错误处理6.

Spring AI集成DeepSeek的详细步骤

《SpringAI集成DeepSeek的详细步骤》DeepSeek作为一款卓越的国产AI模型,越来越多的公司考虑在自己的应用中集成,对于Java应用来说,我们可以借助SpringAI集成DeepSe... 目录DeepSeek 介绍Spring AI 是什么?1、环境准备2、构建项目2.1、pom依赖2.2

python使用fastapi实现多语言国际化的操作指南

《python使用fastapi实现多语言国际化的操作指南》本文介绍了使用Python和FastAPI实现多语言国际化的操作指南,包括多语言架构技术栈、翻译管理、前端本地化、语言切换机制以及常见陷阱和... 目录多语言国际化实现指南项目多语言架构技术栈目录结构翻译工作流1. 翻译数据存储2. 翻译生成脚本

Spring Cloud LoadBalancer 负载均衡详解

《SpringCloudLoadBalancer负载均衡详解》本文介绍了如何在SpringCloud中使用SpringCloudLoadBalancer实现客户端负载均衡,并详细讲解了轮询策略和... 目录1. 在 idea 上运行多个服务2. 问题引入3. 负载均衡4. Spring Cloud Load

Springboot中分析SQL性能的两种方式详解

《Springboot中分析SQL性能的两种方式详解》文章介绍了SQL性能分析的两种方式:MyBatis-Plus性能分析插件和p6spy框架,MyBatis-Plus插件配置简单,适用于开发和测试环... 目录SQL性能分析的两种方式:功能介绍实现方式:实现步骤:SQL性能分析的两种方式:功能介绍记录

在 Spring Boot 中使用 @Autowired和 @Bean注解的示例详解

《在SpringBoot中使用@Autowired和@Bean注解的示例详解》本文通过一个示例演示了如何在SpringBoot中使用@Autowired和@Bean注解进行依赖注入和Bean... 目录在 Spring Boot 中使用 @Autowired 和 @Bean 注解示例背景1. 定义 Stud

使用 sql-research-assistant进行 SQL 数据库研究的实战指南(代码实现演示)

《使用sql-research-assistant进行SQL数据库研究的实战指南(代码实现演示)》本文介绍了sql-research-assistant工具,该工具基于LangChain框架,集... 目录技术背景介绍核心原理解析代码实现演示安装和配置项目集成LangSmith 配置(可选)启动服务应用场景

Goland debug失效详细解决步骤(合集)

《Golanddebug失效详细解决步骤(合集)》今天用Goland开发时,打断点,以debug方式运行,发现程序并没有断住,程序跳过了断点,直接运行结束,网上搜寻了大量文章,最后得以解决,特此在这... 目录Bug:Goland debug失效详细解决步骤【合集】情况一:Go或Goland架构不对情况二: