2010-01-13 44 views
1

我需要监视我的postgres服务器。如果特定时间段之后某些表格没有变化,我需要发出警报。我一直试图让xymon和nagios做到这一点,我一直无法做到。请帮助监视Postgres表活动

回答

3

首先,在任何修改语句(INSERT/UPDATE/DELETE)上激活的表上创建一个trigger。这个触发器应该在某处更新一个“上次更改”的时间戳(例如某个其他控制表中的一个字段)。

然后,您需要一个单独的进程,它通过一些外部方式(例如Unix上的cron)定期启动。该过程例如运行每10分钟或每小时 - 无论您需要什么粒度。它只是检查上次更改的时间戳,以确定自上次检查以来的时间段内是否有任何活动。

+2

不支付触发的费用就当每一笔交易数据库已经跟踪了这一点。请参阅Greg Smith的回答。 – hgmnz 2012-02-13 01:16:42

+1

@hgimenez:绝对值得考虑,但请记住,stats_row_level'统计信息集合默认情况下最多禁用了8.2,并且8.3仅在2008年推出。启用此功能有其自身成本,并且只能对全部表进行全局更新。如果您只需要监视几个表格,则使用触发器的开销可能较低。 – 2012-02-13 06:54:52

1

这不是一个免费的解决方案,但LogicMonitor的postgres monitoring可以做到这一点。

0

如果您有办法在文件在一段时间内没有改变时发出警报,那么我有一个不太优雅但可能更简单的解决方案:试着找出Postgres存储问题表的文件名(某人应该深入研究Postgres中的系统表 - 也许在单独的问题中提出这个问题),然后设置监视工具来观察该文件的修改时间。

+1

这不会有两个原因。该文件将通过系统进程(如VACUUM)和一个称为提示位更新的进程进行修改 - 这两个进程都会写入表并更新修改时间,而不会实际更改数据。 通过查看系统目录(如pg_class和pg_databsae)中的内容,可以轻松找出与某个表对应的目录。有一个名为oid的未被记录的字段,你会发现匹配目录和文件名。但其中的实际文件大小为1GB,因此随着数据库的增长,所使用的文件名将随着您的改变而改变。 – 2010-01-20 07:22:40

+0

是的,以上所有都是真实的,存在不合理之处。所以如果你可以做其他答案中描述的任何解决方案,请不要这样做。 – 2010-01-20 14:59:05

5

您可能想查看pg_stat_user_tables,并注意表中行插入/删除/更新的统计信息是否已更改。这是检查监控软件中这种活动的最简单方法。

您也可以从查看源代码,以最好的PostgreSQL的监控插件,Nagios的一个的得到这方面的想法:check_postgres