отслеживать активность таблицы Postgres

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


person nonoki    schedule 13.01.2010    source источник


Ответы (4)


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

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

person Greg Smith    schedule 20.01.2010

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

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

person j_random_hacker    schedule 13.01.2010
comment
не оплачивайте стоимость триггера для каждой транзакции, когда база данных уже отслеживает это. Смотрите ответ Грега Смита. - person hgmnz; 13.02.2012
comment
@hgimenez: Определенно стоит подумать, но имейте в виду, что сбор статистики stats_row_level был отключен по умолчанию до версии 8.2, а версия 8.3 вышла только в 2008 году. Включение этого имеет свою стоимость и может быть сделано только глобально для всех таблиц. Если вам нужно отслеживать только несколько таблиц, использование триггера может иметь меньшие накладные расходы. - person j_random_hacker; 13.02.2012

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

person Community    schedule 13.01.2010

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

person Bandi-T    schedule 18.01.2010
comment
Это не сработает по двум причинам. Файл будет изменен системными процессами, такими как VACUUM, и процессом, называемым обновлением бита подсказки, оба из которых записывают в таблицу и обновляют время модификации без каких-либо фактических изменений данных. Вы можете легко узнать, какой каталог соответствует таблице, просмотрев такие системные каталоги, как pg_class и pg_databsae. Существует недостаточно документированное поле, называемое oid, в котором вы найдете соответствие имени каталога и файла. Но фактические файлы находятся в кусках по 1 ГБ, поэтому по мере роста вашей базы данных используемые имена файлов будут меняться под вас. - person Greg Smith; 20.01.2010
comment
Да, все вышесказанное верно, в этом и заключается неэлегантность. Так что не делайте этого, если вы можете сделать любое из решений, описанных в других ответах. - person Bandi-T; 20.01.2010