check_postgres 15 个隐藏监控动作大揭秘:pgBouncer、pgAgent 与配置校验
【免费下载链接】check_postgresNagios check_postgres plugin for checking status of PostgreSQL databases项目地址: https://gitcode.com/gh_mirrors/ch/check_postgres
check_postgres 是一款专为 PostgreSQL 设计的 Nagios 监控插件,一个 Perl 脚本就能覆盖数据库连接、性能、事务、磁盘等数十种检查场景。除了大家都用过的connection、backends之外,它还埋藏了 15 个鲜有人知的"隐藏动作"——从 pgBouncer 配置校验到 pgAgent 定时任务告警,从配置指纹比对到事务回绕预警。读完本文,你的 PostgreSQL 监控体系会直接升级一个档次。
快速上手:check_postgres 监控插件怎么用?
整个项目的核心就是一个脚本 check_postgres.pl,安装只需复制到 Nagios 脚本目录,再创建符号链接即可:
perl check_postgres.pl --symlinks之后就可以用check_postgres_动作名的方式调用,比如check_postgres_connection。也可以统一用主程序加--action参数指定动作。本文介绍的所有动作都遵循同样的调用模式:-w(警告阈值)和-c(严重阈值)二选一或组合使用。
💡 所有动作的完整清单可通过
check_postgres.pl --help查看,源码中动作定义集中在主脚本的$action_info哈希中。
一、连接池与任务代理:pgBouncer、pgAgent 监控
这是本文的重头戏。如果你的架构里用了 pgBouncer 连接池或 pgAgent 定时任务框架,以下三个动作能让监控覆盖到"数据库之外"。
1. pgbouncer_checksum:pgBouncer 配置变更守门员
对 pgBouncer 的全部配置项排序后生成 MD5 校验和。只要有人改了pgbouncer.ini并重启,校验和立刻对不上——堪称配置防篡改报警器。
用法分两步:先用--critical=0取出当前校验和作为基线,之后每次监控都拿它比对。动作会自动把数据库名设为pgbouncer,无需手动指定。相关行为可在测试文件 t/02_pgbouncer_checksum.t 中看到完整验证逻辑。
2. pgagent_jobs:pgAgent 定时任务失败告警
pgAgent 是 PostgreSQL 内置的定时任务框架,但任务悄悄失败是常见事故源。这个动作会检查指定时间窗口内是否有任何步骤返回非零结果:
--critical=1d:最近一天内有失败任务则告警--critical=2h --warning=4h:按"严重 2 小时 / 警告 4 小时"双档监控
时间单位支持s / m / h / d简写,参考测试 t/02_pgagent_jobs.t。
3. pgbouncer_maxwait:连接池排队最长等待时间
监控 pgBouncer 队列中最久客户端的等待秒数。这个数值持续上涨,通常意味着服务器过载或pool_size配小了——是定位"应用变慢但数据库正常"这类问题的利器。
二、配置校验与完整性:防篡改、防漂移
4. settings_checksum:PostgreSQL 配置指纹比对
原理与pgbouncer_checksum相同:把pg_settings里所有参数名和值排序后做 MD5 校验。任何一次ALTER SYSTEM都会被捕捉到。注意:不同用户因权限差异可能看到不同校验和,建议固定用一个超级用户监控。
5. cluster_id:数据库系统标识符监控
通过pg_controldata读取系统标识符,确认你监控的"还是当初那个库"。--critical=0可先取基线,之后填入真实 ID。该动作必须在数据库所在本机执行,不支持-h远程。
6. same_schema:两套库结构一致性校验
比对两个数据库的表、列、索引是否完全一致。主从重建、蓝绿部署后"悄悄少了一张表"的隐患,一条命令就能排查,常用于生产库与备库的结构漂移检查。
7. disabled_triggers:谁偷禁了触发器?
扫描所有被置为 disabled 状态的触发器。触发器被禁用往往意味着数据校验或级联逻辑失效,适合加入日常巡检。
三、事务安全网:回绕、两阶段提交与悬挂事务
8. txn_wraparound:事务 ID 回绕预警
PostgreSQL 事务 ID 是有限的,接近回绕点若不介入会导致数据库冻结。这个动作报告各库距离回绕还有多远,是预防性运维中优先级最高的检查项之一。
9. prepared_txns:两阶段提交事务年龄监控
监控 prepared 状态事务的数量与开启时长。默认警告阈值只有 1 秒——因为大多数系统里出现两阶段提交事务本身就值得怀疑(注意它和 prepared statement 不是一回事)。
10. txn_idle:"idle in transaction" 悬挂事务
统计空闲在事务中的连接数与最长时长,支持"5 个连接空闲超 10 秒"这种复合阈值。悬挂事务会白白占用锁和 WAL,这个动作专治此类隐形杀手。
四、运维利器:WAL、时钟、序列与版本
11. wal_files:WAL 文件数量监控
统计pg_xlog目录下 WAL 文件数量。数量异常增长可能暗示归档停滞或检查点配置不当,是归档链路健康的最直观信号,对应测试见 t/02_wal_files.t。
12. timesync:数据库时间与系统时间比对
比较本地系统时间与数据库时间差,默认警告 2 秒、严重 5 秒。多机复制、基于时间的分区场景下,时钟漂移是最隐蔽的故障源,这个动作一条命令覆盖多台主机。
13. sequence:序列剩余调用量
检查序列(sequence)距离上限还剩多少次调用,提前发现"序列耗尽导致插入失败"的低级但致命问题。
14. new_version_cp:check_postgres 自身版本监控
检查是否有更新版本的 check_postgres 可用。监控工具本身也需要被监控,否则插件 bug 会长期潜伏在你的巡检链路里。
15. commitratio:提交/回滚比例分析
报告所有数据库的 commit 占比,按最低值排序输出。某库回滚率突然飙升,往往是应用 bug 或重试风暴的早期信号,比看错误日志更快。
15 个隐藏动作一览表
| # | 动作名 | 一句话定位 |
|---|---|---|
| 1 | pgbouncer_checksum | pgBouncer 配置防篡改 |
| 2 | pgagent_jobs | 定时任务失败告警 |
| 3 | pgbouncer_maxwait | 连接池排队时延 |
| 4 | settings_checksum | PostgreSQL 配置指纹 |
| 5 | cluster_id | 系统标识符防漂移 |
| 6 | same_schema | 双库结构一致性 |
| 7 | disabled_triggers | 被禁触发器巡检 |
| 8 | txn_wraparound | 事务回绕预警 |
| 9 | prepared_txns | 两阶段提交监控 |
| 10 | txn_idle | 悬挂空闲事务 |
| 11 | wal_files | WAL 文件数量 |
| 12 | timesync | 时钟漂移检测 |
| 13 | sequence | 序列余量预警 |
| 14 | new_version_cp | 插件版本监控 |
| 15 | commitratio | 提交回滚比例 |
下一步:测试用例是最好的学习材料
项目的 t/ 目录为每个动作都配了集成测试,例如 t/02_txn_wraparound.t、t/02_same_schema.t、t/02_timesync.t,是学习参数用法的最佳参考。配合 README.md 的完整安装说明和 Makefile.PL 的标准 Perl 构建流程(perl Makefile.PL && make && make install),即可跑起make test验证环境。
上手建议:先接入settings_checksum+pgbouncer_checksum守住配置基线,再用txn_wraparound与wal_files覆盖安全底线,最后按需开启 pgBouncer / pgAgent 专项监控——你的 Nagios 面板从此不再只是"数据库活着没"。
【免费下载链接】check_postgresNagios check_postgres plugin for checking status of PostgreSQL databases项目地址: https://gitcode.com/gh_mirrors/ch/check_postgres
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考