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)。
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_age | 0 | Prometheus 响应缓存时长,0 禁用;后缀 ms/s/m/h/d/w |
metrics_cache_max_size | 256k | 缓存内存上限(即使缓存禁用也预分配;改动需重启) |
metrics_query_timeout | 0 | 单条指标 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_age | 5m | Bridge 响应缓存时长 |
bridge_cache_max_size | 10M | Bridge 缓存上限(改动需重启) |
bridge_json | 无(禁用) | JSON 格式输出的独立端口 |
bridge_json_cache_max_size | 10M | JSON 缓存上限(改动需重启) |
Bridge/JSON 是 pgexporter 区别于多数 exporter 的"聚合代理"能力(认知篇对比表中的附加能力项);本篇未实测 bridge(0.8.0 源码 doc/BRIDGE.md/doc/JSON.md 为语义依据),生产启用前建议先单机试跑。
2.4 远程管理与告警
| 参数 | 默认 | 语义 |
|---|---|---|
management | 0(禁用) | 远程管理端口;开启后 pgexporter-cli 可连入执行 ping/status/conf 等 |
cache | on | 连接缓存开关 |
alerts | off | 内置告警解析与评估开关(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_type | console | console / file / syslog |
log_level | info | FATAL/ERROR/WARN/INFO/DEBUG1..DEBUG5(大小写不敏感;>DEBUG5 归为 DEBUG5;非法值回落 INFO) |
log_path | pgexporter.log | 文件路径,支持 strftime(3) 时间变量 |
log_rotation_age | 0(禁) | 按时长轮转日志 |
log_rotation_size | 0(禁) | 按大小轮转日志 |
log_line_prefix | %Y-%m-%d %H:%M:%S | 行前缀 strftime 模板(含空格需加引号) |
log_mode | append | append 追加 / create 新建 |
实测:conf set log_rotation_size 10MB 返回 10485760(人类可读值被解析为字节数回显),conf set log_level debug 后 conf get log_level 即回 debug——运行时改级无需重启(详见命令篇 conf 系列实测)。
2.6 超时
| 参数 | 默认 | 语义 |
|---|---|---|
blocking_timeout | 30s | 连接阻塞等待时长,0 禁用 |
authentication_timeout | 5s | 认证允许时长 |
2.7 TLS
| 参数 | 默认 | 语义 |
|---|---|---|
tls | off | 管理面 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 内核与进程行为
| 参数 | 默认 | 语义 |
|---|---|---|
libev | auto | 事件后端:auto/select/poll/epoll/iouring/devpoll/port(装了 liburing 编译产物可用 iouring) |
keep_alive | on | socket SO_KEEPALIVE |
nodelay | on | TCP_NODELAY |
non_blocking | on | O_NONBLOCK |
backlog | 16 | listen() backlog,最小 16 |
hugepage | try | 大页内存:off/try/on |
pidfile | 无 | PID 文件路径 |
update_process_title | verbose | 进程标题: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 官方要求) |
type | postgresql | 否 | postgresql 直连采集(需 user);prometheus 为 Prometheus 端点透传(不需要 user,指标原样并入) |
user | — | 条件 | postgresql 类型必填;口令不在本文件,在 users vault(键为用户名) |
data_dir / wal_dir | 无 | 否 | 数据目录 / WAL 目录(供存储类指标补全上下文) |
tls | try | 否 | 后端 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 版本) |
| 列 | type | label(标签)/ 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 set | conf 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)
- 认知篇:《pgexporter 0.8.0 介绍与选型指南》——定位、架构与同类选型量化对比:《pgexporter 0.8.0 介绍与选型指南》
- 部署篇:《Rocky 9 安装 pgexporter 0.8.0 指南》——源码编译 + systemd 单机部署全过程实录:《Rocky 9 安装 pgexporter 0.8.0 指南》
- 命令篇:《pgexporter 0.8.0 常用 CLI 命令与工具详解》——
pgexporter-cli/pgexporter-admin/curl逐命令实测:《pgexporter 0.8.0 常用 CLI 命令与工具详解》
官方与外部来源
- 0.8.0 源码
doc/CONFIGURATION.md(参数表权威依据)、doc/YAML.md(自定义指标)、doc/ENCRYPTION.md(TLS/vault)、doc/BRIDGE.md/doc/JSON.md(Bridge/JSON)、doc/ALERT.md(告警)——0.8.0 源码树实查 - 仓库文档在线版:https://pgexporter.github.io/ (查询日期 2026-10-28)
- 仓库主页:https://github.com/pgexporter/pgexporter
- 站内相关:《PostgreSQL 18.6 介绍与选型指南》