TSDB Concepts

 

prometheus 같은 경우 데이터를 인메모리 버퍼에 들고 있다가 32KB 가 넘어갈 경우 현재 페이지를 WAL 파일에 Flush 함. 1차적으로 데이터를 메모리에 저장하고 일정 크기에 따라 WAL 파일에 백업하는 구조임. 이때 백업된 in-memory buffer의 데이터들이 존재하는 공간을 head block이라 함.
💡
메모리 페이징 프로세스를 일정 크기인 Page로 잘라서 메모리에 적재하는 방식

 

Chunk
💡
2h 동안 120개의 smaple(time series data) 를 담을 수 있는 block을 이루는 기본 단위 처음에 memory 상의 head block 에 생성됨, scrape time 이 15s라면 1개의 chunk에는 30 분만에 120개의 sample data로 채워짐, 새로운 Chunk를 생성 하고 이전 Chunk는 Memory Map Chunk로 Disk에 저장되는 구조임.

 

WAL
💡
Head Block의 데이터가 백업되는 WAL 파일은 최대 128MB를 차지할 수 있음 128MB가 넘을 경우 새로운 WAL 파일이 생성됨 이 WAL 파일은 인메모리 데이터의 손실을 방지하기 위한 것인데, 프로메테우스가 비정상적으로 종료되는 crash가 발생할 경우 현재 존재하는 WAL을 다시 읽어 들여 원래의 데이터를 복구하는 replay 작업을 수행함.

 

Storage Sizing
💡
스토리지 크기

 

 

참조:

https://ganeshvernekar.com/blog/prometheus-tsdb-mmapping-head-chunks-from-disk/

https://velog.io/@zihs0822/Prometheus의-Storage-Architecture

https://bourbonkk.tistory.com/86

← back