pgexporter 0.8.0 配置参数详解

pgexporter 0.8.0 配置体系逐项详解:三个配置文件与 INI 语法、[pgexporter] 主段(必填项/缓存/Bridge/管理/日志/TLS/内核)与 Server 段全部参数语义、自定义指标 YAML 结构,及关键参数生效方式实测(log_level 运行时切换、metrics_cache_max_age 需重启、metrics_path 与 -Y 加载差异矩阵等 4 条排障实录)(实测日期 2026-10-28)。

pgexporterpgexporter数据库监控2026/10/28

pgexporter 0.8.0 配置参数详解

目标:把 pgexporter 0.8.0 的配置体系讲透——三个配置文件的角色与加载方式、[pgexporter] 主段与 Server 段的逐项语义/默认值/取值域、自定义指标 YAML 的结构,以及对关键参数的实测验证(改参数→验证生效的闭环,含 4 条实测排障)。本文为配置篇(C1):参数语义以 0.8.0 源码内 doc/CONFIGURATION.md 为基准(本地实查),实测日期 2026-10-28;安装过程见部署篇《Rocky 9 安装 pgexporter 0.8.0 指南》,命令操作见《pgexporter 0.8.0 常用 CLI 命令与工具详解》。

一、配置体系总览

1.1 三个配置文件

文件默认路径生成方式作用
主配置/etc/pgexporter/pgexporter.conf(或 -c 指定)手工编写主段 + Server 段,本文主体
用户 vault/etc/pgexporter/pgexporter_users.conf(或 -u 指定)pgexporter-admin -f <file> user add存连 PostgreSQL 的数据库账号口令(AES-GCM 密文)
管理员 vault/etc/pgexporter/pgexporter_admins.conf(或 -A 指定)pgexporter-admin -f <file> user add存 pgexporter-cli 远程管理的鉴权账号

实测备忘:pgexporter-cli conf ls 会回读三个文件的运行时路径(回显见命令篇)。另有 -D/--directory 可一次指定整个配置目录。master key 与 vault 文件相互独立:master key 存运行用户家目录(实测 /home/pgexporter/.pgexporter/master.key),vault 里是密文(实测样例):

pgexporter:hGz09UNweRlcBIMf5bwzZEJ9kNsX2bftY48w7cv0bp8hZ7dOaanOEySV8Xk0yBcSA8M/2g==

1.2 语法规则

0.8.0 采用 INI 风格分段:主段固定为 [pgexporter],Server 段名自取(如 [primary]、[replica1]),键值格式 key = value;# 或 ; 开头为注释;Bool 类型接受 on/yes/1/true/off/no/0/false(0.8.0 doc/CONFIGURATION.md 原文)。时长大类参数统一支持 ms/s/m/h/d/w 后缀(缺省秒),容量类统一支持 B/K/KB/M/MB/G/GB(缺省字节);大量路径参数支持 $HOME 等环境变量插值。

💡 迁移提示:0.8.0 Release 说明 "New vault security (migration needed)"——从 0.7.x 升级时旧的 users 配置需重新以 pgexporter-admin 生成加密 vault,不能直接拷贝旧明文 users 文件。

二、[pgexporter] 主段逐项详解

2.1 必填三项

参数默认语义实测
host(必填)pgexporter 监听地址;* 表全部网卡实测 host = * 后 curl http://localhost:8150/metrics 与跨机 http://10.89.74.20:8150/metrics 均返回 200
unix_socket_dir(必填)Unix Domain Socket 位置(管理通道用)实测设为 /var/run/pgexporter
metrics(必填)Prometheus /metrics 抓取端口实测 metrics = 8150,端点返回 200(380 KB 全量指标)

三项缺一启动即失败。示例(本系列实测环境的主段骨架):

[pgexporter]
host = *
metrics = 8150
unix_socket_dir = /var/run/pgexporter

2.2 指标通路与缓存

参数默认语义
metrics_path无自定义指标 YAML 文件或目录;注意 0.8.0 实测启动链路只认 -Y 命令行参数(见 2.9 排障实录)
metrics_cache_max_age0Prometheus 响应缓存时长,0 禁用;后缀 ms/s/m/h/d/w
metrics_cache_max_size256k缓存内存上限(即使缓存禁用也预分配;改动需重启)
metrics_query_timeout0单条指标 SQL 超时,0 不限;设值时最小 50ms

metrics_cache_max_age 生效验证(实测):设 5s 并重启后,连续三次抓取(间隔 1 秒)pgexporter_query_executions_total 恒为 14(缓存窗口内不回库查询),窗口过期后恢复增长——缓存确凿生效:

pgexporter_query_executions_total 14
pgexporter_query_executions_total 14
pgexporter_query_executions_total 14

2.3 Bridge / JSON 输出

参数默认语义
bridge无(禁用)Bridge 端口:把指标以 Prometheus 兼容形式经该端口转发
bridge_endpoints无逗号分隔的上游 host:port 列表(抓别人家 exporter 的数据)
bridge_cache_max_age5mBridge 响应缓存时长
bridge_cache_max_size10MBridge 缓存上限(改动需重启)
bridge_json无(禁用)JSON 格式输出的独立端口
bridge_json_cache_max_size10MJSON 缓存上限(改动需重启)

Bridge/JSON 是 pgexporter 区别于多数 exporter 的"聚合代理"能力(认知篇对比表中的附加能力项);本篇未实测 bridge(0.8.0 源码 doc/BRIDGE.md/doc/JSON.md 为语义依据),生产启用前建议先单机试跑。

2.4 远程管理与告警

参数默认语义
management0(禁用)远程管理端口;开启后 pgexporter-cli 可连入执行 ping/status/conf 等
cacheon连接缓存开关
alertsoff内置告警解析与评估开关(CLI 传 --alerts 会自动打开)
alerts_path无自定义告警定义 YAML(可覆盖内置告警;格式见源码 contrib/yaml/pgexporter_alerts.yaml)

实测提醒:设了 management = 8151 但没配 admins vault 时,日志出现 WARN configuration.c:1817 pgexporter: Remote management enabled, but no admins are defined——管理端口开着但无人能登录,CLI 全部 401 类失败。正确姿势是先用 pgexporter-admin -f /etc/pgexporter/pgexporter_admins.conf -U admin -P <密码> user add 建管理员再启动。

2.5 日志

参数默认语义
log_typeconsoleconsole / file / syslog
log_levelinfoFATAL/ERROR/WARN/INFO/DEBUG1..DEBUG5(大小写不敏感;>DEBUG5 归为 DEBUG5;非法值回落 INFO)
log_pathpgexporter.log文件路径,支持 strftime(3) 时间变量
log_rotation_age0(禁)按时长轮转日志
log_rotation_size0(禁)按大小轮转日志
log_line_prefix%Y-%m-%d %H:%M:%S行前缀 strftime 模板(含空格需加引号)
log_modeappendappend 追加 / create 新建

实测:conf set log_rotation_size 10MB 返回 10485760(人类可读值被解析为字节数回显),conf set log_level debug 后 conf get log_level 即回 debug——运行时改级无需重启(详见命令篇 conf 系列实测)。

2.6 超时

参数默认语义
blocking_timeout30s连接阻塞等待时长,0 禁用
authentication_timeout5s认证允许时长

2.7 TLS

参数默认语义
tlsoff管理面 TLS 总开关
tls_cert_file / tls_key_file / tls_ca_file无证书/私钥/CA;属主为 root 时私钥权限须 ≥0640,普通用户属主须 0600
metrics_cert_file / metrics_key_file / metrics_ca_file无metrics 抓取端口独立的 TLS 证书组(与主 TLS 分离)

TLS 证书三件套的属主/权限约束是官方文档明文要求,不符时启动拒绝加载。本篇实测未启用 TLS(内网环境),启用步骤请按官方 doc/ENCRYPTION.md。

2.8 内核与进程行为

参数默认语义
libevauto事件后端:auto/select/poll/epoll/iouring/devpoll/port(装了 liburing 编译产物可用 iouring)
keep_aliveonsocket SO_KEEPALIVE
nodelayonTCP_NODELAY
non_blockingonO_NONBLOCK
backlog16listen() backlog,最小 16
hugepagetry大页内存:off/try/on
pidfile无PID 文件路径
update_process_titleverbose进程标题:never/off、strict、minimal、verbose/full(Linux 实测标题形如 pgexporter: main)

实测佐证:systemctl status 的 CGroup 里进程名显示 "pgexporter: main",即 update_process_title = verbose 的效果。

2.9 扩展与采集器控制(含排障实录:metrics_path 的三种结局)

参数默认语义
extensions(未指定)全局扩展白名单(逗号分隔);未指定=检测到的全部启用;空值=全部禁用;列表=仅列出的启用。Server 段同名键覆盖全局
collectors(未指定)采集器白名单:仅列出的 collector 产出指标
exclude_collectors(未指定)采集器黑名单:列出的 collector 跳过

三层优先级:Server 段 extensions > 全局 extensions > 默认(全部启用)。

排障实录(0.8.0 实测矩阵):自定义指标 YAML 的加载有三条不同结局——

配置方式内置基础指标内置全套指标(pgexporter_pg_settings_*,约 2592 行)自定义 YAML
不配 metrics_path、不传 -Y有有无
仅配置文件 metrics_path(目录)有有不加载(静默)
仅配置文件 metrics_path(单文件)有有不加载且启动报 duplicate ERROR
命令行 -Y <目录>有无(被整体替换)加载成功

单文件写法启动时的实测报错(部署篇同款):

2026-10-28 14:54:34 ERROR yaml_configuration.c:427 Duplicate metric name with previously loaded files: pgexporter_postgresql_primary
2026-10-28 14:54:34 ERROR yaml_configuration.c:485 YAML contains duplicate metric names

结论:要用自定义指标,统一在 systemd ExecStart 传 -Y /etc/pgexporter/metrics.d(目录形态);传入 -Y 后内置全套 YAML 指标被替换为"代码级基础指标 + 自定义目录"(实测 /metrics 从 380 KB/2592 行 降至约 60–70 KB/386 行),需要内置全套时勿传 -Y。

三、Server 段逐项详解([primary])

每个被监控 PostgreSQL 实例一个段,段名即指标里的 server 标签(实测 pgexporter_postgresql_version{server="primary", version="16", minor_version="15"}):

参数默认必填语义
host—是PostgreSQL 地址;以 / 开头表示 Unix Socket 路径(同机部署可免 TCP)
port—是PostgreSQL 端口(PG 13+,0.8.0 官方要求)
typepostgresql否postgresql 直连采集(需 user);prometheus 为 Prometheus 端点透传(不需要 user,指标原样并入)
user—条件postgresql 类型必填;口令不在本文件,在 users vault(键为用户名)
data_dir / wal_dir无否数据目录 / WAL 目录(供存储类指标补全上下文)
tlstry否后端 TLS 协商策略(0.8.0 新增逐 server 粒度):off 不发 SSLRequest;try 服务端支持则升级,否则明文(保持旧行为);on 必须升级成功且要求配 tls_ca_file 验证服务端证书
tls_cert_file / tls_key_file / tls_ca_file无否后端连接的客户端证书组
extensions继承全局否该 server 的扩展白名单,覆盖全局值

本系列实测的 Server 段与采集验证:

[primary]
host = 10.89.74.10
port = 5432
user = pgexporter
pgexporter_postgresql_version{server="primary", version="16", minor_version="15"} 1
pgexporter_postgresql_uptime{server="primary"} 954
pgexporter_postgresql_primary{server="primary"} 1

💡 提示:段名 primary 不是关键字而是自定义名——它恰好符合"主库"语义所以顺手;指标标签跟随段名,改名即改标签。多实例场景(主/备/多套)逐段罗列即可,pgexporter-cli status 会逐段回显(见命令篇)。

四、自定义指标 YAML 结构

-Y 目录下的每个 YAML 是一串指标查询定义(0.8.0 源码 doc/YAML.md 与 contrib/yaml/postgresql-16.yaml 为格式基准)。实测可用的最小结构:

metrics:
- tag: activity_by_state
  collector: custom
  sort: data
  server: both
  queries:
  - query: SELECT state, count(*) AS cnt FROM pg_stat_activity GROUP BY state
    version: 10
    columns:
    - name: state
      type: label
    - name: cnt
      type: gauge
      description: Number of backend connections grouped by state

逐层说明:

层键语义
顶层metrics指标定义列表
指标tag指标名主干(最终形如 pgexporter_<tag>_<列名>)
指标collector归属采集器名(配合主段 collectors/exclude_collectors 过滤)
指标sort输出排序:name(默认)/data
指标server作用于哪类实例:both(默认)/primary/replica
指标queries查询列表(可按 version 区分 PG 版本)
列typelabel(标签)/ gauge(可增减)/ counter(单调)/ histogram(直方图,查询列名须为 X/X_bucket/X_sum/X_count)
列name / description列名与描述(进 #HELP)

实测加载结果(该文件经 -Y 生效后抓取):

#HELP pgexporter_activity_by_state_cnt Number of backend connections grouped by state
#TYPE pgexporter_activity_by_state_cnt gauge
pgexporter_activity_by_state_cnt{server="primary", state="active", database="postgres"} 1
pgexporter_activity_by_state_cnt{server="primary", state="n/a", database="postgres"} 5

state="n/a" 是后台工作进程无事务状态的占位标签值——自定义 label 的空值会被规范化为 n/a,写面板时注意。

五、关键参数生效方式速查(实测汇总)

参数运行时 conf setconf reload需重启
log_level✅ 实测生效(debug 即时切)✅ Restart: false不需要
log_rotation_size✅ 实测(10MB→10485760)✅不需要
metrics_cache_max_age—(conf set 后 conf get 仍旧值)❌ 实测 reload 后 conf get 仍 0s需要(重启后 5s 生效,缓存窗口实测成立)
metrics_cache_max_size—(官方注明)—需要(官方文档明示)
metrics_path 自定义指标❌⚠️ reload 链路行为异常(见 2.9)用 -Y 并重启
host/metrics 等监听类——需要

💡 排障实录(metrics_cache_max_age):配置 5s 后先 conf reload,conf get metrics_cache_max_age 回显仍是 0s,抓取计数器每秒 +10(未缓存);systemctl restart pgexporter 后 conf get 回 5s、窗口内计数器恒 14——该参数与官方标注的 max_size 一样属"改动需重启",官方文档对 max_age 未标注,以实测为准。

六、参考

本专栏系列(pgexporter 0.8.0)

官方与外部来源