생계/PostgreSQL

[ PostgreSQL ] postgresql 로그

돌고래트레이너 2025. 7. 8. 17:16
반응형

postgresql 에서 사용하는 log 들에 대해서 알아보자.

# PostgreSQL log 종류

1) WAL (write ahead log) log

트랜잭션의 모든 변경 사항을 기록하는 로그 파일. 기본적으로 16MB 세그먼트 파일. pg_wal 디렉터리에 저장된다.

관련파라미터 : min_wal_size, max_wal_size

 

2) Archived wal log 

WAL 파일을 안전하게 보관하기 위해 아카이브한 파일들. PITR(Point-In-Time Recovery)와 백업 복구에 활용된다.

관련파라미터 :  wal_keep_size

 

3) postgresql log

쿼리 실행, 에러, 경고, audit, 접속 정보 등 서버 동작과 관련된 일반 로그. 

mysql 과 달리 slow 쿼리가 분리되어 기록되지 않고 postgresql.log 에 저장됨 (기준 : log_min_duration_statement )

postgresql.conf의 log_destination, logging_collector 등의 설정에 의해 생성 및 관리

log_statement
log_min_duration_statement
pgaudit.log

 

4) clog (commit log) 

트랜잭션의 커밋 상태를 shared memeory 영역에 저장.

이부분은 수동 관리가 불가

 

# 클라이언트에서 로그 확인하기 

postgresql.log 는 (RDS 경우) 콘솔에서도 확인이 가능하지만, log_fdw 확장을 통해 DB 접속해서 테이블처럼 조회를 할수 있다.
log_fdw 확장을 설치하면 아래 두가지 함수의 사용이 가능해진다. 

list_postgres_log_files : 로그 디렉토리의 로그파일 list 
create_foreign_table_for_log_file : 현재DB의 foreign table 생성

엔진에서 log 를 읽기 위해서는 .csv 로 로그가 만들어져야 하고, 파라미터 변경이 필요하다.

-- 파라미터 세팅
log_destination='csvlog'

-- log_fdw 확장을 설치
 CREATE EXTENSION log_fdw;

-- 로그 서버를 외부 데이터 래퍼로 생성
 CREATE SERVER log_server FOREIGN DATA WRAPPER log_fdw;

-- 로그 파일 목록에서 모든 파일을 선택
 SELECT * FROM list_postgres_log_files() ORDER BY 1;


-- 선택한 파일에 대해 단일 'log_entry' 열이 있는 테이블을 생성
SELECT create_foreign_table_for_log_file('pglog_test_dt',
     'log_server', 'postgresql.log.2025-09-30-04.csv'); 
   
SELECT log_time, message FROM my_postgres_error_log ORDER BY 1;

 
drop foreign table my_postgres_error_log;

* 아쉽지만 외부테이블 생성할때 * (와일드카드) 를 지원하지 않아 매번 새로운 로그가 생기면 새로 테이블 생성해야함.

 

반응형