Prometheus TSDB, 데이터 압축의 비밀: XOR 인코딩!

by DD
5개월 전
조회수 7

Prometheus는 시스템 모니터링을 위한 강력한 오픈소스 솔루션으로, 메트릭 수집, 저장, 알림 기능을 제공함

TSDB(Time Series Database)는 Prometheus의 핵심으로, XOR 인코딩을 활용하여 데이터 저장 효율성을 극대화함

커뮤니티에서는 Prometheus의 성능과 확장성에 대한 긍정적인 평가와 함께, Out-of-Order 샘플 처리 기능에 대한 관심이 높음

Prometheus TSDB 아키텍처

Prometheus는 Pull-based 방식으로 메트릭을 수집하며, Scraping 주기에 따라 데이터를 TSDB에 저장한다. 구체적으로, /metrics 엔드포인트를 통해 메트릭을 가져오고, Chunk 파일에 시계열 데이터를 저장한다. 따라서 WAL(Write-Ahead Log)을 사용하여 데이터 손실을 방지하고, Gorilla XOR 인코딩을 통해 데이터 압축을 수행하여 저장 공간을 절약한다.

XOR 인코딩의 원리 및 장단점

Gorilla XOR 인코딩은 시계열 데이터의 변동폭이 작다는 점을 활용하여 데이터 압축을 수행한다. 구체적으로, 이전 값과의 XOR 연산 결과를 저장하여, 데이터 중복을 최소화한다. 반면, 첫 번째 값은 전체 비트를 저장해야 하며, 데이터 왜곡이 발생할 경우 압축 효율이 떨어진다는 단점이 존재한다. 따라서 데이터 특성에 맞는 압축 방식을 선택하는 것이 중요하다.

Out-of-Order 샘플 처리 및 실전 적용

Prometheus v2.39부터 Out-of-Order(OOO) 샘플 처리를 지원하여, 과거 데이터를 TSDB에 적재할 수 있다. 구체적으로, OOO 샘플은 별도의 HeadChunk에 저장되며, 쿼리 시 일반 샘플과 병합된다. 따라서 데이터 로딩 지연이 발생하거나, IoT 기기에서 데이터를 수집하는 경우 유용하게 활용할 수 있다. 결과적으로 모니터링 시스템의 유연성을 높일 수 있다.

Exploring Prometheus Internals: TSDB and XOR Encoding