New Relic PostgreSQL 온-호스트 통합 은 PostgreSQL 인스턴스에서 New Relic 플랫폼으로 인벤토리 메트릭을 수신 및 전송합니다. 여기서 핵심 성능 메트릭을 집계하고 시각화할 수 있습니다. 인스턴스, 데이터베이스 및 클러스터의 데이터는 문제의 원인을 찾는 데 도움이 됩니다.
PostgreSQL 모니터링 통합을 설치하려면 다음 단계를 실행해야 합니다.
통합을 설치하고 활성화합니다 .통합을 구성합니다 .PostgreSQL 사용자 및 권한 .데이터를 찾아 사용합니다 .선택적으로 PostgreSQL의 구성 설정 을 참조하십시오. 호환성 및 요구 사항 PostgreSQL 버전 당사의 통합 기능은 PostgreSQL v17 및 이전 버전과 호환됩니다.
지원되는 관리 서비스 지원되는 운영 체제 윈도우 리눅스 특정 Windows 및 Linux 버전의 전체 목록은 호환되는 운영 체제 표를 확인하세요.
시스템 요구 사항 통합 설치 및 활성화 PostgreSQL 통합을 설치하려면 해당 환경에 대한 지침을 따르십시오.
리눅스 설치 인프라 에이전트를 설치하고 INTEGRATION_FILE_NAME
변수를 nri-postgresql
로 바꿉니다.
다음을 실행하여 디렉토리를 통합 구성 폴더로 변경하십시오.
$ cd /etc/newrelic-infra/integrations.d
필요한 기능에 대한 READ
권한이 있는 사용자를 만듭니다 .
다음을 실행하여 샘플 구성 파일을 복사합니다.
$ sudo cp postgresql-config.yml.sample postgresql-config.yml
선호하는 편집기로 postgresql-config.yml
구성 파일을 편집합니다. 일부 구성 파일 예제를 확인하십시오. .
자동 Postgresql 구문 분석 및 전달을 활성화하려면 postgresql-log.yml.example
파일을 복사하거나 이름을 postgresql-log.yml
로 바꿉니다.에이전트를 다시 시작할 필요는 없지만 기본 위치를 사용하지 않는 경우 postgresql 로그 파일의 위치로 YML 파일을 업데이트해야 할 수 있습니다.
예를 들어:
$ sudo cp /etc/newrelic-infra/logging.d/postgresql-log.yml.example /etc/newrelic-infra/logging.d/postgresql-log.yml
기타 환경 \ Amazon ECS 설치 Kubernetes 추가 참고 사항:
Advanced: 통합은 Tarball 형식 으로도 제공되므로 헤드셋 매니저 외부에 설치할 수 있습니다.On-host integrations do not automatically update. 최상의 결과를 얻으 려면 통합 패키지 및 인프라 에이전트 를 정기적으로 업데이트하십시오.통합 구성 설치 방법에 따라 통합을 구성하는 몇 가지 방법이 있습니다.
를 통해 활성화된 경우 Kubernetes, Kubernetes에서 실행 중인 모니터링 서비스 참조. 를 통해 활성화된 경우 Amazon ECS, ECS에서 실행되는 모니터링 서비스 참조 . 호스트에 설치된 경우 통합의 YAML 구성 파일 postgresql-config.yml
에서 구성을 편집합니다. 통합의 YAML 형식 구성은 필수 로그인 자격 증명을 배치하고 데이터 수집 방법을 구성할 수 있는 곳입니다. 변경하는 옵션은 설정 및 기본 설정에 따라 다릅니다. 구성 파일에는 interval
, timeout
, inventory_source
와 같은 모든 통합에 적용할 수 있는 공통 설정이 있습니다. 이러한 공통 설정에 대한 모든 내용을 보려면 구성 형식 문서를 참조하십시오. 중요 레거시 구성 또는 정의 파일을 계속 사용하는 경우 표준 구성 형식 을 확인하십시오.
PostgreSQL과 관련된 특정 설정은 구성 파일의 env
섹션을 사용하여 정의됩니다. 이러한 설정은 PostgreSQL 인스턴스에 대한 연결과 기타 보안 설정 및 기능을 제어합니다. 유효한 설정 목록은 이 문서의 다음 섹션에 설명되어 있습니다.
PostgreSQL 사용자 및 권한 다음에 대한 SELECT
권한이 있는 사용자 생성:
pg_stat_database
pg_stat_database_conflicts
pg_stat_bgwriter
PostgreSQL 통합을 위한 사용자를 생성하려면:
CREATE USER new_relic WITH PASSWORD MY_PASSWORD ;
GRANT SELECT ON pg_stat_database TO new_relic ;
GRANT SELECT ON pg_stat_database_conflicts TO new_relic ;
GRANT SELECT ON pg_stat_bgwriter TO new_relic ;
이렇게 하면 통합에서 PostgreSQL 인스턴스와 관련된 전역 메트릭을 수집할 수 있습니다.
테이블 및 인덱스 관련 측정항목(예: 테이블 크기 및 인덱스 크기)도 가져오려면 통합에서 사용하는 PostgreSQL 역할( new_relic
)에도 측정항목을 수집할 테이블에 대한 SELECT
권한이 필요합니다. 에서. 예를 들어, 통합이 데이터베이스(공개 schema
에 있음)에 있는 모든 테이블 및 인덱스에서 메트릭을 수집할 수 있도록 하려면 다음을 사용합니다.
GRANT SELECT ON ALL TABLES IN SCHEMA public TO new_relic ;
PostgreSQL 사용자 지정 쿼리 구성 파일에서도 쿼리 수준 측정항목을 얻으려면 통합에서 사용하는 PostgreSQL 역할( new_relic
)을 ( pg_read_all_stats
) 역할에 추가해야 합니다. 이는 사용자가 ( pg_stat_statements
) 확장을 활용하기 때문입니다.
GRANT pg_read_all_stats TO new_relic ;
pg_stat_statements
확장을 활성화하려면 쿼리 프롬프트에서 수동으로 생성해야 할 수 있습니다.
CREATE EXTENSION pg_stat_statements ;
postgresql-config.yml 샘플 파일 PostgreSQL 구성 모음 파일 JSON 배열: 해당 데이터베이스에 속한 테이블 및 인덱스를 포함하여 모든 관련 메트릭을 수집할 데이터베이스 이름 목록으로 해석됩니다.
예를 들어:
collection_list : '["postgres"]'
JSON 개체: 개체에 지정된 엔터티만 수집되며 자동 검색은 수행되지 않습니다. JSON 레벨은 database name -> schema name -> table name -> index name
입니다.
예를 들어:
collection_list : '{"postgres":{"public":{"pg_table1":["pg_index1","pg_index2"],"pg_table2":[]}}}'
ALL
: 발견된 모든 데이터베이스, 스키마, 테이블 및 인덱스에 대한 메트릭을 수집합니다.
예를 들어:
HOSTNAME : psql - sample.localnet
COLLECT_DB_LOCK_METRICS : false
COLLECTION_LIST : '{"postgres":{"public":{"pg_table1":["pg_index1","pg_index2"],"pg_table2":[]}}}'
inventory_source : config/postgresql
PostgreSQL Azure Flexible 및 AWS RDS/Aurora 구성 파일 Azure/AWS SSL 사용 옵션: Azure Flexible 관리형 데이터베이스 제품을 연결하려면 SSL이 필요합니다. MySQL 버전이 5.7 이상이고 Aurora 파라미터 그룹에서 require_secure_transport가 ON으로 설정된 경우 AWS RDS/Aurora에 SSL이 필요할 수 있습니다. SSL 요구 사항을 수용하려면 postgresql-config.yml의 이러한 설정을 true
으로 설정해야 합니다.
예를 들어:
TRUST_SERVER_CERTIFICATE : "true"
Azure/AWS SSL 비활성화 옵션: 위의 설정 외에도 다음 SSL 설정을 주석 처리하거나 구성에서 제거해야 합니다. 이는 위의 서버 인증서를 신뢰하는 구성 때문입니다.
예를 들어:
요약: 이러한 설정이 완료되면 전체 Azure/AWS 구성 파일은 아래와 같아야 합니다. 참고: 인프라 에이전트 및 Postgresql 통합은 데이터베이스 인스턴스에 대한 네트워크 액세스 권한이 있는 호스트에 설치해야 합니다.
예를 들어:
HOSTNAME : AWS - or - Azure - instance - name
COLLECT_DB_LOCK_METRICS : false
TRUST_SERVER_CERTIFICATE : "true"
inventory_source : config/postgresql
PostgreSQL SSL 구성 모음 파일 HOSTNAME : psql - sample.localnet
COLLECT_DB_LOCK_METRICS : false
COLLECTION_LIST : '["postgres"]'
TRUST_SERVER_CERTIFICATE : false
SSL_ROOT_CERT_LOCATION : /etc/newrelic - infra/root_cert.crt
SSL_CERT_LOCATION : /etc/newrelic - infra/postgresql.crt
SSL_KEY_LOCATION : /etc/newrelic - infra/postgresql.key
inventory_source : config/postgresql
PostgreSQL 사용자 지정 쿼리 HOSTNAME : psql - sample.localnet
COLLECT_DB_LOCK_METRICS : false
'rows_inserted' as "metric_name" ,
'delta' as "metric_type" ,
sd.tup_inserted as "metric_value" ,
sd.datid as "database_id"
from pg_stat_database sd;
inventory_source : config/postgresql
PostgreSQL 사용자 지정 쿼리 구성 파일 하나 이상의 사용자 정의 SQL이 있는 추가 YAML 구성 파일을 정의할 수 있으며 통합에는 CUSTOM_METRICS_CONFIG 매개변수의 파일 경로가 필요합니다.
호스트 내 통합 구성의 일반 구조에 대한 자세한 내용은 구성 을 참조하십시오.
통합을 위한 구성 옵션 데이터를 찾고 사용하는 방법에 대한 자세한 내용은 PostgreSQL의 구성 설정 을 참조하십시오.
데이터 찾기 및 사용 이 서비스의 데이터는 통합 대시보드 에 보고됩니다.
메트릭은 다음 이벤트 유형 에 연결됩니다.
문제 해결을 위해 이 데이터를 쿼리 하거나 사용자 지정 차트 및 대시보드를 만들 수 있습니다.
데이터를 찾고 사용하는 방법에 대한 자세한 내용은 통합 데이터를 이해 하는 방법을 참조하세요.
통합으로 수집된 측정항목 PostgreSQL 통합은 다음 지표를 수집합니다. 일부 측정항목 이름은 db.
또는 index.
과 같이 카테고리 표시기와 마침표가 접두사로 붙습니다.
PostgresqlDatabaseSample 측정항목 PostgreSQLDatabaseSample 속성
설명
db.connections
현재 이 데이터베이스에 연결된 백엔드 수입니다.
db.maxconnections
데이터베이스 서버에 대한 최대 동시 연결 수입니다.
db.commitsPerSecond
초당 커밋된 트랜잭션입니다.
db.rollbacksPerSecond
초당 롤백된 트랜잭션입니다.
db.readsPerSecond
초당 이 데이터베이스에서 읽은 디스크 블록 수입니다.
db.bufferHitsPerSecond
디스크 블록이 버퍼 캐시에서 이미 발견되어 읽기가 필요하지 않은 횟수입니다. 여기에는 운영 체제의 파일 시스템 캐시가 아닌 PostgreSQL 버퍼 캐시의 적중만 포함됩니다.
db.rowsReturnedPerSecond
초당 쿼리에서 반환된 행입니다.
db.rowsFetchedPerSecond
초당 쿼리에서 가져온 행입니다.
db.rowsInsertedPerSecond
초당 삽입된 행입니다.
db.rowsUpdatedPerSecond
초당 업데이트된 행.
db.rowsDeletedPerSecond
초당 삭제된 행입니다.
db.conflicts.tablespacePerSecond
삭제된 테이블스페이스로 인해 취소된 이 데이터베이스의 쿼리 수입니다.
db.conflicts.locksPerSecond
잠금 시간 초과로 인해 취소된 이 데이터베이스의 쿼리 수입니다.
db.conflicts.snapshotPerSecond
이전 스냅샷으로 인해 취소된 이 데이터베이스의 쿼리 수입니다.
db.conflicts.bufferpinPerSecond
고정된 버퍼로 인해 취소된 이 데이터베이스의 쿼리 수입니다.
db.conflicts.deadlockPerSecond
교착 상태로 인해 취소된 이 데이터베이스의 쿼리 수입니다.
db.tempFilesCreatedPerSecond
이 데이터베이스의 쿼리에 의해 생성된 임시 파일의 수입니다. 임시 파일이 생성된 이유(예: 정렬 또는 해싱) 및 log_temp_files
설정에 관계없이 모든 임시 파일이 계산됩니다.
db.tempWrittenInBytesPerSecond
이 데이터베이스의 쿼리에 의해 임시 파일에 작성된 총 데이터 양입니다. 임시 파일이 생성된 이유와 log_temp_files
설정에 관계없이 모든 임시 파일이 계산됩니다.
db.deadlocksPerSecond
이 데이터베이스에서 감지된 교착 상태의 수입니다.
db.readTimeInMillisecondsPerSecond
이 데이터베이스의 백엔드에서 데이터 파일 블록을 읽는 데 소요된 시간(밀리초)입니다.
db.writeTimeInMillisecondsPerSecond
이 데이터베이스의 백엔드에서 데이터 파일 블록을 쓰는 데 소요된 시간(밀리초)입니다.
PostgresqlIndexSample 측정항목 PostgreSQLIndexSample 속성
설명
index.sizeInBytes
인덱스의 크기입니다.
index.rowsReadPerSecond
이 인덱스에 대한 스캔에서 반환된 인덱스 항목의 수입니다.
index.rowsFetchedPerSecond
이 인덱스에 대한 스캔에서 가져온 인덱스 항목의 수입니다.
PostgresqlInstanceSample 측정항목 팁 PostgreSQL v17에서는 소스 테이블을 더 잘 반영하도록 일부 메트릭의 이름을 변경했습니다. 업데이트된 이름은 이전 버전 이름 아래에 들여쓰기로 표시되어 있습니다.
PostgreSQLInstanceSample 속성
설명
bgwriter.checkpointsScheduledPerSecond
↳ checkpointer.checkpointsScheduledPerSecond
수행된 예약된 체크포인트의 수입니다.
bgwriter.checkpointsRequestedPerSecond
↳ checkpointer.checkpointsRequestedPerSecond
수행된 요청된 체크포인트의 수입니다.
bgwriter.buffersWrittenForCheckpointsPerSecond
↳ checkpointer.buffersWrittenForCheckpointsPerSecond
체크포인트 동안 작성된 버퍼 수입니다.
bgwriter.buffersWrittenByBackgroundWriterPerSecond
백그라운드 작성기가 작성한 버퍼 수입니다.
bgwriter.backgroundWriterStopsPerSecond
배경 기록기가 너무 많은 버퍼를 기록했기 때문에 청소 스캔을 중지한 횟수입니다.
bgwriter.buffersWrittenByBackendPerSecond
↳ io.buffersWrittenByBackendPerSecond
백엔드에서 직접 작성한 버퍼 수입니다.
bgwriter.buffersAllocatedPerSecond
할당된 버퍼 수입니다.
bgwriter.backendFsyncCallsPerSecond
↳ io.backendFsyncCallsPerSecond
백엔드가 자체 fsync
호출을 실행해야 하는 횟수입니다. 일반적으로 백엔드 작성기는 백엔드가 자체 쓰기를 수행하는 경우에도 이를 처리합니다.
bgwriter.checkpointWriteTimeInMillisecondsPerSecond
↳ checkpointer.checkpointWriteTimeInMillisecondsPerSecond
파일이 디스크에 기록되는 체크포인트 처리 부분에서 소요된 총 시간(밀리초)입니다.
bgwriter.checkpointSyncTimeInMillisecondsPerSecond
↳ checkpointer.checkpointSyncTimeInMillisecondsPerSecond
파일이 디스크에 동기화되는 검사점 처리 부분에서 소요된 총 시간(밀리초)입니다.
PostgresqlTableSample 측정항목 PostgreSQLTableSample 속성
설명
table.totalSizeInBytes
인덱스 및 TOAST 데이터를 포함하여 테이블에서 사용하는 총 디스크 공간입니다.
table.indexSizeInBytes
지정된 테이블에 연결된 인덱스가 사용하는 총 디스크 공간입니다.
table.liveRows
라이브 행 수입니다.
table.deadRows
죽은 행의 수입니다.
table.indexBlocksReadPerSecond
이 테이블의 모든 인덱스에서 읽은 디스크 블록 수입니다.
table.indexBlocksHitPerSecond
이 테이블의 모든 인덱스에 있는 버퍼 히트 수입니다.
table.indexToastBlocksReadPerSecond
이 테이블의 TOAST 테이블 인덱스에서 읽은 디스크 블록 수입니다.
table.indexToastBlocksHitPerSecond
이 테이블의 TOAST 테이블 인덱스에 있는 버퍼 히트 수입니다.
table.lastVacuum
테이블의 마지막 진공 시간입니다.
table.lastAutoVacuum
테이블의 마지막 자동 진공 시간입니다.
table.lastAnalyze
테이블에 대한 마지막 분석 시간입니다.
table.lastAutoAnalyze
테이블에 대한 마지막 자동 분석 시간입니다.
table.sequentialScansPerSecond
초당 이 테이블에서 시작된 순차 스캔 수입니다.
table.sequentialScanRowsFetchedPerSecond
초당 순차 스캔으로 가져온 라이브 행 수입니다.
table.indexScansPerSecond
이 테이블에서 시작된 인덱스 스캔의 수입니다.
table.indexScanRowsFetchedPerSecon
인덱스 스캔에서 가져온 라이브 행 수입니다.
table.rowsInsertedPerSecond
초당 삽입된 행입니다.
table.rowsUpdatedPerSecond
초당 업데이트된 행.
table.rowsDeletedPerSecond
초당 삭제된 행입니다.
table.bloatSizeInBytes
바이트 단위의 팽창 크기입니다.
table.dataSizeInBytes
테이블의 기본 포크에서 사용하는 디스크 간격의 크기입니다.
table.bloatRatio
부풀려진 테이블 데이터 크기의 비율입니다.
PgBouncerSample 측정항목 PgBouncerSample 속성
설명
pgbouncer.stats.transactionsPerSecond
거래율.
pgbouncer.stats.queriesPerSecond
쿼리 비율입니다.
pgbouncer.stats.bytesInPerSecond
수신된 총 네트워크 트래픽입니다.
pgbouncer.stats.bytesOutPerSecond
전송된 총 네트워크 트래픽입니다.
pgbouncer.stats.totalTransactionDurationInMillisecondsPerSecond
거래에서 pgbouncer
이(가) 소비한 시간입니다.
pgbouncer.stats.totalQueryDurationInMillisecondsPerSecond
pgbouncer
에서 PostgreSQL을 적극적으로 쿼리하는 데 소요된 시간입니다.
pgbouncer.stats.avgTransactionCount
마지막 통계 기간의 초당 평균 트랜잭션 수입니다.
pgbouncer.stats.avgTransactionDurationInMilliseconds
평균 거래 기간.
pgbouncer.stats.avgQueryCount
마지막 통계 기간의 초당 평균 쿼리 수입니다.
pgbouncer.stats.avgBytesIn
클라이언트 네트워크 트래픽이 수신되었습니다.
pgbouncer.stats.avgBytesOut
클라이언트 네트워크 트래픽이 전송되었습니다.
pgbouncer.stats.avgQueryDurationInMilliseconds
평균 쿼리 기간입니다.
pgbouncer.pools.clientConnectionsActive
클라이언트 연결은 서버 연결에 연결되고 쿼리를 처리할 수 있습니다.
pgbouncer.pools.clientConnectionsWaiting
서버 연결을 기다리는 클라이언트 연결.
pgbouncer.pools.clientConnectionsWaitingCancelReq
아직 쿼리 취소를 서버에 전달하지 않은 클라이언트 연결입니다.
pgbouncer.pools.clientConnectionsActiveCancelReq
쿼리 취소를 서버에 전달하고 서버 응답을 기다리는 클라이언트 연결입니다.
pgbouncer.pools.serverConnectionsActiveCancel
현재 취소 요청을 전달 중인 서버 연결입니다.
pgbouncer.pools.serverConnectionsBeingCancel
일반적으로 유휴 상태가 될 수 있지만 이 서버에서 쿼리를 취소하기 위해 전송된 모든 진행 중인 취소 요청이 완료될 때까지 대기 중인 서버입니다.
pgbouncer.pools.serverConnectionsActive
클라이언트 연결에 연결된 서버 연결.
pgbouncer.pools.serverConnectionsIdle
서버 연결이 유휴 상태이며 클라이언트 쿼리에 사용할 준비가 되었습니다.
pgbouncer.pools.serverConnectionsUsed
서버 연결이 server_check_delay
이상 유휴 상태이며 server_check_query
이(가) 필요합니다.
pgbouncer.pools.serverConnectionsTested
현재 server_reset_query
또는 server_check_query
을(를) 실행 중인 서버 연결.
pgbouncer.pools.serverConnectionsLogin
현재 로그인 중인 서버 연결입니다.
pgbouncer.pools.maxwaitInMilliseconds
서비스되지 않은 가장 오래된 클라이언트 연결의 기간입니다.