PG Exporter v1.5.0
PG Exporter v1.5.0 升级 Go 工具链与依赖,修正复制采集器的身份与状态映射,并修复目标 URL、自动发现、健康检查、采集计划、时间配置和 HTTP 路由六类运行时缺陷。
默认配置仍包含 58 个 YAML 文件、96 个采集器分支、59 个命名空间、460 个不同指标定义。指标数量跨全部版本分支去重,包含默认关闭的采集器和两个尚未展开的 SQL 直方图;它不表示每次抓取都会输出 460 条时序。
变更摘要
- 连接 URL 更安全: URL 语法、查询参数转义或解码后的参数名非法时,启动立即失败,诊断不再暴露原始连接串。规范化错误参数时,不会再静默丢弃显式 TLS 选项。选中的
PG_EXPORTER_URL_FILE为空或仅含空白时也会拒绝启动。 - 自动发现连接正确数据库: 数据库身份复用
lib/pq解析,包括dbname与database别名。替换发现数据库的路径时清除冲突参数,保留库名特殊字符,避免多个连接重复采集同一库、产生重复指标并使 HTTP 返回 500。 - 健康响应保持一致: 每次响应从一个原子状态快照生成 HTTP 状态码和正文,避免并发探测、抓取与重载时出现 HTTP 200 搭配
down或starting。健康检查仍使用目标状态缓存。 - 采集计划跟随元数据: 元数据预检成功后,连接用户、Schema 集合或扩展集合变化会使计划失效。下一次抓取选中新增的合格采集器;依赖移除后不再选中相应采集器。集合不变时保留缓存。
- 拒绝非法时间配置: YAML TTL、timeout 与谓词 TTL 拒绝 NaN、无穷大和导致正向时长溢出的值;零值、默认值及有限负超时关闭期限的语义不变。
- 保证指标路径可达: 启动时检查当前 HTTP mux 实际选择的指标处理器,覆盖解码路径与重定向,避免校验成功但请求进入首页或重定向。
- 修正复制身份与状态: 全部
pg_sub_*样本增加datname标签,区分不同数据库中的同名订阅。pg_recv_state改用真实接收器状态字典,legacy 查询改用 PG9.6 兼容的substring()。 - 校准采集器描述: 明确可选复制 origin 的权限要求、发布端表数量与订阅端表/序列数量的区别,并将
pg_backend的说明修正为按后端类型分组。这些说明修改不新增指标族,也不启用可选采集器。
工具链与依赖
| 组件 | v1.4.1 | v1.5.0 |
|---|---|---|
| Go | 1.26.5 | 1.27.3 |
prometheus/client_golang |
1.23.2 | 1.25.0 |
prometheus/common |
0.70.0 | 0.72.1 |
prometheus/exporter-toolkit |
0.17.1 | 0.20.0 |
golang.org/x/net |
0.57.0 | 0.61.0 |
golang.org/x/crypto |
0.54.0 | 0.58.0 |
golang.org/x/text |
0.40.0 | 0.43.0 |
数据库驱动仍为 lib/pq 1.12.3,本版没有驱动迁移或新增可选数据源。Prometheus client/model/procfs、YAML、压缩、OAuth2 等传递依赖也随之更新;不能仅凭版本升级就声称修复了应用可利用的 CVE。
安全更新
本次升级纳入上游安全修复,不表示每个 CVE 都能通过 PG Exporter 利用。下表比较 v1.4.1 源码、原始依赖和 Go 1.26.5:S 表示静态符号匹配,P 表示导入包匹配但未找到受影响符号调用,M 表示只匹配模块、未导入受影响包。静态符号匹配也可能是保守分析结果,不等于攻击复现。
Go 标准库与构建工具
Go 1.27.3 包含 CVE-2026-111943 的 X.509 不可信中间证书拒绝列表,以及累计的 HTTP、TLS、模板与解析器修复。旧基线中存在以下受影响标准库记录;匹配层级取自 Darwin/arm64,平台专属问题仍需满足相应前提。
| CVE | 组件 | 首个修复版本 | 旧基线匹配 |
|---|---|---|---|
| CVE-2026-39821 | net/http, net/http/internal/http2 | 1.26.6, 1.27.0-rc.3 | P |
| CVE-2026-46600 | net | 1.26.6, 1.27.0-rc.3 | P |
| CVE-2026-33818 | encoding/asn1 | 1.26.6, 1.27.0-rc.3 | S |
| CVE-2026-56859 | encoding/xml | 1.26.6, 1.27.0-rc.3 | M |
| CVE-2026-56853 | net/http | 1.26.6, 1.27.0-rc.3 | S |
| CVE-2026-56862 | crypto/tls | 1.26.6, 1.27.0-rc.3 | S |
| CVE-2026-56858 | html/template | 1.26.6, 1.27.0-rc.3 | S |
| CVE-2026-56860 | net/url | 1.26.6, 1.27.0-rc.3 | P |
| CVE-2026-94448 | html/template | 1.26.9, 1.27.2 | S |
| CVE-2026-97030 | html/template | 1.26.9, 1.27.2 | S |
| CVE-2026-78659 | net/http, net/http/internal/http2 | 1.26.9, 1.27.2 | S |
| CVE-2026-56857 | internal/syscall/windows, os | 1.26.9, 1.27.2 | P |
| CVE-2026-56866 | net/http, net/http/httputil | 1.26.9, 1.27.2 | P |
| CVE-2026-97031 | crypto/tls | 1.26.9, 1.27.2 | S |
| CVE-2026-94440 | mime/multipart, net/textproto | 1.26.9, 1.27.2 | S |
| CVE-2026-78667 | net/http | 1.26.9, 1.27.2 | P |
| CVE-2026-78660 | net/http, net/http/internal/http2 | 1.26.9, 1.27.2 | P |
| CVE-2026-78669 | net/http, net/http/internal/http2 | 1.26.9, 1.27.2 | S |
| CVE-2026-78663 | net/http, net/http/internal/http2 | 1.26.9, 1.27.2 | S |
| CVE-2026-94439 | net/http | 1.26.9, 1.27.2 | S |
| CVE-2026-97032 | net/http, net/http/internal/http2 | 1.26.9, 1.27.2 | S |
| CVE-2026-111943 | crypto/x509 | 1.26.10, 1.27.3 | S |
构建工具链还包含模块/工具链下载校验修复 CVE-2026-56865、CVE-2026-56864、CVE-2026-94444、CVE-2026-94447。这些属于构建环境加固,不是 Exporter 运行时漏洞。官方公告分别列于 Go 1.26.6、Go 1.27.2 和 Go 1.27.3。
Go 模块
| 依赖升级 | 纳入的修复 | 与 PG Exporter 的关系 |
|---|---|---|
x/net 0.57.0 → 0.61.0 |
CVE-2026-78659、CVE-2026-78660、CVE-2026-78669、CVE-2026-78663、CVE-2026-97032,0.60.0 修复 | HTTP/2 内存放大、畸形响应 framing、CPU 消耗、流控额度计算与 HPACK 竞态。旧基线有四项静态符号匹配和一项包匹配;相同 CVE 也影响 Go 内置的 HTTP/2 副本,不应重复计数。 |
x/crypto 0.54.0 → 0.58.0 |
CVE-2026-56854,0.55.0 修复;CVE-2026-56855 与 CVE-2026-78662,0.56.0 修复 | SSH source-address 认证限制与死锁;本程序未导入受影响包,仅属模块级升级。 |
x/text 0.40.0 → 0.43.0 |
CVE-2026-56851,0.41.0 修复 | secure/precis Nickname 变换 panic;本程序未导入受影响包。 |
2026-10-23 的 govulncheck 核验中,v1.5.0 候选在 Darwin/arm64、Linux/amd64 和 Windows/amd64 均 没有符号级或导入包级已知漏洞。未导入的 OpenPGP 包仍保留无修复版本的模块级公告 GO-2026-5932,因此不宣称所有依赖模块零告警。只升级 Go、保留旧依赖仍有五项 x/net 匹配,工具链与依赖升级都不可省略。
请使用重新构建的发行制品:只更新主机上的 Go 编译器,不会改变已经编译的 Exporter 二进制。
升级提示
-
同步部署采集器配置。 仅替换二进制不会应用 SQL 与标签修正。替换
/etc/pg_exporter.yml前,请先合并本地自定义配置。 -
检查
pg_sub_*标签变化。 新增datname会产生新时序;按需在 PromQL 连接与聚合中保留数据库身份。pg_sub_id仍为 Gauge。 -
补齐 PG10–13 的订阅权限。 管理员须在每个用作 Exporter 主连接数据库 的库中,对实际监控角色执行以下授权。仅在订阅所属数据库授权并不足够。它不开放
subconninfo;PG14+ 在标准目录 ACL 下无需额外授权。 -
检查接收器状态告警。
streaming=0、stopping=4、connecting=5(PG19+)、starting=6、waiting=7、restarting=8、stopped=9,未知/NULL 为-1,编码 1–3 保留。没有接收器行时仍不输出样本。 -
修正过去被容忍的非法输入。 错误 URL 转义、空 URL 文件、非有限时间值与不可达指标路径现在会校验失败。为兼容两种 HTTP mux,建议使用
/metrics。
未指定 sslmode 时仍默认 disable,远程连接需显式配置 TLS;scratch 容器验证证书时仍须挂载 CA。空 YAML 重载仍会替换为零个配置采集器,目录中的非法文件可能被跳过,SIGTERM 也不会等待活跃 HTTP 请求结束。完整运行约定见安全指南、HTTP API与内置采集器。
验证范围
发布前验证覆盖竞态测试、新旧 HTTP mux、静态分析、模块与生成配置一致性、约 60.4 万次短时模糊测试,以及六个目标平台构建。非超级用户默认采集通过 PostgreSQL 9.1–9.6、10–18、19 RC1 和 PgBouncer 1.26.1 实测。运行场景包括冲突数据库别名、特殊库名、Schema/扩展变化、失败重载、断连恢复、物理备库晋升与并发 HTTP 请求;另验证了 RPM/DEB 安装与 Docker 构建。
这些检查只覆盖记录中的版本与场景,不等于所有扩展组合和生产负载均已验证。Composite、Patroni、pgBackRest 与 PostgreSQL 日志组件仍属开发工作,不包含在 v1.5.0 中。
v1.5.0 ·