2010-01-13 5 views
1

내 postgres 서버를 모니터링해야합니다. 주어진 시간 후에 특정 테이블에 변화가 없다면 나는 경보를해야합니다. 나는 이것을하기 위해 크 시몬과 나기 오스를 얻으려고 노력해 왔지만 나는 할 수 없었다. 도와주세요모니터 Postgres 테이블 활동

답변

3

먼저 수정 문 (INSERT/UPDATE/DELETE)에서 활성화되는 테이블에 trigger을 만듭니다. 이 트리거는 어딘가에 (예 : 다른 제어 테이블의 필드) '마지막으로 변경된'시간 소인을 업데이트해야합니다.

그런 다음 외부 수단 (예 : Unix에서는 cron)에 의해 정기적으로 시작되는 별도의 프로세스가 필요합니다. 이 프로세스는 예를 들어 10 분마다 또는 매시간 - 필요한 모든 세밀도. 마지막으로 변경된 시간 소인을 점검하여 최종 점검 이후의 기간에 활동이 있었는지 여부를 판별합니다.

+2

때 모든 트랜잭션에 트리거의 비용을 지불하지 않는다 :

또한 PostgreSQL을 모니터링 플러그인의 Nagios의 하나의 최선을 소스 코드보고에서이 분야의 아이디어를 얻을 수 있습니다 데이터베이스는 이미이를 추적합니다. 그렉 스미스의 대답을 참조하십시오. – hgmnz

+1

@hgimenez : 확실히 고려해 볼만한 가치가 있지만,'stats_row_level' 통계 수집은 기본적으로 8.2까지 비활성화되어 있으며, 2008 년에만 8.3이 나왔다는 것을 명심하십시오.이 기능을 사용하려면 자체 비용이 필요하며 모든 테이블에 대해 전체적으로 수행 할 수 있습니다 . 몇 개의 테이블 만 모니터링해야하는 경우 트리거를 사용하면 오버 헤드가 줄어들 수 있습니다. –

1

무료 솔루션은 아니지만 LogicMonitor의 postgres monitoring은이를 쉽게 수행 할 수 있습니다.

0

파일이 얼마 동안 변경되지 않을 때 알림을받을 수있는 방법이 있으면 우아하지만 덜 간단한 해결책이 있습니다. Postgres가 해당 테이블을 저장하는 파일 이름을 찾으십시오 (누군가 Postgres의 시스템 테이블을 파헤쳐 야합니다. 아마도 별도의 질문으로이 질문을 던지십시오.) 그런 다음 모니터링 도구가 해당 파일의 수정 시간을 볼 수 있도록 설정하십시오.

+1

두 가지 이유로 작동하지 않습니다. 이 파일은 VACUUM과 같은 시스템 프로세스와 힌트 비트 업데이트라는 프로세스에 의해 수정됩니다.이 프로세스는 실제 데이터 변경없이 테이블에 쓰고 수정 시간을 업데이트합니다. pg_class 및 pg_databsae와 같은 시스템 카탈로그의 내용을보고 테이블에 해당하는 디렉토리를 쉽게 찾을 수 있습니다. 디렉토리와 파일 이름이 일치하는 oid라는 저비용 필드가 있습니다. 그러나 실제 파일은 1GB 청크에 있으므로 데이터베이스가 커질수록 사용 된 파일 이름이 변경됩니다. –

+0

네, 위의 모든 사실입니다, 거기에 거짓말입니다. 다른 답변에 설명 된 솔루션을 수행 할 수 있다면 그렇게하지 마십시오. –

5

아마도 pg_stat_user_tables를보고 행 삽입/삭제/업데이트에 대한 통계가 테이블에 대해 변경되었는지 확인하고 싶을 것입니다. 이것이 소프트웨어 모니터링에서 이러한 종류의 활동을 확인하는 가장 쉬운 방법입니다. check_postgres

관련 문제