概述
check_postgres是一个用于监控数据库各种属性的脚本。它旨在与 Nagios、MRTG 或独立脚本一起使用。
官网: Check postgres
完整安装
从官网下载tar包
[root@check_postgres ~]# mkdir -p /opt/check_postgres/bin
[root@check_postgres ~]# chown postgres:postgres /opt/check_postgres/ -R
[root@check_postgres ~]# su - postgres
# 上传安装包到/home/postgres
tar -xf check_postgres.tar.gz
cd /home/postgres/check_postgres-2.25.0
# check_postgres.pl是Perl脚本,可能需要安装perl的依赖
# yum install perl-Time-HiRes
apt-get install -y make
# 完整安装
perl Makefile.PL
make
env -i make test
# 用root执行
make install
su - postgres
cd /opt/check_postgres/bin
check_postgres.pl --symlinks
ls
# 使用举例,检查数据库连接
check_postgres_connection -db postgres
POSTGRES_CONNECTION OK: DB "postgres" version 14.5 | time=0.04s
更多检查脚本使用帮助,参考官方文档,或使用man check_postgres查看
使用帮助手册
本手册描述了一些check_postgres.pl(版本 2.25.0)的一些特性和使用说明。本文内容主要参考了官方说明文档:check_postgres.pl
check_postgres是一个监控脚本集合,使用时可以通过两种方式调用特定的功能,第一种是使用check_postgres --action=XXXX,action是监控的选项;另一种是调用check_postgres_XXXX的方式。
在开始前,可以通过下面方式先创建symlinks
#创建所有symlinks
cd /opt/check_postgres/bin
check_postgres.pl --symlinks
ls -ll
就能看到创建的所有监控脚本的symlinks
postgres@host22:/opt/check_postgres/bin$ ls -ll
total 0
8月 18 17:12 check_postgres_archive_ready -> /usr/local/bin/check_postgres.pl
8月 18 17:12 check_postgres_autovac_freeze -> /usr/local/bin/check_postgres.pl
8月 18 17:12 check_postgres_backends -> /usr/local/bin/check_postgres.pl
8月 18 17:12 check_postgres_bloat -> /usr/local/bin/check_postgres.pl
8月 18 17:12 check_postgres_checkpoint -> /usr/local/bin/check_postgres.pl
8月 18 17:12 check_postgres_cluster_id -> /usr/local/bin/check_postgres.pl
8月 18 17:12 check_postgres_commitratio -> /usr/local/bin/check_postgres.pl
8月 18 17:12 check_postgres_connection -> /usr/local/bin/check_postgres.pl
8月 18 17:12 check_postgres_custom_query -> /usr/local/bin/check_postgres.pl
8月 18 17:12 check_postgres_database_size -> /usr/local/bin/check_postgres.pl
8月 18 17:12 check_postgres_dbstats -> /usr/local/bin/check_postgres.pl
8月 18 17:12 check_postgres_disabled_triggers -> /usr/local/bin/check_postgres.pl
8月 18 17:12 check_postgres_disk_space -> /usr/local/bin/check_postgres.pl
8月 18 17:12 check_postgres_fsm_pages -> /usr/local/bin/check_postgres.pl
8月 18 17:12 check_postgres_fsm_relations -> /usr/local/bin/check_postgres.pl
8月 18 17:12 check_postgres_hitratio -> /usr/local/bin/check_postgres.pl
8月 18 17:12 check_postgres_hot_standby_delay -> /usr/local/bin/check_postgres.pl
8月 18 17:12 check_postgres_indexes_size -> /usr/local/bin/check_postgres.pl
8月 18 17:12 check_postgres_index_size -> /usr/local/bin/check_postgres.pl
8月 18 17:12 check_postgres_last_analyze -> /usr/local/bin/check_postgres.pl
8月 18 17:12 check_postgres_last_autoanalyze -> /usr/local/bin/check_postgres.pl
8月 18 17:12 check_postgres_last_autovacuum -> /usr/local/bin/check_postgres.pl
8月 18 17:12 check_postgres_last_vacuum -> /usr/local/bin/check_postgres.pl
8月 18 17:12 check_postgres_listener -> /usr/local/bin/check_postgres.pl
8月 18 17:12 check_postgres_locks -> /usr/local/bin/check_postgres.pl
8月 18 17:12 check_postgres_logfile -> /usr/local/bin/check_postgres.pl
8月 18 17:12 check_postgres_new_version_bc -> /usr/local/bin/check_postgres.pl
8月 18 17:12 check_postgres_new_version_box -> /usr/local/bin/check_postgres.pl
8月 18 17:12 check_postgres_new_version_cp -> /usr/local/bin/check_postgres.pl
8月 18 17:12 check_postgres_new_version_pg -> /usr/local/bin/check_postgres.pl
8月 18 17:12 check_postgres_new_version_tnm -> /usr/local/bin/check_postgres.pl
8月 18 17:12 check_postgres_pgagent_jobs -> /usr/local/bin/check_postgres.pl
8月 18 17:12 check_postgres_pgbouncer_backends -> /usr/local/bin/check_postgres.pl
8月 18 17:12 check_postgres_pgbouncer_checksum -> /usr/local/bin/check_postgres.pl
8月 18 17:12 check_postgres_pgb_pool_cl_active -> /usr/local/bin/check_postgres.pl
8月 18 17:12 check_postgres_pgb_pool_cl_waiting -> /usr/local/bin/check_postgres.pl
8月 18 17:12 check_postgres_pgb_pool_maxwait -> /usr/local/bin/check_postgres.pl
8月 18 17:12 check_postgres_pgb_pool_sv_active -> /usr/local/bin/check_postgres.pl
8月 18 17:12 check_postgres_pgb_pool_sv_idle -> /usr/local/bin/check_postgres.pl
8月 18 17:12 check_postgres_pgb_pool_sv_login -> /usr/local/bin/check_postgres.pl
8月 18 17:12 check_postgres_pgb_pool_sv_tested -> /usr/local/bin/check_postgres.pl
8月 18 17:12 check_postgres_pgb_pool_sv_used -> /usr/local/bin/check_postgres.pl
8月 18 17:12 check_postgres_prepared_txns -> /usr/local/bin/check_postgres.pl
8月 18 17:12 check_postgres_query_runtime -> /usr/local/bin/check_postgres.pl
8月 18 17:12 check_postgres_query_time -> /usr/local/bin/check_postgres.pl
8月 18 17:12 check_postgres_relation_size -> /usr/local/bin/check_postgres.pl
8月 18 17:12 check_postgres_replicate_row -> /usr/local/bin/check_postgres.pl
8月 18 17:12 check_postgres_replication_slots -> /usr/local/bin/check_postgres.pl
8月 18 17:12 check_postgres_same_schema -> /usr/local/bin/check_postgres.pl
8月 18 17:12 check_postgres_sequence -> /usr/local/bin/check_postgres.pl
8月 18 17:12 check_postgres_settings_checksum -> /usr/local/bin/check_postgres.pl
8月 18 17:12 check_postgres_slony_status -> /usr/local/bin/check_postgres.pl
8月 18 17:12 check_postgres_table_size -> /usr/local/bin/check_postgres.pl
8月 18 17:12 check_postgres_timesync -> /usr/local/bin/check_postgres.pl
8月 18 17:12 check_postgres_total_relation_size -> /usr/local/bin/check_postgres.pl
8月 18 17:12 check_postgres_txn_idle -> /usr/local/bin/check_postgres.pl
8月 18 17:12 check_postgres_txn_time -> /usr/local/bin/check_postgres.pl
8月 18 17:12 check_postgres_txn_wraparound -> /usr/local/bin/check_postgres.pl
8月 18 17:12 check_postgres_version -> /usr/local/bin/check_postgres.pl
8月 18 17:12 check_postgres_wal_files -> /usr/local/bin/check_postgres.pl
上面提到的命令行中的XXXX就是对应这里的文件名组成部分中去除 check_postgres_后的部分
举一个例子,要检查数据库postgres的连接状态,返回OK,响应时间0.05s,数据库用的版本是14.5
# 方式1:
check_postgres.pl --action=connection --db=postgres
# 输出
POSTGRES_CONNECTION OK: DB "postgres" version 14.5 | time=0.05s
# 方式2:
check_postgres_connection --db=postgres
# 输出
POSTGRES_CONNECTION OK: DB "postgres" version 14.5 | time=0.05s
当使用check_postgres.pl方式时
--action=选项名称
这个选项是必须的,用来指定具体的操作脚本名称
重要提示:check_postgres需要超级管理员才能执行所有监控脚本。
check_postgres通用选项
上述两种命令行调用方式的所有操作都可以使用这一组数据库选项连接到目标数据库
-H 主机名或--host=主机名
连接到 NAME 指示的主机。可以是逗号分隔的名称列表。允许多个主机参数。如果没有给出主机,则默认为
PGHOST
环境变量或根本没有主机(这表明使用本地 Unix 套接字)。您也可以使用“--dbhost”。-p 端口或--port=端口
使用指定的端口号进行连接。可以是逗号分隔的端口号列表,并且允许多个端口参数。如果没有给出端口号,则默认为
PGPORT
环境变量。如果未设置,则默认为 5432。您也可以使用“--dbport”-db 数据库名或--dbname=数据库名
指定要连接的数据库。可以是逗号分隔的名称列表,并且允许多个 dbname 参数。如果未提供 dbname 选项,则默认为
PGDATABASE
环境变量。如果未设置,则如果 psql 为 8 或更高版本,则默认为“postgres”,否则默认为“template1”。-u 用户名或--dbuser=用户名
要连接的数据库用户的名称。可以是逗号分隔的用户名列表,并且允许多个 dbuser 参数。如果未提供,则默认为
PGUSER
环境变量,否则默认为“postgres”。--dbpass=密码
提供用于连接数据库的密码。强烈建议不要使用此选项。相反,应该使用 .pgpass 或 pg_service.conf 文件。
--dbservice=服务名
pg_service.conf 文件中的服务名称。在 Postgres 9.0 版之前,这是一个全局文件,通常在/etc/pg_service.conf中找到。如果您使用的是 9.0 或更高版本的 Postgres,您可以使用运行脚本的用户(例如 nagios)的主目录中的文件“.pg_service.conf”。
该文件包含一个简单的连接选项列表。您还可以在使用此选项时传递其他信息,例如 --dbservice="maindatabase sslmode=require"
举个例子:
# 1.检查主机a,b上端口号均为5433的数据库c的连接状态
check_postgres.pl --action=connection --host=a,b --port=5433 --db=c
# 2.分别检查主机a,b上端口号均为5433的数据库c和d的连接状态(两台主机上都有这两个数据库)
check_postgres.pl --action=connection --host=a,b --port=5433 --db=c,d
# 3.分别检查主机a,b上端口号均为1234的数据库e和f的连接状态(两台主机上都有这两个数据库),以及主机foo上端口号为5433的两个数据库e和f
check_postgres.pl --action=connection --host=a,b --host=foo --port=1234 --port=5433 --db=e,f
##提示:案例1检查了2次,案例2检查了4次,案例3检查了5次
其他重要选项
--warning=VAL 或 -w VAL
设置触发警告警报的阈值。此选项的有效选项取决于所使用的操作,比如存储大小可以用 10G,100M,也可以是百分比,如90%等
--critical=VAL 或 -c VAL
设置触发严重警报的阈值。此选项的有效选项取决于所使用的操作,比如存储大小可以用 10G,100M,也可以是百分比,如90%等
-t VAL或--timeout=VAL
以秒为单位设置超时,之后脚本将中止正在执行的任何操作并返回 UNKNOWN 状态。超时是针对每个 Postgres 集群的,而不是针对整个脚本的。默认值为 10;单位始终以秒为单位。
-h或--help
显示一个帮助屏幕,其中包含所有操作和选项的摘要。
-V或--version
显示当前check_postgres版本。
-v或--verbose
设置详细级别。可以多次调用来提升等级。将其设置为 3 或更高(换句话说,发出
-v -v -v
)会打开该程序的调试信息,该信息将发送到 stderr。--PGBINDIR=路径
告诉脚本在哪里可以找到 psql 二进制文件。如果您的系统上有多个版本的 PostgreSQL 可执行文件,或者如果您的路径中没有 PostgreSQL 可执行文件,则很有用。请注意,此选项全部为大写。默认情况下,不允许使用此选项。要启用它,您必须
$NO_PSQL_OPTION
将脚本顶部附近的位置更改为 0。如果可以,请避免使用此选项,而是使用环境变量 c<PGBINDIR> 或$PGBINDIR
同样位于脚本顶部附近的硬编码变量来设置要使用的 PostgreSQL 的路径。--include=name
要包含的对象,如数据库,可以用逗号分隔多个对象名称
--exclude=name
要排除的对象,如数据库,可以用逗号分隔多个对象名称
--test
启用测试模式。请参阅下面的“测试模式”部分。
--man
显示整个手册.需要安装perl-doc才能正常显示
--showperf=VAL
确定我们是否以标准 Nagios 格式输出附加性能数据(在字符串末尾,管道符号之后,使用 name=value)。VAL 应为 0 或 1。默认为 1。仅在使用 Nagios 输出模式时生效。
--perflimit=i
设置在使用showperf选项时报告多少感兴趣的项目的限制。这仅对返回大量项目的操作有效,例如table_size。默认值为 0,或无限制。将其与--include或--exclude选项一起使用时要小心,因为这些限制是在查询运行后完成的,因此您的限制可能不包括您想要的项目。仅在使用 Nagios 输出模式时生效。
action选项支持的操作值
archive_ready(symlink: check_postgres_archive_ready)
检查pg_xlog/archive_status目录(PostgreSQL 10 及更高版本:pg_wal/archive_status)中存在多少扩展名为.ready的 WAL 文件,这个检查是为了确保wal文件及时归档到归档目录,所以设置的告警值应该很低。
例子
check_postgres_archive_ready --host=pluto --critical=10 --lsfunc=ls_archive_status_dir
--lsfunc选项是指定包装函数,如果不指定该选项,执行该检查必须是超级管理员用户,包装函数参考如下:
BEGIN;
CREATE FUNCTION ls_archive_status_dir()
RETURNS SETOF TEXT
AS $$ SELECT pg_ls_dir('pg_xlog/archive_status') $$
LANGUAGE SQL
SECURITY DEFINER;
REVOKE ALL ON FUNCTION ls_archive_status_dir() FROM PUBLIC;
GRANT EXECUTE ON FUNCTION ls_archive_status_dir() to nagios;
COMMIT;
autovac_freeze(symlink: check_postgres_autovac_freeze)
检查每个数据库与 Postgres autovacuum_freeze_max_age设置的接近程度。此操作仅适用于 8.2 或更高版本的数据库。--warning和--critical选项应以百分比表示。每个数据库中事务的“年龄”与 autovacuum_freeze_max_age 设置(默认为 2 亿)进行比较以生成一个四舍五入的百分比。警告的默认值为90% ,严重的默认值为95%。可以使用--include和--exclude选项过滤数据库。
例子:
# 当端口 5432 上的任何数据库超过 97% 时发出警告
check_postgres_autovac_freeze --port=5432 --warning="97%"
backends(symlink: check_postgres_backends)
检查一个或多个数据库的当前连接数,并可选择将其与允许的最大值进行比较,该最大值由 Postgres 配置变量max_connections确定。--warning和--critical选项可以采用三种形式之一。首先,可以给出一个简单的数字,它表示将发出警报的连接数。此选择不使用max_connections设置。其次,可以给出可用连接的百分比。第三,可以给出一个负数,表示在达到max_connections之前剩余的连接数。--warning和--critical的默认值是“90%”和“95%”。您还可以使用--include和--exclude选项过滤数据库。
要仅查看非空闲进程,可以使用--noidle参数。
例子:
#示例 1:主机 quirm 上的连接数达到 120 时发出警告,达到 150 时发出严重警告。
check_postgres_backends --host=quirm --warning=120 --critical=150
#示例 2:当我们在主机 lancre 或 lancre2 上达到 max_connections 设置的 75% 时给出一个关键值。
check_postgres_backends --warning='75%' --critical='75%' --host=lancre,lancre2
#示例 3:当宿主质粒上只剩下 10 个连接槽时给出警告,当我们只剩下 5 个时给出关键。
check_postgres_backends --warning=-10 --critical=-5 --host=plasmid
#示例 4:检查除名称中带有“test”的数据库之外的所有数据库,但允许名称为“pg_greatest”的数据库。在前两台主机上连接为端口 5432,在第三台主机上连接为端口 5433。当我们达到 30 个或更多连接时,我们希望总是抛出一个关键。
check_postgres_backends --dbhost=hong,kong --dbhost=fooey --dbport=5432 --dbport=5433 --warning=30 --critical=30 --exclude="~test" --include="pg_greatest,~prod"
bloat(symlink: check_postgres_bloat)
检查表和索引中的膨胀量。(膨胀通常是表或索引中占用的未使用空间的数量。此空间通常通过使用 VACUUM 命令回收。)此操作需要在目标数据库上启用统计信息收集,并且需要频繁地运行 ANALYZE。--include和--exclude选项可用于过滤出要查看的表。
--warning和--critical选项可以指定为大小、百分比或两者。有效的大小单位是字节、千字节、兆字节、千兆字节、太字节、艾字节、拍字节和泽字节。您可以用第一个字母缩写所有这些。没有单位的项目被假定为“字节”。默认值为“1 GB”和“5 GB”。该值表示“浪费的字节”的数量,或者表和索引实际使用的内容与我们计算出的内容之间的差异。
仅显示前 10 个最臃肿的关系。您可以通过使用--perflimit选项设置您自己的限制来更改此数字。
例子
#示例 1:如果端口 5432 上的任何表膨胀超过 100 MB,则发出警告,如果超过 200 MB,则发出严重警告
check_postgres_bloat --port=5432 --warning='100 M' --critical='200 M'
#示例 2:如果主机 'sami' 上的表 'orders' 有超过 10 兆的膨胀,请给出一个关键
check_postgres_bloat --host=sami --include=orders --critical='10 MB'
#示例 3:如果数据库 'sales' 上的表 'q4' 膨胀超过 50%,请给出关键信息
check_postgres_bloat --db=sales --include=q4 --critical='50%'
#示例 4:给一个关键的任何表膨胀超过 20%并且膨胀超过 150 MB:
check_postgres_bloat --port=5432 --critical='20% and 150 M'
主要提示:这个检查计算的值不是很精确,只是一种估算。
checkpoint(symlink: check_postgres_checkpoint
)
确定自上次检查点运行以来的时间。这必须与正在检查的数据库在同一台服务器上运行(例如,-h 标志将不起作用)。必须通过环境变量PGDATA
或传递--datadir
参数来设置数据目录。它返回自上次检查点运行以来的秒数,由解析对pg_controldata
. 因此,pg_controldata 可执行文件必须在当前路径中可用。或者,您可以指定PGBINDIR
它所在的目录。也可以使用特殊选项--assume-prod或--assume-standby-mode,如果找到的模式不是预期的模式,则会发出 CRITICAL;必须至少设置一个警告或关键参数。
未找到pg_controldata
commitratio(symlink: check_postgres_commitratio
)
查所有数据库的提交率并在它们太低时抱怨。每个数据库集群无需多次运行此命令。可以使用--include和--exclude选项过滤数据库。warning and critical选项应指定为百分比。此操作没有默认值:必须指定warning and critical。警告值不能大于临界值。输出返回按 commitratio 排序的所有数据库,最小的在前。
例子
# 如果主机 flagg 上的任何数据库的提交率低于 90%,则发出警告,如果低于 80%,则发出严重警告
check_postgres.pl --action=commitratio --host=flagg --warning='90%' --critical='80%'
POSTGRES_COMMITRATIO CRITICAL: DB "postgres" postgres: 79.85 template1: 100.00 | time=0.05s postgres=79.85;100;100 template1=100.00;100;100
connection(symlink: check_postgres_connection
)
简单地连接,不采用--warning或--critical选项
例子
check_postgres_connection --db=postgres
POSTGRES_CONNECTION OK: DB "postgres" version 14.5 | time=0.04s
custom_query(symlink: check_postgres_custom_query
)
运行您选择的自定义查询,并解析结果。
这个检查脚本有如下选项
--valtype=name
这个选项可以指定4个参数分别为:
integer:进行简单的整数比较。第一列应该是一个简单的整数,警告值和临界值应该相同。
string:警告和关键是字符串,只有当第一列中的值完全匹配时才会触发。这是区分大小写的。
time:警告和关键是时间,可以有秒、分钟、小时或天的单位。每个都可以写成单数或缩写为第一个字母。如果没有给出单位,则假定为秒。第一列应该是一个整数,表示要检查的秒数。
size:警告和关键是大小,可以有字节、千字节、兆字节、千兆字节、太字节或艾字节为单位。每个都可以缩写为第一个字母。如果没有给出单位,则假定为字节。第一列应该是一个整数,表示要检查的字节数。
例子:
#示例 1:警告如果任何超过 100 页的关系被命名为“rad”,请将页数放在性能数据部分中。
check_postgres_custom_query --valtype=string -w "rad" --query="SELECT relname AS result, relpages AS pages FROM pg_class WHERE relpages > 100"
#示例 2:如果“foobar”函数返回一个超过 5MB 的数字,则给出一个关键值:
check_postgres_custom_query --critical='5MB'--valtype=size --query="SELECT foobar() AS result"
#示例 2:如果函数“snazzo”返回小于 42 时发出警告:
check_postgres_custom_query --critical=42 --query="SELECT snazzo() AS result" --reverse
database_size(symlink: check_postgres_database_size
)
检查所有数据库的大小并在它们太大时预警
例子
#示例 1:如果主机 flagg 上的任何数据库的大小超过 1 TB,则发出警告,如果超过 1.1 TB,则发出严重警告。
check_postgres_database_size --host=flagg --warning='1 TB' --critical='1.1 t'
#示例 2:如果端口 5432 上的数据库模板 1 超过 10 MB,则给出关键值。
check_postgres_database_size --port=5432 --include=template1 --warning='10MB' --critical='10MB'
#示例 3:如果用户 'tom' 拥有的主机 'tardis' 上的任何数据库超过 5 GB,则发出警告
check_postgres_database_size --host=tardis --includeuser=tom --warning='5 GB' --critical='10 GB'
dbstats(symlink: check_postgres_dbstats
)
从 pg_stat_database 视图报告信息,并以 Cacti 友好的方式输出。不支持其他输出,因为输出是信息性的并且不适合警报,例如与 Nagios 一起使用。如果没有给出选项,则返回所有数据库,每行一个。您可以使用该选项包含特定数据库--include
,也可以使用该--dbname
选项。
每行返回 11 个项目,格式为 name:value,由单个空格分隔。数据库统计项
backends 此数据库当前正在运行的后端数。
commits 此数据库自创建或重置以来的提交总数。
rollbacks 此数据库自创建或重置以来的回滚总数。
read 读取的磁盘块总数。
hit 缓冲区命中的总数。
ret 返回的总行数。
fetch提取的总行数。
ins 插入的总行数。
upd 更新的总行数。
del 删除的总行数。
dbname 数据库的名称。
请注意,如果 Postgres 版本为 8.2 或更低,则 ret、fetch、ins、upd 和 del 项将始终为 0,因为这些统计信息在这些版本中不可用。
如果给出 dbname 参数,则返回七个附加项:
idxscan 用户索引扫描的总数。
idxtupread 返回的用户索引条目总数。
idxtupfetch 简单用户索引扫描获取的总行数。
idxblksread 为所有用户索引读取的磁盘块总数。
idxblkshit 所有用户索引的缓冲区命中总数。
seqscan 针对所有用户表的顺序扫描总数。
seqtupread 从所有用户表返回的元组总数。
例子
#示例 1:获取主机“willow”上名为“products”的数据库的统计信息:
check_postgres_dbstats --dbhost willow --dbname products
disabled_triggers(symlink: check_postgres_disabled_triggers
)
检查数据库内禁用触发器的数量
例子
#示例 1:确保没有禁用的触发器
check_postgres_disabled_triggers --warning=1
disk_space(symlink: check_postgres_disk_space
)
检查 Postgres 使用的可用物理磁盘空间。此操作要求您具有可用于报告磁盘大小的可执行文件“/bin/df”,并且它还需要以超级用户身份运行,因此它可以检查Postgres 中的data_directory设置。--warning和--critical选项以大小或百分比或两者的形式给出。如果使用大小,则允许使用标准单位类型:字节、千字节、千兆字节、兆字节、千兆字节、太字节或艾字节。每个都只能缩写为第一个字母;根本没有单位表示“字节”。默认值为“90%”和“95%”。
此命令检查以下内容以确定 Postgres 使用的所有不同物理磁盘。
data_directory - 主数据目录所在的磁盘。
日志目录- 日志文件所在的磁盘。
WAL 文件目录- 预写日志所在的磁盘(例如,符号链接的 pg_xlog 或 pg_wal)
表空间- 位于单独磁盘上的每个表空间。
输出显示每个磁盘上已使用和可用的总大小以及百分比,按使用百分比从高到低排序。
例子
#示例 1:确保端口 5432 上数据库的文件系统没有超过 90%。
check_postgres_disk_space --port=5432 --warning='90%' --critical='90%'
#示例 2:检查所有以/dev/sda开头的文件系统是否小于 10 GB 和 11 GB(警告和严重)
check_postgres_disk_space --port=5432 --warning='10 GB' --critical='11 GB' --include="~^/dev/sda"
#示例 4:确保没有文件系统既超过 50%又超过 15 GB
check_postgres_disk_space --critical='50% and 15 GB'
#示例 5:如果任何文件系统已超过 70%或超过 1T ,则发出警告
check_postgres_disk_space --warning='1T or 75'
hitratio(symlink: check_postgres_hitratio
)
检查所有数据库的命中率并在它们太低时抱怨。--warning和--critical选项应指定为百分比。
例子
#示例:如果主机 flagg 上的任何数据库的命中率低于 90%,则发出警告,如果低于 80%,则发出严重警告。
check_postgres_hitratio --host=flagg --warning='90%' --critical='80%'
数据库对象大小
relation_size(symlinks: check_postgres_relation_size
):使用pg_relation_size()函数检查关系(表、索引、物化视图),分别是一个变得太大的索引
index_size(symlinks: check_postgres_index_size
):同relation_size
table_size(symlinks: check_postgres_table_size
):使用pg_table_size()检查表和物化视图,即包括关系分支和 TOAST 表
indexes_size(symlinks: check_postgres_indexes_size
):使用pg_indexes_size ()检查表和物化视图的附加索引的大小
total_relation_size(symlinks: check_postgres_total_relation_size
):使用pg_total_relation_size()检查关系,即包括关系分叉、索引和 TOAST 表
如果启用了--showperf选项,将给出所有关系及其大小。为防止这种情况,建议您设置--perflimit选项,这将导致查询执行ORDER BY size DESC LIMIT (perflimit)
.
例子
#示例 1:如果主机 burrick 上的任何表大于 600MB,请发出严重警告。
check_postgres_table_size --critical='600 MB' --warning='600 MB' --host=burrick --showperf=1 --perflimit=10
#示例 2:如果表 products 的大小超过 4 GB,则发出警告,并在 4.5 GB 时给出临界值。
check_postgres_table_size --host=burrick --warning='4 GB' --critical='4.5 GB' --include=products
#示例 3:如果任何不属于 postgres 的索引超过 500 MB,则发出警告。
check_postgres_index_size --port=5432 --excludeuser=postgres -w 500MB -c 600MB
对于 MRTG 输出,返回最大关系的字节大小,第四行是数据库和关系的名称
统计和回收
last_analyze(symlinks: check_postgres_last_analyze
) 检查上一次分析至今过了多久
last_vacuum(symlinks: check_postgres_last_vacuum
) 检查上一次回收至今过了多久
last_autoanalyze(symlinks: check_postgres_last_autoanalyze
) 检查上一次自动分析至今过了多久
last_autovacuum(symlinks: check_postgres_last_autovacuum
) 检查上一次自动回收至今过了多久
可以使用--include和--exclude选项过滤表,--warning and --critical 可以指定单位seconds, minutes, hours和days;
例子
#示例 1:如果任何表在 3 天内没有被回收,则发出警告,并在一周内给予批评
check_postgres_last_vacuum --host=wormwood --warning='3d' --critical='7d'
#示例 2:同上,但跳过属于用户 'eve' 或 'malory' 的表
check_postgres_last_vacuum --host=wormwood --warning='3d' --critical='7d' --excludeuser=eve,mallory
locks(symlink: check_postgres_locks
)
检查一个或多个数据库上的锁总数。--warning和--critical选项可以指定为简单的数字,它们代表锁的总数,或者它们可以按锁的类型进行细分。有效的锁名称是'total'
、'waiting'
或 Postgres 使用的锁类型的名称。这些名称不区分大小写,并且不需要末尾的“锁定”部分,因此独占将匹配 'ExclusiveLock'。
例子
#示例 1:如果锁的数量为 100 或更多,则警告,如果 200 或更多,则在主机 garrett 上为关键
check_postgres_locks --host=garrett --warning=100 --critical=200
#示例 2:在主机 artemus 上,如果存在 200 个或更多锁,则发出警告,如果总共存在超过 250 个锁,或者如果存在超过 20 个排他锁,或者如果超过 5 个连接正在等待锁,则发出紧急通知。
check_postgres_locks --host=artemus --warning=200 --critical="total=250:waiting=5:exclusive=20"
sequence(symlink: check_postgres_sequence
)
检查数据库中所有序列的剩余空间。这被测量为已用于每个序列的总可能值的百分比。--warning和--critical选项应以百分比表示。警告的默认值为85% ,严重的默认值为95%。注意这个检查不关心序列是否循环
例子
#示例 1:如果任何序列接近 95% 满,则发出警告。
check_postgres_sequence --dbport=5432 --warning=95%
#示例 2:检查名为“orders_id_seq”的序列是否不超过半满。
check_postgres_sequence --dbport=5432 --critical=50% --include=orders_id_seq
txn_idle( symlink: check_postgres_txn_idle
)
检查一个或多个数据库上“空闲事务”查询的数量和持续时间。--warning和--critical选项以时间单位、有符号整数或时间单位整数的形式给出,并且必须至少提供一个(没有默认值)。有效单位是“秒”、“分钟”、“小时”或“天”。每个都可以写成单数或缩写为第一个字母。如果没有给出单位并且数字没有符号,则假定单位为秒。
例子
#示例 1:如果任何连接在事务中空闲超过 15 秒,则发出警告:
check_postgres_txn_idle --port=5432 --warning='15 seconds'
#示例 2:如果有 50 个或更多事务,则发出警告
check_postgres_txn_idle --port=5432 --warning='+50'
#示例 3:如果 5 个或更多连接在事务中空闲超过 10 秒,则给出关键:
check_postgres_txn_idle --port=5432 --critical='5 for 10 seconds'
如果无法检查查询,则返回 UNKNOWN
txn_time( symlink: check_postgres_txn_time
)
检查一个或多个数据库上打开的事务的长度。-warning和--critical选项是时间单位,并且必须至少提供一个(无默认值)。有效单位是“秒”、“分钟”、“小时”或“天”。每个都可以写成单数或缩写为第一个字母。如果没有给出单位,则假定单位为秒。
例子
#示例 1:如果任何事务已打开超过 10 分钟,请给予批评:
check_postgres_txn_time --port=5432 --critical='10 minutes'
#示例 1:如果用户 'warehouse' 的交易打开时间超过 30 秒,则发出警告
check_postgres_txn_time --port-5432 --warning=30s --includeuser=warehouse
version(symlink: check_postgres_version
)
检查所需版本的 Postgres 是否正在运行。--warning和--critical选项(仅需要一个)必须采用XY或XYZ格式,其中X是主要版本号,Y是次要版本号,Z是修订版。
例子
#示例 1:如果端口 5678 上的数据库不是版本 8.4.10,则发出警告:
check_postgres_version --port=5678 -w=8.4.10
#示例 2:如果主机 valley、grain 或 sun 上的任何数据库不是 8.3,则发出警告:
check_postgres_version -H valley,grain,sunshine --critical=8.3