监控系统
本文介绍了 Pigsty 的监控系统架构,包括监控指标,日志,与目标管理的方式。以及如何 监控现有PG集群 与远程 RDS服务。
监控概览
Pigsty 使用现代的可观测技术栈对 PostgreSQL 进行监控:
- 使用 Grafana 进行指标可视化和 PostgreSQL 数据源。
- 使用 VictoriaMetrics 来采集 PostgreSQL / Pgbouncer / Patroni / HAProxy / Node 的指标
- 使用 VictoriaLogs 来记录 PostgreSQL / Pgbouncer / Patroni / pgBackRest 以及主机组件的日志
- Pigsty 提供了开箱即用的 Grafana 仪表盘,展示与 PostgreSQL 有关的方方面面。
监控指标
PostgreSQL 本身的监控指标完全由 pg_exporter 配置文件所定义:roles/pg_monitor/templates/pg_exporter.yml。
它们会进一步由 VictoriaMetrics/vmalert 兼容的记录与告警规则加工处理:files/victoria/rules/pgsql.yml。
Pigsty 使用三个身份标签:cls、ins、ip,它们将附加到所有指标和日志上。此外,Pgbouncer 的监控指标,主机节点 NODE,与负载均衡器的监控指标也会被 Pigsty 所使用,并尽可能地使用相同的标签以便于关联分析。
日志
与 PostgreSQL 有关的日志由 vector 负责收集,并发送至 infra 节点上的 VictoriaLogs 日志存储/查询服务。
pg_log_dir:postgres 日志目录,默认为/pg/log/postgrespgbouncer_log_dir:pgbouncer 日志目录,默认为/pg/log/pgbouncerpatroni_log_dir:patroni 日志目录,默认为/pg/log/patronipgbackrest_log_dir:pgbackrest 日志目录,默认为/pg/log/pgbackrest
目标管理
VictoriaMetrics 的监控目标在 /infra/targets/pgsql/ 下的静态文件中定义,每个实例都有一个相应的文件。以 pg-meta-1 为例:
当全局标志 patroni_ssl_enabled 被设置时,Patroni 目标会单独写入 /infra/targets/patroni/<ins>.yml,因为此时使用 HTTPS 抓取端点。当您 监控RDS 实例时,监控目标会放在 /infra/targets/pgrds/ 目录下,并以 集群 为单位进行管理。
当使用 bin/pgsql-rm 或 pgsql-rm.yml 移除集群时,相应监控目标会被移除。您也可以使用:
远程 RDS 监控目标会被放置于 /infra/targets/pgrds/<cls>.yml,它们由 pgsql-monitor.yml 剧本或 bin/pgmon-add 脚本创建。
监控模式
Pigsty 提供三种监控模式,以适应不同的监控需求。
| 事项\等级 | L1 | L2 | L3 |
|---|---|---|---|
| 名称 | 基础部署 | 托管部署 | 标准部署 |
| 英文 | RDS | MANAGED | FULL |
| 场景 | 只有连接串,例如 RDS | DB 已存在,节点可管理 | 实例由 Pigsty 创建 |
| PGCAT 功能 | ✅ 完整可用 | ✅ 完整可用 | ✅ 完整可用 |
| PGSQL 功能 | ✅ 限 PG 指标 | ✅ 限 PG 与节点指标 | ✅ 完整功能 |
| 连接池指标 | ❌ 不可用 | ⚠️ 选装 | ✅ 预装项 |
| 负载均衡器指标 | ❌ 不可用 | ⚠️ 选装 | ✅ 预装项 |
| PGLOG 功能 | ❌ 不可用 | ⚠️ 选装 | ✅ 预装项 |
| PG Exporter | ⚠️ 部署于 Infra 节点 | ✅ 部署于 DB 节点 | ✅ 部署于 DB 节点 |
| Node Exporter | ❌ 不部署 | ✅ 部署于 DB 节点 | ✅ 部署于 DB 节点 |
| 侵入 DB 节点 | ✅ 无侵入 | ⚠️ 安装 Exporter | ⚠️ 完全由 Pigsty 管理 |
| 监控现有实例 | ✅ 可支持 | ✅ 可支持 | ❌ 仅用于 Pigsty 托管实例 |
| 监控用户与视图 | 人工创建 | 人工创建 | Pigsty 自动创建 |
| 部署使用剧本 | bin/pgmon-add <cls> | 部分执行 pgsql.yml/node.yml | pgsql.yml |
| 所需权限 | Infra 节点可达的 PGURL | DB 节点 ssh 与 sudo 权限 | DB 节点 ssh 与 sudo 权限 |
| 功能概述 | PGCAT + PGRDS | 大部分功能 | 完整功能 |
由 Pigsty 完全管理的数据库会自动纳入监控,并拥有最好的监控支持,通常不需要任何配置。对于现有的 PostgreSQL 集群或者 RDS 服务,如果目标 DB 节点 可以被 Pigsty 所管理(ssh 可达,sudo 可用),那么您可以考虑 托管部署,实现与 Pigsty 基本类似的监控管理体验。如果您 只能通过 PGURL(数据库连接串)的方式访问目标数据库,例如远程的 RDS 服务,则可以考虑使用 精简模式 监控目标数据库。
监控现有集群
如果目标 DB 节点可以被 Pigsty 所管理(ssh 可达且 sudo 可用),那么您可以使用 pgsql.yml 剧本中的 pg_exporter 任务,
使用与标准部署相同的方式,在目标节点上部署监控组件:PG Exporter。您也可以使用该剧本的 pgbouncer,pgbouncer_exporter 任务在已有实例节点上部署连接池及其监控。此外,您也可以使用 node.yml 中的 node_exporter, haproxy, vector 部署主机监控,负载均衡,日志收集组件。从而获得与原生 Pigsty 数据库实例完全一致的使用体验。
现有集群的定义方式与 Pigsty 所管理的集群定义方式完全相同,您只是选择性执行 pgsql.yml 剧本中的部分任务,而不是执行整个剧本。
因为目标数据库集群已存在,所以您需要手工在目标数据库集群上 创建监控用户、模式与扩展。
监控RDS
如果您 只能通过 PGURL(数据库连接串)的方式访问目标数据库,那么可以参照这里的说明进行配置。在这种模式下,Pigsty 在 INFRA节点 上部署对应的 PG Exporter,抓取远端数据库指标信息。如下图所示:
在这种模式下,监控系统不会有主机,连接池,负载均衡器,高可用组件的相关指标,但数据库本身,以及数据目录(Catalog)中的实时状态信息仍然可用。Pigsty 提供了两个专用的监控面板,专注于 PostgreSQL 本身的监控指标: PGRDS Cluster 与 PGRDS Instance,总览与数据库内监控则复用现有监控面板。因为 Pigsty 不能管理您的 RDS,所以用户需要在目标数据库上提前 配置好监控对象。
- PgBouncer 连接池指标不可用
- Patroni 高可用组件指标不可用
- 主机节点监控指标不可用,以及节点 HAProxy,Keepalived 指标亦不可用。
- 日志收集与日志衍生指标不可用
下面我们使用沙箱环境作为示例:现在我们假设 pg-meta 集群是一个有待监控的 RDS 实例 pg-foo-1,而 pg-test 集群则是一个有待监控的 RDS 集群 pg-bar:
在目标上创建监控模式、用户和权限。详情请参考 监控对象配置
在配置清单中声明集群。例如,假设我们想要监控“远端”的
pg-meta&pg-test集群:其中,
pg_databases字段中所列出的数据库,将会被注册至 Grafana 中,成为一个 PostgreSQL 数据源,为 PGCAT 监控面板提供数据支持。如果您不想使用 PGCAT,将注册数据库到 Grafana 中,只需要将pg_databases设置为空数组或直接留空即可。
执行添加监控命令:
bin/pgmon-add <clsname>要删除远程集群的监控目标,可以使用
bin/pgmon-rm <clsname>
您可以使用更多的参数来覆盖默认 pg_exporter 的选项,下面是一个使用 Pigsty 监控阿里云 RDS 与 PolarDB 的配置样例:
示例:监控阿里云 RDS for PostgreSQL 与 PolarDB
详情请参考:remote.yml
监控对象配置
当您想要监控现有实例时,不论是 RDS,还是自建的 PostgreSQL 实例,您都需要在目标数据库上进行一些配置,以便 Pigsty 可以访问它们。
为了将外部现存 PostgreSQL 实例纳入监控,您需要有一个可用于访问该实例/集群的连接串。任何可达连接串(业务用户,超级用户)均可使用,但我们建议使用一个专用监控用户以避免权限泄漏。
- 监控用户:默认使用的用户名为
dbuser_monitor, 该用户属于pg_monitor角色组,或确保具有相关视图访问权限。 - 监控认证:默认使用密码访问,您需要确保 HBA 策略允许监控用户从管理机或 DB 节点本地访问数据库。
- 监控模式:固定使用名称
monitor,用于安装额外的 监控视图 与扩展插件,非必选,但建议创建。 - 监控扩展:强烈建议 启用 PG 自带的监控扩展
pg_stat_statements。 - 监控视图:监控视图是可选项,可以提供更多的监控指标支持。
监控用户
以 Pigsty 默认使用的监控用户 dbuser_monitor 为例,在目标数据库集群创建以下用户。
请注意,这里创建的监控用户与密码需要与 pg_monitor_username 与 pg_monitor_password 保持一致。
监控认证
配置数据库 pg_hba.conf 文件,添加以下规则以允许监控用户从本地,以及管理机使用密码访问所有数据库。
如果您的 RDS 不支持定义 HBA,那么把安装 Pigsty 机器的内网 IP 地址开白即可。
监控模式
监控模式 可选项,即使没有,Pigsty 监控系统的主体也可以正常工作,但我们强烈建议设置此模式。
监控扩展
监控扩展是可选项,但我们强烈建议启用 pg_stat_statements 扩展该扩展提供了关于查询性能的重要数据。
注意:该扩展必须列入数据库参数 shared_preload_libraries 中方可生效,而修改该参数需要重启数据库。
请注意,您应当在默认的管理数据库 postgres 中安装此扩展。有些时候,RDS 不允许您在 postgres 数据库中创建监控模式,
在这种情况下,您可以将 pg_stat_statements 插件安装到默认的 public 下,只要确保监控用户的 search_path 按照上面的配置,能够找到 pg_stat_statements 视图即可。
监控视图
监控视图提供了若干常用的预处理结果,并对某些需要高权限的监控指标进行权限封装(例如共享内存分配),便于查询与使用。强烈建议在所有需要监控的数据库中创建
监控模式与监控视图定义
下列 SQL 便于理解监控对象;当前 Pigsty 实际渲染的完整定义以
roles/pgsql/templates/pg-init-template.sql为准,当前模板还包含对安全搜索路径与权限边界的额外加固。
查看共享内存分配的函数(PG13 以上可用)
这个页面对您有帮助吗?
感谢反馈,我们会据此改进这篇文档。
哪里没有解决?(可选)