我有一个使用PostgreSQL 9.3的主和热备份设置,我试图使用check_postgres工具和“hot_standby_delay”操作来监视备用数据库上的复制状态。 这似乎通过计算主站和备用站上xlog位置之间的字节差异来起作用。
在许多在线示例中,我已经看到了这个在<1MB范围内的警告和关键阈值。 我们在Nagios中使用的确切命令是:
/usr/local/bin/check_postgres.pl --action=hot_standby_delay --host=$HOSTNOTES$,$HOSTADDRESS$ --port=5432 --dbname=monitoring --dbuser=monitoring --dbpass=monitoring --warning=1000000 --critical=5000000
这应该设置一个大约1MB的警告和大约5MB的中断。 但是,在我们的服务器上,我们经常会看到它的高峰,如下所示:
[1417719713] SERVICE ALERT: host;PostgreSQL: Replication Delay;CRITICAL;SOFT;1;POSTGRES_HOT_STANDBY_DELAY CRITICAL: DB "monitoring" (host:host.example.com) 121175880 [1417719773] SERVICE ALERT: host;PostgreSQL: Replication Delay;CRITICAL;SOFT;2;POSTGRES_HOT_STANDBY_DELAY CRITICAL: DB "monitoring" (host:host.example.com) 132780968 [1417719833] SERVICE ALERT: host;PostgreSQL: Replication Delay;CRITICAL;SOFT;3;POSTGRES_HOT_STANDBY_DELAY CRITICAL: DB "monitoring" (host:host.example.com) 21412936
随后在下一个Nagios检查与:
[1417719893] SERVICE ALERT: host;PostgreSQL: Replication Delay;OK;SOFT;4;POSTGRES_HOT_STANDBY_DELAY OK: DB "monitoring" (host:host.example.com) 0
因此,从一般意义上来说,似乎复制正在工作(事实上,在主服务器上执行数据更新可以在备用服务器上看到即时结果)。
不幸的是,这种情况下,监测是无用的,因为它每天都会触发多次误报。 根据我在文档和使用它的其他示例之间find的结果,这个结果并不典型,大多数人能够设置1MB或更低的阈值,只有在出现错误时才会看到错误。
有没有人有任何想法,我可以尝试用configuration来弥补这一点? 在这个特定的安装中,我们只改变了一些参数,其中只有wal_keep_segments看起来甚至是远程相关的(我们把它设置为128)。
主服务器和备用服务器都位于EC2中的相同可用区域,而且它们之间似乎没有任何通信延迟。 这也是一个非常低stream量的数据库,所以我不确定xlog delta是如何远离开始的,除非我错过了一些非常关键的事实。
返回SOFT CRITICAL的检查不会触发通知,因为它尚未达到max_check_attempts阈值。 这不是误报; Nagios是按照devise工作的。 这是很正常的(对于许多服务,而不仅仅是你的情况)。 这正是为什么max_check_attempts存在的原因。
在你的情况下,在初始非正常检查结果的3分钟内恢复正常。 对于某些服务,这种不同步的时间是可以接受的,但可能不适合您的使用情况。 我对Postgres的复制不够了解,如果它指出了一个潜在的问题,那么肯定会说。