2010-01-13 14 views
1

Мне нужно следить за моим сервером postgres. я должен получить сигнал тревоги, если в определенные таблицы не будет изменений по истечении заданного времени. я пытался заставить xymon и nagios сделать это, и я не смог. пожалуйста, помогитеМонитор Postgres table activity

ответ

3

Сначала создайте в таблице trigger, который активируется в любой инструкции модификации (INSERT/UPDATE/DELETE). Этот триггер должен обновлять временную метку «последнее изменение» где-то (например, поле в какой-либо другой таблице управления).

Затем вам понадобится отдельный процесс, который регулярно запускается с помощью некоторых внешних средств (например, cron в Unix). Этот процесс выполняется, например. каждые 10 минут или каждый час - независимо от степени детализации. Он просто проверяет последнюю измененную временную метку, чтобы определить, была ли какая-либо деятельность за период с момента последней проверки.

+2

не оплачивают стоимость триггера на каждой транзакции, когда база данных уже отслеживает это. См. Ответ Грега Смита. – hgmnz

+1

@hgimenez: Определенно стоит учитывать, но имейте в виду, что коллекция статистики stats_row_level' по умолчанию была отключена до 8.2, а 8.3 появилась только в 2008 году. Включение этого имеет свои собственные затраты и может быть выполнено только глобально для всех таблиц , Если вам нужно только контролировать несколько таблиц, использование триггера может иметь меньшие накладные расходы. –

1

Это не бесплатное решение, но LogicMonitor's postgres monitoring может сделать это тривиально.

0

Если у вас есть средство для получения предупреждения, когда файл не изменяется за какое-то время, тогда у меня есть менее элегантное, но, вероятно, более простое решение: попробуйте выяснить имя файла, в котором Postgres хранит указанную таблицу (кто-то должен копаться в системных таблицах в Postgres - возможно, задайте это в отдельном вопросе), а затем установите свой инструмент мониторинга, чтобы посмотреть время изменения этого файла.

+1

Это не будет работать по двум причинам. Файл будет изменен системными процессами, такими как VACUUM, и процессом, называемым обновлением хинт-битов, - оба из которых записываются в таблицу и обновляют время модификации без каких-либо фактических изменений данных. Вы можете легко узнать, какой каталог соответствует таблице, просмотрев вещи в системных каталогах, таких как pg_class и pg_databsae. Есть недодокументированное поле, называемое oid, которое вы найдете в соответствии с именами каталогов и файлов. Но фактические файлы там находятся в 1 ГБ кусках, так как ваша база данных растет, используемые вами имена файлов будут меняться под вами. –

+0

Да, все вышеизложенное верно, там лежит неплатежеспособность. Поэтому не делайте этого, если вы можете сделать любое из решений, описанных в других ответах. –

5

Возможно, вы хотите посмотреть на pg_stat_user_tables и отметить, изменилась ли статистика для вставки/удаления строк/обновлений для таблицы. Это самый простой способ проверить этот вид активности в программном обеспечении мониторинга.

Вы также можете получить идеи в этой области, глядя на исходный код, чтобы лучшие из PostgreSQL мониторинга плагина, в Nagios одном: check_postgres