Postgres 데이터베이스에서 데이터베이스 연결 수를 모니터링하기 위해 Nagios 스크립트를 사용하려고 시도 했는데이 문제에 도달했습니다. 이는 현재 열린 연결로 계산되어 5 분마다 측정됩니다.
SELECT sum(numbackends) FROM pg_stat_database;
그럼에도 불구하고 이것은 수많은 단기간 연결을 그리워하는 것 같으므로 통계는 현실과 거리가 멀다.
스크립트를 수동으로 실행하려고했는데 몇 초만에 두 연결 간에도 큰 변화가있었습니다.
이 정보를 신뢰할 수있는 방법으로 얻을 수 있습니까? max (connectios)와 같은 시간 간격 동안 발생했습니다.
1
연결에 대한 시간 경과에 따른 집계 통계는 좋지만 PostgreSQL이 현재 통계를 수집하지는 않습니다. 자세한 내용은 postgresql.org/docs/current/static/monitoring-stats.html 문서 를 참조하십시오.
—
Craig Ringer
@CraigRinger 어쩌면 Postgres 또는 클라이언트가 더 오랫동안 연결을 유지하도록 구성 할 수 있으므로 측정 할 수 있습니다. 현재 설정으로 인해 postgres가 연결을 거부하기 시작한 경우가 있습니다. 5 분 내에 발생했기 때문에 모니터링이이를 감지 할 수 없었으며 5 분 이내에 경고 레벨 아래에서 위험 레벨로 올라갔습니다. 그리고 이것은 DoS 공격이 아닙니다.
—
sorin
네, 꽤 흥미로운 문제입니다.
—
Craig Ringer
PgBouncer
PostgreSQL 인스턴스 앞에 배치하는 것이 좋습니다. 연결을 거부하지 않고 너무 바쁠 때 연결을 대기시킵니다. (예, PostgreSQL이 자체적으로 수행 할 수는 없지만 멍청한 것은 아닙니다. 메일 링리스트에 대한 끝없는 토론은 내장 풀링을 참조하십시오).
로깅 연결에 대한 어떤 (사용
—
a_horse_with_no_name 12
log_connections
하고 log_disconnections
) 로그 파일에 (예를 들어 csvlog) 다음 pgBadger를 사용하거나 이와 유사한가 로그 파일에서 것을 추출?
@a_horse_with_no_name 좋은 지적입니다. 새로운 로그 항목을 읽은 클라이언트와 로그를 "꼬리"할 수 있으며, 연결 해제 및 연결을 통합하여 주어진 시간 동안 최대 연결에 대한 거의 실시간 보고서를 얻을 수 있습니다. 솔직히, 그렇게 복잡해서는 안됩니다. 차축 프로젝트 (내 작업 중 하나 axleproject.eu는 ...) 좀 더 감사를 구현하는 것입니다, 나는 그것으로이 적합 할 수있을 것
—
크레이그 벨소리