亲爱的读者们👋
欢迎加入【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 version | postgres version |
---|---|
0.15.0 | 11、12、13、14、15、16+ |
0.14.0 | 10、11、12、13、14、15+ |
0.13.2 | 10、11、12、13、14、15+ |
0.13.1 | 10、11、12、13、14、15+ |
0.13.0 | 10、11、12、13、14、15+ |
0.12.1 | 9.4、9.5、9.6、10、11、12、13、14、15+ |
0.12.0 | 9.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