Prometheus의 저장소에 대해 알아보자.
Prometheus는 사용자 지정 형식으로 데이터를 저장한다. 수집된 샘플은 2시간 단위의 블록으로 그룹화되는데, 각 2시간 블록은 해당 기간의 모든 시계열 샘플이 포함된 chunks 하위 디렉터리, 메타데이터 파일, 인덱스 파일(chunks directory의 시계열에 대한 metric name들과 labels을 색인하는 파일)이 포함된 디렉터리로 구성된다.
Chunks directory의 샘플은 기본적으로 각각 최대 512MB의 하나 이상의 segment file로 함께 그룹화된다. API를 통해 시계열을 삭제하면 chunk segments에서 데이터를 즉시 삭제하는 대신 tombstone files에 저장된다.
Incoming sample들에 대한 현재 블록은 메모리에 보관되며 완전히 유지되지는 않는다. Prometheus 서버가 재시작될 때 재생할 수 있는 미리 쓰기 로그(write-ahead log, WAL)를 통해 충돌로부터 보호한다. WAL 파일은 128MB segments 단위로 wal 디렉터리에 저장된다. 이 파일엔 아직 압축되지 않은
Prometheus sever의 데이터 디렉터리는 다음과 같이 생겼다.
./data
├── 01BKGV7JBM69T2G1BGBGM6KB12
│ └── meta.json
├── 01BKGTZQ1SYQJTR4PB43C8PD98
│ ├── chunks
│ │ └── 000001
│ ├── tombstones
│ ├── index
│ └── meta.json
├── 01BKGTZQ1HHWHV8FBJXW1Y3W0K
│ └── meta.json
├── 01BKGV7JC0RY8A6MACW02A2PJD
│ ├── chunks
│ │ └── 000001
│ ├── tombstones
│ ├── index
│ └── meta.json
├── chunks_head
│ └── 000001
└── wal
├── 000000002
└── checkpoint.00000001
└── 00000000