최근 Grafana Mimir 3.0으로의 마이그레이션을 완료했으며, 결과는 놀라웠습니다. 실제 리소스 지표가 크게 개선되었고, 인프라 전반에 걸쳐 향상된 성능을 즉시 체감할 수 있었습니다.
현재 9개의 mimir-ingester를 운영 중이며, 마이그레이션 이후 놀라운 변화가 포착되었습니다.

[Mimir] Ingester CPU — Mimir 3.0 마이그레이션 전후 비교

[Mimir] Ingester Memory — Mimir 3.0 마이그레이션 전후 비교
파드당 평균 메모리 사용량이 6~7 GiB에 육박했었는데, Mimir 3.0으로 마이그레이션 후 평균 사용량이 약 2 GiB로 대폭 감소하였습니다.
그렇다면 그 부하는 어디로 갔을까요? Mimir 3.0에서는 근본적인 아키텍처 변경이 이루어졌습니다.
공식 릴리스 블로그에서 확인할 수 있습니다:
https://grafana.com/blog/grafana-mimir-3-0-release-all-the-latest-updates/
쓰기 경로가 Distributor → Kafka → Ingester 파이프라인으로 변경되었습니다. 새로운 mimir-kafka 컴포넌트가 추가되어, 기존에 ingester가 담당하던 버퍼링 역할을 분리하였습니다.

[Mimir] Kafka Memory 사용량
Kafka의 메모리 사용량도 안정적입니다. logRetentionHours 값을 적절하게 조정하면 리소스 소비를 충분히 제어할 수 있습니다.
Distributor도 한번 살펴볼까요?

[Mimir] Distributor CPU — Mimir 3.0 마이그레이션 전후 비교

[Mimir] Distributor Memory — Mimir 3.0 마이그레이션 전후 비교
기존에는 HA Tracker를 사용하기 위해 반드시 Consul 또는 etcd 중 하나를 KV Store로 선택해야 했습니다. EKS와 같은 환경에서는 사실상 Consul이 유일한 선택지였습니다.
하지만 Consul에는 잘 알려진 다양한 운영 이슈가 존재합니다:
약 3년간 Consul을 운영하면서 위와 같은 이슈에 반복적으로 직면했으며, 문제 발생 시 항상 수동으로 조치해주어야 했습니다.
여기에 더해, Consul을 처음 Helm으로 설치할 때 Connect Injector를 명시적으로 비활성화하지 않으면 함께 설치됩니다. Injector의 메모리 사용량 증가에 기민하게 대응하지 못해 OOMKilled 등의 이유로 파드가 패닉 상태에 빠졌을 경우, Injector로 인해 ReplicaSet의 replicas 값이 정상적으로 변동되지 않는 문제를 야기할 수 있습니다. 사실상 스케일링이 멈춰버리는 상황이 발생하게 됩니다.
Mimir 3.0에서는 더 이상 Consul을 사용하지 않아도 됩니다.
HA 중복 제거를 위한 KV Store가 기본 설정으로 memberlist로 대체되면서, Consul 의존성이 완전히 제거되었습니다. 이 하나의 개선점만으로도 Mimir 3.0 업그레이드의 가치는 충분합니다.
때마침 Consul의 raft.db 손상 문제가 발생하였고, 이를 계기로 즉시 마이그레이션을 진행하였습니다. 마이그레이션은 해당 문제를 해결함과 동시에 엄청난 퍼포먼스 개선까지 가져왔습니다.
리소스 요구량의 대폭 감소는 곧 인프라 비용 절감으로 직결됩니다.
비용 영향을 보다 직관적으로 파악하기 위해, 관측된 감소 비율(CPU ~46% 감소, 메모리 ~77% 감소)을 100 vCPU 워크로드에 투영하고, AWS m7g 인스턴스(us-east-1, On-Demand 가격 기준)에 매핑하였습니다.
100 vCPU 환산 워크로드:
| 필요 vCPU | 필요 메모리 | |
|---|---|---|
| 마이그레이션 전 (Mimir 2.x) | 100 cores | ~583 GiB |
| 마이그레이션 후 (Mimir 3.0) | ~54 cores | ~129 GiB |
마이그레이션 전후 관측된 코어당 메모리 비율을 기반으로 산정.
인스턴스 선정 및 비용 (m7g, us-east-1 On-Demand):
| 시나리오 | 인스턴스 구성 | vCPU | 메모리 | 시간당 비용 |
|---|---|---|---|---|
| 마이그레이션 전 | 3 × m7g.16xlarge | 192 | 768 GiB | $7.8336/hr |
| 마이그레이션 후 | 2 × m7g.8xlarge | 64 | 256 GiB | $2.6112/hr |
참고: 마이그레이션 전에는 메모리가 병목입니다 (필요 583 GiB vs m7g의 vCPU당 4 GiB 비율). 메모리 요구량 충족을 위해 CPU를 오버 프로비저닝해야 합니다.
월간 및 연간 절감 비용:
| 월간 (730시간) | 연간 | |
|---|---|---|
| 마이그레이션 전 | $5,718.53 | $68,622.34 |
| 마이그레이션 후 | $1,906.18 | $22,874.11 |
| 절감액 | $3,812.35/월 | $45,748.23/년 |
| 절감률 | ~66.7% | ~66.7% |
⚠️ 위 수치는 On-Demand 가격 기준입니다. Reserved Instances 또는 Savings Plans를 적용할 경우 절대 금액은 달라지지만, 상대적인 절감 비율은 동일하게 유지됩니다.
추가로, Consul을 인프라에서 제거함으로써 발생하는 컴퓨팅, 메모리, 운영 오버헤드 절감은 위 수치에 반영되어 있지 않으며, 이 또한 추가적인 비용 절감 효과를 가져옵니다.
| 개선 항목 | 상세 내용 |
|---|---|
| Ingester 메모리 | 파드당 6~7 GiB → 2 GiB (~70% 감소) |
| Consul 의존성 | 제거 (memberlist 기본 적용) |
| 아키텍처 | Kafka 기반 쓰기 경로 도입 |
| 예상 비용 절감 | 100 vCPU 스케일 기준 연 ~$45K |
Mimir 3.0은 엄청난 도약입니다. 아키텍처 개선, 리소스 효율성 향상, 그리고 Consul 의존성 제거가 결합되어, 지금까지 수행한 업그레이드 중 가장 임팩트가 큰 변화였습니다.
아직 Mimir 2.x를 사용 중이며 Consul 운영에 지쳐 있거나, Ingester의 높은 리소스 사용량에 고민하고 계시다면 — 망설이지 마세요. 마이그레이션은 충분히 그 가치가 있습니다.
환경: EKS, Helm 기반 배포 (mimir-distributed 차트), Ingester 9대
리전: AWS (us-east-1 가격 기준으로 벤치마크)