【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

相关文章

将Mybatis升级为Mybatis-Plus的详细过程

《将Mybatis升级为Mybatis-Plus的详细过程》本文详细介绍了在若依管理系统(v3.8.8)中将MyBatis升级为MyBatis-Plus的过程,旨在提升开发效率,通过本文,开发者可实现... 目录说明流程增加依赖修改配置文件注释掉MyBATisConfig里面的Bean代码生成使用IDEA生

Linux换行符的使用方法详解

《Linux换行符的使用方法详解》本文介绍了Linux中常用的换行符LF及其在文件中的表示,展示了如何使用sed命令替换换行符,并列举了与换行符处理相关的Linux命令,通过代码讲解的非常详细,需要的... 目录简介检测文件中的换行符使用 cat -A 查看换行符使用 od -c 检查字符换行符格式转换将

使用Jackson进行JSON生成与解析的新手指南

《使用Jackson进行JSON生成与解析的新手指南》这篇文章主要为大家详细介绍了如何使用Jackson进行JSON生成与解析处理,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 核心依赖2. 基础用法2.1 对象转 jsON(序列化)2.2 JSON 转对象(反序列化)3.

Linux系统配置NAT网络模式的详细步骤(附图文)

《Linux系统配置NAT网络模式的详细步骤(附图文)》本文详细指导如何在VMware环境下配置NAT网络模式,包括设置主机和虚拟机的IP地址、网关,以及针对Linux和Windows系统的具体步骤,... 目录一、配置NAT网络模式二、设置虚拟机交换机网关2.1 打开虚拟机2.2 管理员授权2.3 设置子

使用Python实现快速搭建本地HTTP服务器

《使用Python实现快速搭建本地HTTP服务器》:本文主要介绍如何使用Python快速搭建本地HTTP服务器,轻松实现一键HTTP文件共享,同时结合二维码技术,让访问更简单,感兴趣的小伙伴可以了... 目录1. 概述2. 快速搭建 HTTP 文件共享服务2.1 核心思路2.2 代码实现2.3 代码解读3.

详解C#如何提取PDF文档中的图片

《详解C#如何提取PDF文档中的图片》提取图片可以将这些图像资源进行单独保存,方便后续在不同的项目中使用,下面我们就来看看如何使用C#通过代码从PDF文档中提取图片吧... 当 PDF 文件中包含有价值的图片,如艺术画作、设计素材、报告图表等,提取图片可以将这些图像资源进行单独保存,方便后续在不同的项目中使

Linux系统中卸载与安装JDK的详细教程

《Linux系统中卸载与安装JDK的详细教程》本文详细介绍了如何在Linux系统中通过Xshell和Xftp工具连接与传输文件,然后进行JDK的安装与卸载,安装步骤包括连接Linux、传输JDK安装包... 目录1、卸载1.1 linux删除自带的JDK1.2 Linux上卸载自己安装的JDK2、安装2.1

Android中Dialog的使用详解

《Android中Dialog的使用详解》Dialog(对话框)是Android中常用的UI组件,用于临时显示重要信息或获取用户输入,本文给大家介绍Android中Dialog的使用,感兴趣的朋友一起... 目录android中Dialog的使用详解1. 基本Dialog类型1.1 AlertDialog(

MySQL双主搭建+keepalived高可用的实现

《MySQL双主搭建+keepalived高可用的实现》本文主要介绍了MySQL双主搭建+keepalived高可用的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、测试环境准备二、主从搭建1.创建复制用户2.创建复制关系3.开启复制,确认复制是否成功4.同

C#数据结构之字符串(string)详解

《C#数据结构之字符串(string)详解》:本文主要介绍C#数据结构之字符串(string),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录转义字符序列字符串的创建字符串的声明null字符串与空字符串重复单字符字符串的构造字符串的属性和常用方法属性常用方法总结摘