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/