【prometheus+Grafana篇】基于Prometheus+Grafana实现postgreSQL数据库的监控与可视化

💫《博主主页》:

🔎 CSDN主页__奈斯DB

🔎 IF Club社区主页__奈斯、

**🔥《擅长领域》:**擅长阿里云AnalyticDB for MySQL(分布式数据仓库)、Oracle、MySQL、Linux、prometheus监控;并对SQLserver、NoSQL(MongoDB)有了解

💖如果觉得文章对你有所帮助,欢迎点赞收藏加关注💖

如期而至,今天继续给大家分享监控系列的文章------使用Prometheus+Grafana打造专业的postgreSQL监控系统 。 Prometheus抓指标 🔍 + Grafana画大屏 📈 + Alertmanager拍电报 📢,跟着三步走,打造PostgreSQL监控天网🚀。

特别说明💥:

📌 开源仪表盘引用

  • **本文采用的postgreSQL数据库监控仪表盘直接使用了Grafana官网开源项目(Dashboard ID:**9628 ),非常感谢原作者(Lucas Estienne)的无私分享。关于Grafana的所有配置步骤均基于该开源仪表盘并验证通过,各位可一键导入快速搭建专业级的可视化监控。

⚡ 原创告警规则实现

  • 关于告警部分为博主独立开发完成,针对postgreSQL数据库实现了如下告警:

    • ✅ postgreSQL 实例不可用

🔗 Prometheus+Grafana监控postgreSQL全流程

prometheus+Grafana全系列文章(实时更新🔥):

|--------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 序号 | 文章 |
| 1 | 【prometheus+Grafana篇】Prometheus与Grafana:深入了解监控架构与数据可视化分析平台-CSDN博客 |
| 2 | 【prometheus+Grafana篇】从零开始:Linux 7.6 上二进制安装 Prometheus、Grafana 和 Node Exporter_grafana二进制部署-CSDN博客 |
| 3 | 【prometheus+Grafana篇】Prometheus告警规则参数全解析 + Alertmanager实现多平台告警(含电子邮件/企业微信群/飞书群/钉钉群接受方式)_grafana做飞书机器人报警-CSDN博客 |
| 4 | 【prometheus+Grafana篇】基于Prometheus+Grafana实现Linux操作系统的监控与可视化-CSDN博客 |
| 5 | 【prometheus+Grafana篇】基于Prometheus+Grafana实现windows操作系统的监控与可视化_grafana 监控 windows-CSDN博客 |
| 6 | 【prometheus+Grafana篇】基于Prometheus+Grafana实现Oracle数据库的监控与可视化-CSDN博客 |
| 7 | 【prometheus+Grafana篇】基于Prometheus+Grafana实现MySQL数据库的监控与可视化-CSDN博客 |
| 8 | 【prometheus+Grafana篇】基于Prometheus+Grafana实现MongoDB数据库的监控与可视化-CSDN博客 |
| 9 | 【prometheus+Grafana篇】基于Prometheus+Grafana实现Redis数据库的监控与可视化-CSDN博客 |
| 10 | 【prometheus+Grafana篇】基于Prometheus+Grafana实现postgreSQL数据库的监控与可视化-CSDN博客 |


目录

[一、在postgresql 5432实例上的操作](#一、在postgresql 5432实例上的操作)

二、安装postgres_exporter(postgres_exporter:是prometheus的一个插件,抓取和收集postgresql数据库的各种运行指标用于分析。postgres_exporter插件是GitHub开源组织提供的,通过GitHub官网下载postgres_exporter)

[1)下载postgres_exporter安装包,选择download,然后点击"Exporters and integrations",选择postgres_exporter](#1)下载postgres_exporter安装包,选择download,然后点击“Exporters and integrations”,选择postgres_exporter)

2)跳转到了gitHub,点击postgres_exporter的版本集,选择最新的postgres_exporter下载

3)目前postgres_exporter最新版本为0.17.1。

4)解压二进制postgres_exporter包

5)移动并重命名postgres_exporter解压出来的目录

6)创建prometheus用户

7)赋权

8)写入linux启动服务项

9)登录postgres_exporter界面管理,默认端口为9187

[三、将当前postgresql 5432实例加入到prometheus监控,并通过Grafana展示](#三、将当前postgresql 5432实例加入到prometheus监控,并通过Grafana展示)

1)将postgres_exporter的信息加入到prometheus监控的配置文件prometheus.yml中

2)配置告警规则文件

3)检查配置文件

4)prometheus.yml文件添加了信息,所以重启prometheus进程或者重新加载配置文件(二选一)

5)在prometheus查看是否可以看到监控信息

6)登录Grafana界面管理,将当前主机的监控信息做展示

一、下载一个仪表盘:Grafana官网"http://www.grafana.com"---Dashboards,然后选择一个下载量高的自己喜欢的postgres_exporter(postgresql监控)

[二、将仪表盘添加到Grafana上:Dashboards---New---Import---点击"Upload dashboard JSON file"](#二、将仪表盘添加到Grafana上:Dashboards—New—Import—点击“Upload dashboard JSON file”)

三、仪表盘展示:Dashboards---查看到已经定义好的仪表盘,并且数据源是prometheus监控,点击进去


监控postgreSQL信息如下:

|------------|-----------|--------|-------------------|-------------------------------|
| 主机名 | IP地址 | 配置 | 系统 | 描述 |
| postgresql | 10.2.4.98 | 4C 8G | Red Hat Linux 7.6 | 安装postgres_exporter对这台服务器进行监控 |

**postgres_exporter:**默认端口9187。抓取和收集postgresql数据库的各种运行指标用于分析

一、在postgresql 5432实例上的操作

1)创建专属监控用户 (不建议使用postgres用户,postgres用户权限太高)

sql 复制代码
SQL> 
CREATE USER postgres_exporter WITH PASSWORD 'nX5sA4iC';

-- 授予连接权限
GRANT CONNECT ON DATABASE postgres TO postgres_exporter;

-- 授予访问必要视图的权限
GRANT USAGE ON SCHEMA public TO postgres_exporter;
GRANT SELECT ON pg_stat_activity TO postgres_exporter;
GRANT SELECT ON pg_stat_database TO postgres_exporter;
GRANT SELECT ON pg_stat_user_tables TO postgres_exporter;
GRANT SELECT ON pg_stat_user_indexes TO postgres_exporter;
GRANT SELECT ON pg_statio_user_tables TO postgres_exporter;
GRANT SELECT ON pg_statio_user_indexes TO postgres_exporter;
GRANT SELECT ON pg_stat_bgwriter TO postgres_exporter;
GRANT SELECT ON pg_stat_wal_receiver TO postgres_exporter;

二、安装postgres_exporter (postgres_exporter:是p rometheus的一个插件 ,抓取和收集postgresql数据库的各种运行指标用于分析。postgres_exporter 插件是GitHub开源组织提供的,通过GitHub官网下载postgres_exporter

1)下载postgres_exporter安装包,选择download,然后点击" Exporters and integrations",选择postgres_exporter

2)跳转到了gitHub,点击postgres_exporter的版本集,选择最新的postgres_exporter下载

PS: 也可以直接在gitHub官网下载

一、通过gitHub(官网地址: https://github.com/)下载postgres_exporter安装包,在gitHub搜索"postgres_exporter"。因为是开源,所以大家都是有时间才会开发,所以选择一个最近更新的

二、点击postgres_exporter的版本集,选择最新的postgres_exporter下载

3)目前postgres_exporter最新版本为0.17.1

386: 这是 Intel 80386 处理器架构,也被称为 x86。它是早期的32位处理器架构。

amd64: 也称为 x86-64 或 x64,这是一种64位的处理器架构,由 AMD 公司推出。它是基于 x86 架构的64位扩展,现在广泛用于桌面和服务器系统。

arm64: 这是 ARMv8-A 的64位处理器架构,主要应用于 ARM 架构的64位处理器,包括用于服务器、移动设备和嵌入式系统的处理器。

armv5 和 armv6: 这两者都属于 ARM 架构的32位处理器架构,分别对应于较旧的 ARM 处理器。它们通常用于嵌入式系统和一些较老的移动设备。

............

4)解压二进制postgres_exporter包

sql 复制代码
[root@postgresql ~]# tar -zxvf postgres_exporter-0.17.1.linux-amd64.tar.gz

5)移动并重命名postgres_exporter解压出来的目录

sql 复制代码
[root@postgresql ~]# mkdir -p /opt/prometheus
[root@postgresql ~]# mv postgres_exporter-0.17.1.linux-amd64 /opt/prometheus/
[root@postgresql ~]# mv /opt/prometheus/postgres_exporter-0.17.1.linux-amd64 /opt/prometheus/postgres_exporter

6)创建prometheus用户

sql 复制代码
[root@postgresql ~]# groupadd prometheus
[root@postgresql ~]# useradd -g prometheus -M -s /usr/sbin/nologin prometheus     ---创建一个名为prometheus的系统账号,该账号没有家目录并且不能登录Shell。这种设置适用于需要运行服务或任务而不需要用户交互的情况。
-M:不为用户创建家目录。对于系统服务账号来说,通常不需要家目录,因此使用 -M 可以跳过家目录的创建步骤。
-s /usr/sbin/nologin:指定用户登录时使用的Shell。将用户prometheus的登录Shell设置为/usr/sbin/nologin。nologin Shell的作用是阻止用户登录系统,但允许该用户拥有有效的系统账号。这通常用于服务账号,因为它们不需要交互式Shell访问,仅用于执行特定服务或任务。

[root@postgresql ~]# passwd prometheus
[root@postgresql ~]# id prometheus

7)赋权

sql 复制代码
[root@postgresql ~]# chown -R prometheus:prometheus /opt/prometheus/postgres_exporter

8)写入linux启动服务项

sql 复制代码
[root@postgresql ~]# cd /usr/lib/systemd/system
[root@postgresql ~]# vi postgres5432_exporter.service
[Unit]
Description=postgres_exporter
After=network.target
    
[Service]
Type=simple
User=prometheus
Group=prometheus
Restart=on-failure
Environment="DATA_SOURCE_NAME=postgresql://postgres_exporter:nX5sA4iC@10.2.4.98:5432/postgres?sslmode=disable"
ExecStart=/opt/prometheus/postgres_exporter/postgres_exporter --web.listen-address=0.0.0.0:9187
   
[Install]
WantedBy=multi-user.target
[root@postgresql ~]# systemctl daemon-reload
[root@postgresql ~]# systemctl start postgres5432_exporter.service
[root@postgresql ~]# systemctl enable postgres5432_exporter.service
[root@postgresql ~]# systemctl status postgres5432_exporter.service

###postgres_exporter不同于其他数据库,其他数据库连接数据库的用户、密码、IP等信息都可以在exporter插件中指定,但postgresql的exporter插件就不行,需要定义环境变量指定

**###--web.listen-address=<address>:<port>:**指定服务端口。Postgresql的抓取默认通过9187端口访问postgres_exporter管理界面,可以修改成其他端口用于访问postgres_exporter管理界面(如果没有修改端口的需求可以不设置这个参数)。此参数只能在postgres_exporter命令启动时指定,不可以在配置文件prometheus.yml中指定。如果服务器上有多个实例,比如还有5433实例,那么需要再写一个linux启动项,并且通过DATA_SOURCE_NAME变量指定postgresql数据源

9)登录postgres_exporter界面管理,默认端口为 9187

http://10.2.4.98:9187/metrics

三、将当前postgresql 5432实例加入到prometheus监控,并通过Grafana展示

注意: 如下操作是在安装了prometheus和Grafana的主机上进行操作

1)将postgres_exporter的信息加入到prometheus监控的配置文件prometheus.yml中

sql 复制代码
[root@prometheus ~]# vi /opt/prometheus/prometheus.yml     
在scrape_configs下面新增如下内容:

# postgres_exporter配置
  - job_name: "postgreSQL监控"       ###job_name 用来唯一标识一个监控任务。在同一个 prometheus.yml 文件中,不同的 scrape_config可以有不同的job_name,以便 Prometheus 能够区分和管理不同的监控目标和配置,用来将不同的监控目标分组。单位为监控postgreSQL数据库设置一个独立的job_name
    scrape_interval: 15s                      ###指定这个job_name每隔多久从每个目标(如 Exporter、应用端点)拉取一次指标数据。优先级:会覆盖全局的 global:scrape_interval(如果存在)。
    file_sd_configs:
      - files:
        - /data/prometheus/conf.d/postgreSQL_targets.json     # postgreSQL需要监控的实例都单独写在了mysqld_targets.json文件中,是为了避免prometheus.yml内容过多,看起来更简洁
 
[root@prometheus ~]# vi /data/prometheus/conf.d/postgreSQL_targets.json   ###写成linux或者MySQL通用的targets、labels的话,Prometheus可以获取到数据,但grafna获取不到数据。如下是deepseek推荐的写法,因为使用的9628 json模版没有告诉怎么定义格式
[
  {
    "targets": ["10.2.4.98:9187"],
    "labels": {
      "instance": "10.2.4.98:9187",
      "business_name": "postgreSQL数据库主库(IP:10.2.4.98,端口:5432)"
    }
  }
]

2)配置告警规则文件

除了如下告警规则之外,还需要单独配置一个Targets目标不可达(up)的相关规则,因为up 是一个布尔值指标,表示 Prometheus 是否能够成功地 scrape(抓取)到指定的目标(targets)数据,用于判断目标node-exporter相关进程是否在目标主机存活。关于up的规则文件参考:【prometheus+Grafana篇】从零开始:Linux 7.6 上二进制安装 Prometheus、Grafana 和 Node Exporter_grafana二进制部署-CSDN博客

sql 复制代码
[root@prometheus ~]# cd /opt/prometheus/rules/     ###在prometheus.yml文件中定义了告警规则文件rule_files参数
[root@prometheus rules]# vi postgreSQL_targets.yml 

3)检查配置文件

sql 复制代码
[root@prometheus ~]# cd /opt/prometheus/
[root@prometheus ~]# ./promtool check config prometheus.yml      ###用于检查 Prometheus 配置文件(prometheus.yml)的语法和格式是否正确。

执行这条命令会执行以下操作:

  1. 验证配置文件的语法:检查 prometheus.yml 文件是否符合 Prometheus 配置格式规范。
  2. 检测潜在的错误或警告:如果配置文件中存在拼写错误、格式问题、无效的配置项等问题,它会提供相关的错误信息或警告。比如告警规则写的不对,就会有提示
  3. 输出有用的诊断信息:如果配置文件存在问题,promtool 会输出详细的错误信息。

4)prometheus.yml文件添加了信息,所以重启prometheus进程或者重新加载配置文件(二选一)

#重载:前提是在prometheus.service启动服务项中加了--web.enable-lifecycle参数: --web.enable-lifecycle:###启用Prometheus的生命周期接口,允许通过HTTP请求来动态重新加载配置等操作。 这对于在运行时更新配置或执行其他管理操作非常有用,当修改了prometheus的配置后,可以通过curl命令来重新加载配置文件,而不需要重启prometheus (推荐方式)

sql 复制代码
[root@prometheus ~]# curl -X POST http://localhost:9090/-/reload

#重启

sql 复制代码
[root@prometheus ~]# systemctl restart prometheus.service

5)在prometheus查看是否可以看到监控信息

网址:http://110.120.100.21:9090

菜单栏:Status---Targets

6)登录Grafana界面管理,将当前主机的监控信息做展示

地址:http://110.120.100.21:3000

默认用户:admin

默认密码:admin

一、下载一个仪表盘:Grafana官网"http://www.grafana.com"---Dashboards,然后选择一个下载量高的自己喜欢的postgres_exporter(postgresql监控)

注意: 不需要再增加数据源了。因为在第一次搭建prometheus+Grafana的时候就已经加好了,在添加数据源时,有个配置项是Connection,这里添加的是prometheus的地址,指的是prometheus监控服务器的地址,而不是node-exporter的地址

以9628为例(PostgreSQL Database),新增 了多个指标 ,比较全面

二、将仪表盘添加到Grafana上: Dashboards---New---Import---点击"Upload dashboard JSON file"

Name: 定义名称,最好定义为主机ip加用途

Prometheus: 选择prometheus源

....

然后import

三、仪表盘展示:Dashboards ---查看到已经定义好的仪表盘,并且数据源是prometheus监控,点击进去

仪表盘Name: postgresql数据库监控

数据源Name: prometheus监控

instance: 这里其实就是当时已经在配置prometheus.yml时,定义的instance,也就是说Grafana会自动识别到


完结,撒花。如果你觉得这篇文章有用,欢迎分享给你的队友/老板/隔壁工位的同事------毕竟,独乐乐不如众乐乐,独 debug 不如众 debug。

相关推荐
计算机学姐21 分钟前
基于SpringBoot的电影点评交流平台【协同过滤推荐算法+数据可视化统计】
java·vue.js·spring boot·spring·信息可视化·echarts·推荐算法
cg_ssh34 分钟前
Docker 下启动 Nacos 3.1.1 单机模式
运维·docker·容器
修己xj37 分钟前
使用 Docker 部署 SQL Server 并导入 .mdb 文件的完整指南
运维·docker·容器
踩坑小念1 小时前
秒杀场景下如何处理redis扣除状态不一致问题
数据库·redis·分布式·缓存·秒杀
萧曵 丶2 小时前
MySQL 语句书写顺序与执行顺序对比速记表
数据库·mysql
郝亚军2 小时前
ubuntu-18.04.6-desktop-amd64安装步骤
linux·运维·ubuntu
Wiktok2 小时前
MySQL的常用数据类型
数据库·mysql
Web极客码2 小时前
CentOS 7.x如何快速升级到CentOS 7.9
linux·运维·centos
曹牧3 小时前
Oracle 表闪回(Flashback Table)
数据库·oracle
J_liaty3 小时前
Redis 超详细入门教程:从零基础到实战精通
数据库·redis·缓存