01 · 시계열 데이터와 VictoriaMetrics
시계열 데이터가 무엇이고 왜 "대용량"이 별도의 문제가 되는지, 그리고 그 문제를 푸는 도구로 VictoriaMetrics(이하 VM)가 어디에 서 있는지 정리한다. VM의 내부 컴포넌트 구조는 02 아키텍처에서 이어 다룬다.
시계열 데이터란
TSDB(Time Series Database, 시계열 데이터베이스)는 한 줄로 줄이면 시간 순서대로 기록된 숫자 값들의 연속을 다루는 데이터베이스다. 9시에 36.5도, 10시에 36.7도, 11시에 36.6도처럼 시간 축을 따라 숫자가 하나씩 찍히는 체온 그래프가 가장 단순한 형태의 시계열이다. 시간 순서대로 나열된 숫자이기 때문에 2차원 테이블로도, 그래프로도 자연스럽게 표현된다.
우리가 다루는 모니터링 지표도 결국 똑같은 구조다. CPU 사용률, 요청 수, 응답 시간 전부 "어떤 시점에 어떤 숫자가 찍혔는가" 로 환원된다. 다만 그 숫자가 어떻게 찍히느냐에 따라 지표 타입이 4종류로 나뉜다.
지표 4타입
Prometheus 진영의 표준 분류이기도 하다.
| 타입 | 특징 | 예시 |
|---|---|---|
| Counter | 계속 증가만 하는 누적 값(단조 증가) | http_requests_total 같은 누적 요청 수 (0 → 1,102) |
| Histogram | 버킷 단위로 나눈 누적 카운터 | 0.05초 이하 응답 몇 개, 0.1초 이하 몇 개 (서버 쪽에서 버킷으로 절단) |
| Gauge | 위아래로 자유롭게 변동하는 값 | 메모리 사용률 48% → 62% → 55% |
| Summary | 클라이언트가 분위수를 미리 계산해 저장 | p50, p90, p99 |
여기서 미리 붙잡아 둘 직관: Counter처럼 단조 증가하는 값은 압축이 극단적으로 잘 된다. 이 사실이 저장·압축을 설명할 때 계속 되돌아온다. Counter/Gauge를 어떻게 판별하고 어떻게 압축하는지는 04 저장과 압축에서 다룬다.
왜 "대용량"이 별도의 문제인가
질문을 하나 던져 보자. 이 모든 숫자를 시간 순서대로 그대로 저장해야 할까? 1초에 한 번씩만 찍어도 하루에 86,400개고, 지표가 수만 개라면 하루치만 해도 어마어마한 양이 된다. 그래서 TSDB의 핵심 과제는 제한된 자원으로 이 수많은 데이터를 얼마나 잘 압축하느냐가 된다.
"대용량 시계열"이라는 말에는 두 축이 있다. 시계열 개수가 많아지는 것과, 시간이 흐를수록 데이터가 쌓여 보관 기간이 길어지는 것이다. 규모의 감을 잡기 위해 대략의 구간을 나눠 보면 다음과 같다.
| 규모 | 시계열 개수 | 상황 |
|---|---|---|
| 레거시 | 약 100만 개 이하 | 기존 모니터링 시스템이 다루던 전통적 규모 |
| 분산 시스템 | 수백만 개 | 분산 시스템 + 인기 플랫폼 위 커스텀 애플리케이션 지표까지 수집 |
| 대용량 | 수천만 ~ 수십억 개 | 쿠버네티스 등 클라우드 도구 도입으로 카디널리티 폭증 |
수백만 개까지는 Prometheus 하나만 설치해도 웬만큼 해결된다. 문제는 그 위다. 수천만 개를 넘어서는 순간부터는 기존 모니터링 시스템과 단일 시계열 DB로는 감당이 안 돼 별도의 솔루션이 필요하다 — 이것이 "대용량"을 굳이 구분하는 이유다. 개수가 왜 이렇게까지 폭증하는지, 즉 카디널리티 문제는 06 카디널리티에서 본격적으로 다룬다.
TSDB의 히스토리
대용량 시계열을 다루는 도구들이 어떻게 등장했는지를 짚으면 VM의 위치가 선명해진다.
- 2012 · Prometheus 등장. 모니터링 업계에서 사실상 디팩토 표준에 가까운 도구다. 앞서 본 지표 4타입 분류도 Prometheus 진영에서 왔다.
- 2015 · Gorilla 압축 알고리즘. Facebook이 방대한 서버를 모니터링하면서 시계열 데이터를 효율적으로 처리하기 위해 만든 특화 압축 기술이다. "시계열 데이터를 어떻게 효율적으로 다룰 것인가"라는 아이디어가 이때부터 여러 모니터링 도구로 퍼졌다. Gorilla 계열 압축(Delta / Delta-of-Delta)의 실제 동작은 04 저장과 압축에서 다룬다.
- 그 위의 스케일 문제. 수천만 개를 넘는 대용량은 Prometheus 하나만으로는 풀리지 않는다. 여기서 갈래가 나뉜다. 널리 쓰이는 것이 Thanos와 Cortex — 스케일러블한 Prometheus 확장 솔루션이다. 반면 네이버 검색 SRE는 이들과 완전히 다른 계열인 VM을 택했다.
VictoriaMetrics의 위치
VM은 대용량 시계열을 정면으로 겨냥한 TSDB다.
- Apache 2.0 라이선스의 오픈소스 TSDB이며 Prometheus와 호환된다. 즉 PromQL을 그대로 쓸 수 있고, Prometheus가 쓰는
remote_write프로토콜도 그대로 받아들인다. 기존 Prometheus 생태계를 버리지 않고 백엔드만 갈아 끼울 수 있다는 뜻이다. - 자체 벤치마크 기준으로 메모리 5배, 스토리지 7배 더 효율적이라고 주장한다. 이 효율의 비결이 앞서 본 Time Series/Sample 분리와 Gorilla 계열 압축이며, 실제 운영에서 데이터포인트당 1바이트 미만까지 줄어드는 수치로 확인된다(상세는 04 저장과 압축).
- 왜 VM인가. Thanos·Cortex 대비 의존성이 적고 아키텍처가 단순해 운영이 편하며, 압축 효율과 성능이 앞선다. 이 때문에 대규모 모니터링 시스템의 백엔드로 선택된다. 네이버 검색 SRE도 하루 수십억 건의 검색 요청, 수만 대의 서버, 수백 개 서비스를 모니터링하는 환경에서 같은 이유로 VM을 택했다.
VM이 이 효율을 어떻게 내는지 — 4개 컴포넌트로 데이터가 흐르는 구조, LSM 트리, IndexDB/DataDB 분리 — 는 02 아키텍처에서 이어진다.
출처
- Inside VictoriaMetrics (강민구, NAVER · 40:37) —
01:09~04:35TSDB 정의, 지표 4타입, 압축 과제, VM 위치(Apache 2.0 / Prometheus 호환 / 메모리 5배·스토리지 7배). https://d2.naver.com/helloworld/9290861 - VictoriaMetrics: 시계열 데이터 대혼돈의 멀티버스 (DEVIEW 2023, 손주식·이선규 · 33:50) —
01:54~05:47시계열 정의, 대용량의 정의(100만→수백만→수천만·수십억), TSDB 히스토리(Prometheus 2012 / Gorilla 2015 / Thanos·Cortex vs VM 선택). https://youtu.be/OUyXPgVcdw4 - 골격:
chapter9/victoriametrics.md§1.