跳转到主要内容

使用 Pigsty 监控现有 PostgreSQL:RDS、PolarDB 与自建数据库

本文记录 2023 年 9 月的 Pigsty 与阿里云使用流程,命令、价格和界面均对应当时版本。

Pigsty 是一个 PostgreSQL 发行版,也可以单独用于监控 PostgreSQL 与主机。本文以阿里云为例,在一台 ECS 上安装 Pigsty,再接入已有的 PolarDB 与 RDS for PostgreSQL。

视频教程

操作流程

教程分为四步:

  1. 创建用于部署 Pigsty 的 ECS 服务器。
  2. 在 ECS 上完整安装单机版 Pigsty。
  3. 配置 PolarDB / RDS 的监控用户、模式、视图与访问名单。
  4. 将数据库实例接入 Pigsty 监控。

当时使用按量付费资源需要阿里云账户余额超过 ¥100,本例资源费用约为 ¥4 / 小时。

为什么增加这套监控?

云服务已经提供 RDS 监控。我在使用时,还需要更多指标来分析慢查询、诊断故障和评估容量,因此增加了这套监控。

云数据库监控示例云监控详情

Pigsty 使用 Grafana 与 Prometheus,并将它们打包为可统一安装的 INFRA 模块。Pigsty 管理的主机、HAProxy、PostgreSQL、PgBouncer、etcd、Redis、MinIO,以及监控基础设施本身,都会纳入监控。预置面板和告警规则用于查看运行状态与排查问题。

Pigsty 监控面板概览

当时的完整系统使用三千多类指标,覆盖数据库与配套组件。面板按集群、实例和对象组织数据,可以查看表、索引、函数的活动,也可以汇总到集群层面。页面链接用于切换视图,时间范围选择器用于比较当前状态与历史趋势。

监控层次与页面导航

监控现有 PostgreSQL,特别是托管云数据库时,可获得的数据取决于服务提供的访问接口。这种接入方式通常没有主机、高可用组件、连接池和原生数据库日志数据,主要使用 PostgreSQL 自身的指标。

可以通过公开演示查看监控界面。

创建 ECS 服务器

本例使用 x86_64 ECS,操作系统范围为 EL 7–9,当时推荐 Rocky Linux 8.6 或 9.1,最低配置为 1 核 CPU、2 GB 内存。可以在云控制台创建,也可以使用 Pigsty 提供的 Terraform 模板。

演示模板使用内网地址 10.10.10.10 和示例密码 PigstyDemo4,并分配一个公网 IP。

ECS 资源配置Terraform 资源置备

在 ECS 上安装单机版 Pigsty

登录 ECS 后,当时的安装流程如下:

bash -c "$(curl -fsSL https://get.pigsty.cc/latest)"  # 下载 Pigsty
cd ~/pigsty
./bootstrap                                        # 下载离线软件包
./configure                                        # 配置 Pigsty
vi pigsty.yml                                      # 设置密码等本地配置
./install.yml                                      # 安装单机环境

使用离线包时,本例完整安装耗时约十分钟。当前流程见 Pigsty 安装指南。

安装后,通过 ECS 公网地址的 3000 端口访问 Grafana。面板中已经包含新环境自身的监控数据。本例使用默认账号 admin / pigsty。

安装后的 Grafana

使用域名和 HTTPS 访问 Web 界面。更换示例密码,并限制监控系统的访问来源。

Pigsty Web 访问

配置 PolarDB / RDS 监控

Exporter 需要一个从 ECS 可访问的数据库连接地址、具有所需读取权限的监控账号,以及所选采集器使用的扩展。

本例的 PolarDB 配置步骤是:

  1. 创建 ECS 可以访问的集群。本例使用同一可用区和子网。
  2. 创建管理账号 dbuser_dba,用于初始配置。
  3. 将 ECS 内网地址 10.10.10.10 加入集群访问名单。
  4. 创建数据库,本例名为 test。

用管理账号连接数据库,将示例主机名替换为实际集群地址,并按提示输入密码:

psql -h your-cluster.polardbpg.rds.aliyuncs.com -p 1921 -U dbuser_dba -d test -W

用此账号创建专用监控用户,也可以通过云控制台创建。

监控账号配置

安装 pg_stat_statements,获取查询调用次数与执行耗时等语句级统计。

将现有数据库接入监控

在 pigsty.yml 中填写数据库实例的身份与连接信息。当时的配置位置是 all.children.infra.vars.pg_exporters:字典的键为唯一分配的本地 Exporter 端口,值为目标实例的配置。

远程 Exporter 配置

本例接入三个集群:

  • pg-polar:一主一从的 PolarDB 集群。
  • pg-rds:基础版单节点 RDS for PostgreSQL 实例。
  • pg-rdsha:带有一个只读节点的高可用 RDS 集群。

上图展示了配置。通常需要修改 pg_cluster、pg_seq 与 pg_host;端口不是 5432 时,还需要设置 pg_port。其他参数按需覆盖。

定义目标后,将各集群加入监控:

bin/pgmon-add pg-polar
bin/pgmon-add pg-rds
bin/pgmon-add pg-rdsha

随后可以在 Pigsty 中看到这三个集群。

接入后的数据库集群

点击浅蓝色的集群名或实例名,打开对应的 PGRDS 面板。

PGRDS 集群面板PGRDS 实例面板

首屏显示集群成员、存活状态、数据库列表与导航,以及 13 个核心指标。点击面板可以查看详情。

核心数据库指标

通过图表中的链接,可以在 PGRDS Cluster 与 PGRDS Instance 之间切换,查看集群汇总或单个实例。

集群与实例导航

Overview 与 Database 面板也可用于这些实例,展示各类查询的 QPS、响应时间,以及每张表的读写活动。

数据库概览查询指标数据库对象指标表活动

配置可选的数据库数据源后,还可以直接查询系统目录,查看当前锁等待与 Top SQL。

系统目录查询SQL 与锁统计

更多细节见 Pigsty 文档、公开演示与本文开头的视频教程。

加入 PGSQL × Pigsty 交流群,可在微信搜索 pigsty-cc 联系 Pigsty 小助手。