stat_pg는 StatsD에서 영감을 받은 지표 수집 기능을 PostgreSQL 확장으로 제공하며, 제작자는 초당 11억 4,700만 건의 지속 저장 처리량을 내세운다. 다만 이 수치는 클라이언트 측 사전 집계 등을 적용한 특정 테스트 결과이며, 프로젝트는 현재 초기 알파 단계다.
이 확장은 UDP 기본 포트 8125로 지표를 받고, 초·분·시·일 단위 테이블에 집계 데이터를 저장한다. 지표와 애플리케이션 데이터를 PostgreSQL에서 SQL 조인할 수 있도록 설계됐다. 제작자는 별도 시계열 데이터베이스나 수집 에이전트를 운영하지 않아도 된다고 설명하지만, 수집량이 많으면 애플리케이션 쿼리와 CPU·메모리 대역폭을 공유할 수 있다. 실제 읽기·쓰기 부하를 시험하고 트랜잭션 지연이 커지면 별도 PostgreSQL 인스턴스에서 운영하라고 안내한다.
성능 수치는 2026년형 MacBook Pro의 M5 Max에서 Linux Docker 컨테이너를 실행해 측정했다. 초당 11억 4,700만 건의 지속 저장 결과는 64개 송신 스레드의 클라이언트 측 사전 집계와 UDP 패킷 묶음 전송을 사용했다. 초당 13.03GB의 네트워크 처리량은 eBPF XDP를 이용한 로컬 컨테이너 가상 네트워크 측정치로, 외부 네트워크에서는 물리 네트워크 장비의 속도에 제한된다. eBPF 테스트에서 2조 1,500억 건의 지표가 데이터베이스 테이블 디스크 공간 1.16MB를 사용했다는 수치도 제시하지만, 저장 효율은 지표 종류에 따라 달라질 수 있다.
운영 전 보안 조건을 확인해야 한다. 수집 포트는 인증과 암호화를 지원하지 않으며, 8125에 UDP 패킷을 보낼 수 있는 장치는 지표 값을 증가시킬 수 있다. 제작자는 공개 인터넷에 데이터베이스를 노출하지 말라고 경고하며, 사설 네트워크에서도 추가 노출에 유의해야 한다고 밝혔다. 인증·암호화 기능은 현재 지원되지 않으며 향후 추가될 가능성만 언급됐다.
설정 예시와 사용 방법은 프로젝트 문서에서 확인할 수 있다. 소스 코드는 GitHub 저장소에 공개돼 있으며, 제작자는 최적화 과정을 설명한 글도 제공한다. 측정 조건은 벤치마크 안내에 정리돼 있다.
shared_preload_libraries = 'stat_pg' stat_pg.workers = 4 stat_pg.port = 8125 CREATE EXTENSION stat_pg; $ echo "api.search.latency:42|ms" | nc -u -w0 127.0.0.1 8125 $ echo "user.signup.count:1|c" | nc -u -w0 127.0.0.1 8125 SELECT m.name, s.at, s.value FROM stat_pg_secs s JOIN stat_pg_metrics m ON m.id = s.metric_id ORDER BY s.at DESC;
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요