跳转到主要内容

PG Exporter v1.6.0

独立健康探测、有界抓取、跨数据库进度标签修正与容器 CA 信任根

PG Exporter v1.6.0 将健康探测与指标采集解耦,限制并发抓取与等待,保留客户端离开后已完成的有界刷新,并修正跨数据库进度标签。同时补齐容器信任根并更新依赖。构建工具链仍为 Go 1.27.3,PostgreSQL 驱动仍为 lib/pq 1.12.3。

修复与改进

  • 健康探测独立运行: 慢指标采集不再阻塞后台探测,采集完成不再覆盖更新的连通性或角色观测。初始化后,HTTP 健康状态只由探测写入;pg_up 和 pg_in_recovery 仍反映采集结果。数据库可达时,即使 fatal 采集器使 pg_up 为 0,/up 仍可返回 HTTP 200。
  • 限制重叠抓取: 采集、等待和响应写入合计最多接纳两个指标请求。采集仍串行,第二个请求可以等待并复用缓存,更多请求返回 HTTP 503。等待可取消且不执行 SQL。请求预算为 30 秒,合法、有限且为正数的 Prometheus 抓取超时请求头可缩短它。
  • 按采集器取消: 请求取消后不再启动下一个采集器或数据库。已经运行且 timeout 为正数的采集器,在同一期限内继续执行谓词链与主 SQL,然后正常缓存结果,避免一个客户端离开导致其他抓取者共享失败缓存。负数 timeout 关闭采集器期限,此时 SQL 随请求取消。
  • 区分中断与目标错误: 中断轮次的汇总日志为 INFO interrupted,不增加 exporter/server 抓取错误计数。可用状态保留之前的值;本轮预检成功后视为 true。未中断的连接失败和 fatal 采集失败仍计数。查询级错误计数与 fatal 查询的 ERROR 日志保持原有行为。
  • 修正进度标签: pg_vacuuming、pg_indexing、pg_clustering 保持集群级覆盖,每次刷新仍只执行三条查询。当前连接库与系统目录的关系解析为名称,其他库的用户关系在 relname 中使用数字 OID,并保留 datname、pid,避免误用本地同 OID 对象名称。自动发现过滤或缺少 CONNECT 权限不会滤除进度视图中可见的行。
  • 补齐容器信任: 两条 scratch 镜像构建路径均包含系统 CA 证书包与许可证,公共 CA 校验可以使用内置信任库。私有 CA 仍需显式挂载并设置 sslrootcert;默认 TLS 模式不变。
  • 更新依赖与发布检查: YAML 从 v3 升到 v4,保持既有采集器配置语法;更新 Prometheus common/procfs、golang.org/x/net 等依赖。CI 在 RPM 兼容性与校验和检查之外,验证容器文件/TLS 行为并检查三个 DEB 架构。
  • 校准帮助文本: 区分 I/O 字节与操作次数、已完成检查点、VACUUM 死元组内存和 CLUSTER 进度。在相同 PostgreSQL 版本上,SQL 指标名、标签键、类型与单位不变。

升级注意事项

  1. 同时升级配置与二进制。 合并新版 pg_exporter.yml 或拆分 YAML,软件包升级会保留本地配置。只替换程序不会修正进度 SQL。默认配置仍包含 58 个 YAML 文件、96 个分支、59 个命名空间和 460 个去重指标定义,含默认禁用的采集器与两个未展开直方图。
  2. 检查进度标签的使用者。 跨库 relname 可能从错误名称变为 OID,产生新的时序;面板应保留数据库与任务身份。当前库与系统目录的关系名称仍可读。
  3. 按目的选择健康信号。 /up 和角色端点反映最近一次健康探测;pg_up 反映主目标采集,包括 fatal 失败。非 fatal 与子数据库错误需查看查询/服务器指标。--disable-intro 会隐藏全部内置指标,包括 pg_up,但保留 HTTP 健康检查。
  4. 为 PgBouncer 探测预留连接。 PgBouncer 主连接池上限由一个增至两个。PostgreSQL 保持主目标三个连接,每个发现数据库一个连接。
  5. fatal 采集器保留正数 timeout。 取消负数 timeout 的 fatal 查询会按正常 TTL 缓存失败。后续有效抓取可能对该缓存失败计数,并返回 pg_up 0,直到成功刷新。TTL 为零或 --disable-cache 仍强制每次抓取刷新。
  6. 检查并发与预算。 超额请求或中断采集可以返回 503。已经开始的有界采集器可能超出请求预算,通常最多再占用自身 timeout;网络阻塞可能更久,二者都不是硬性的墙钟上限。建连握手需配置合适的 DSN connect_timeout。

真实失败恰好与请求取消重叠时,可能不计入两个轮次错误计数,因为分类同时检查采集错误与请求 context;查询级失败仍可见。首次抓取在预检成功前中断时,pg_up 保持为 0,直到后续恢复。失败 TTL、重载和 SIGTERM 直接退出行为不变,本版本不增加后台刷新或优雅关闭。

从 v1.4.1 或更早版本升级时,仍需遵循 v1.5.0 迁移说明,包括订阅标签、接收器状态映射和 PostgreSQL 10–13 监控授权。完整运行契约见 指标兼容性、HTTP API 与 采集生命周期。

验证范围

发布验证覆盖完整 race 测试、两种 HTTP mux、模块与生成配置一致性、静态检查、六平台构建、容器 TLS/文件校验和软件包验证。三个取消回归用例还在 race 检测下连续 200 轮通过;此前移除中断修复的反向对照失败。PostgreSQL 18.6 上,客户端在 0.8 秒有界 fatal 查询期间离开,两个轮次错误计数保持为 0;下一次抓取返回 pg_up 1 与缓存指标,没有重跑 SQL。

对实际发布制品的本地验收还覆盖 PostgreSQL 9.2–9.6(legacy 配置)、10–18 与 19 RC1(默认配置),以及 PgBouncer 1.26.1。Linux amd64/arm64/ppc64le 压缩包及 RPM/DEB 通过运行与安装检查;ARM64 软件包从 1.5.0 升级后保留本地配置。Darwin ARM64 的 24 组功能测试通过,覆盖 HTTPS 认证、重载重叠、备库晋升和断连恢复。Windows 与 Intel macOS 仅做静态检查;容器内的软件包测试未验证真实 systemd 启动。Docker Hub 上的 1.6.0 与 latest 标签已指向同一份 amd64/arm64 多架构清单;两个公开镜像拉取后通过 CA、文件内容与 TLS 校验,其二进制与对应发布压缩包逐字节一致。

进度 SQL 分支已使用监控角色在 PostgreSQL 12、17、18 上验证;系统目录补充场景与真实跨库 VACUUM 在 18.6 上验证。这些是限定场景的验收结果,不是对全部 PostgreSQL 版本、扩展、仪表盘和生产负载重新完成的完整审计。Composite、Patroni、pgBackRest 与 PostgreSQL 日志组件仍在独立的 snort 开发线上,不包含在 v1.6.0 中。

校验和

SHA256 校验和

下载资产
文件校验和
pg-exporter-1.6.0-1.aarch64.rpm Linuxarm64SHA-256 dd81e485…1ed9
pg-exporter-1.6.0-1.ppc64le.rpm LinuxSHA-256 413f64b2…48ae
pg-exporter-1.6.0-1.x86_64.rpm Linuxamd64SHA-256 c25e5707…c64a
pg-exporter_1.6.0-1_amd64.deb Linuxamd64SHA-256 46f03078…17b3
pg-exporter_1.6.0-1_arm64.deb Linuxarm64SHA-256 d24dea8e…2a0f
pg-exporter_1.6.0-1_ppc64le.deb LinuxSHA-256 5cc839bc…3ae0
pg_exporter-1.6.0.darwin-amd64.tar.gz macOSamd64SHA-256 ddefa112…ea47
pg_exporter-1.6.0.darwin-arm64.tar.gz macOSarm64SHA-256 a62d9474…4d85
pg_exporter-1.6.0.linux-amd64.tar.gz Linuxamd64SHA-256 296a26bf…719a
pg_exporter-1.6.0.linux-arm64.tar.gz Linuxarm64SHA-256 ea6d1dbe…7ce7
pg_exporter-1.6.0.linux-ppc64le.tar.gz LinuxSHA-256 b720183a…155a
pg_exporter-1.6.0.windows-amd64.tar.gz Windowsamd64SHA-256 29909ef6…bb25