【问题标题】:monitor Postgres table activity监控 Postgres 表活动
【发布时间】:2010-01-13 09:09:55
【问题描述】:

我需要监控我的 postgres 服务器。如果在给定时间后某些表格没有变化,我需要得到警报。我一直试图让 xymon 和 nagios 做到这一点,但我没能做到。请帮忙

【问题讨论】:

    标签: postgresql nagios hobbitmon


    【解决方案1】:

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

    从查看源代码到最好的 PostgreSQL 监控插件(Nagios 插件),您可能还会在这方面获得一些想法:check_postgres

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 当数据库已经跟踪到每个事务时,不要为每个事务支付触发器成本。请参阅 Greg Smith 的回答。
      • @hgimenez:绝对值得考虑,但请记住 stats_row_level 统计数据收集在 8.2 之前默认禁用,而 8.3 仅在 2008 年发布。启用此功能有其自身的成本,并且可以仅对所有表全局执行。如果只需要监控几个表,使用触发器的开销可能会更低。
      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

        • 这不起作用有两个原因。该文件将被 VACUUM 等系统进程和一个称为提示位更新的进程修改——这两个进程都写入表并更新修改时间,而没有任何实际的数据更改。您可以通过查看系统目录(如 pg_class 和 pg_databsae)中的内容轻松找出对应于表的目录。有一个未充分记录的字段,称为 oid,您会发现它与目录和文件名匹配。但是其中的实际文件以 1GB 块为单位,因此随着数据库的增长,所使用的文件名将在您之下发生变化。
        • 是的,以上所有内容都是正确的,其中存在不雅之处。因此,如果您可以执行其他答案中描述的任何解决方案,请不要这样做。
        猜你喜欢
        • 2019-11-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多