본문으로 건너뛰기

01 · 우리 스택 구성

  • k8s 위 VM operator가 vmagent를 Deployment(stateless)로 띄우고 중앙 VM 클러스터의 vminsert 엔드포인트로 remote_write 합니다.
  • 목적지 경로 /insert/0/prometheus는 클러스터 모드 · tenant 0을 뜻합니다.
  • stage/prod는 값이 다릅니다 — 리소스·maxDiskUsagePerURL이 환경별로 달라지고 prod는 vmagent가 두 계열(용도별 분리)이라 extraArgs가 양쪽에 함께 걸립니다.
  • 공통 수집 설정은 scrapeInterval 30s · promscrape.streamParse=true · promscrape.maxScrapeSize=24GiB.

우리 환경에서 지표가 어디서 만들어져 어디로 흘러가는지, 그 구조와 stage/prod 값 차이를 정리합니다. 전송 안정화 Phase 1 튜닝은 02 vmagent 전송 튜닝에서, 장기보관 아키텍처는 메트릭 장기보관 챕터에서 따로 다룹니다.

관련 문서: 개념 03 수집 · 02 vmagent 전송 튜닝 · 메트릭 장기보관 · 우리의 운영 허브

전체 구조

k8s의 vmagent가 중앙 VM 클러스터로 remote_write
도식 텍스트
  • vmagent — k8s · VM operator · Deployment(stateless)
  • 중앙 VM 클러스터 — vminsert 엔드포인트
  • vmstorage
  • remote_write /insert/0/prometheus

vmagent는 k8s 위에서 VM operator가 관리하는 Deployment입니다. 무상태(stateless)라 스크랩한 지표를 자체 보관하지 않고 곧바로 중앙 VM 클러스터의 vminsert로 흘려보냅니다. 7단계 수집 파이프라인과 유실 방지 큐 같은 vmagent 자체의 원리는 개념 03 수집에 있습니다 — 이 문서는 그 원리를 우리 값으로 옮긴 결과만 봅니다.

목적지 경로 — /insert/0/prometheus

remote_write 목적지 URL은 다음 형태입니다.

https://<vminsert-endpoint>/insert/0/prometheus/api/v1/write

/insert/<tenantID>/prometheus라는 경로는 VM 클러스터 모드의 vminsert 규약이고 그 자리에 박힌 0이 tenant 0입니다. 우리는 단일 노드(vmsingle)가 아니라 클러스터 모드 vminsert를 tenant 0으로 씁니다. TLS는 insecureSkipVerify: true로 붙습니다.

stage/prod 값 차이

구조는 같고 채워진 값이 다릅니다.

항목stageprod
배포 형태Deployment (stateless)Deployment (stateless)
vmagent 계열1 계열2 계열 (용도별 분리)
requestscpu 500m / mem 500Micpu 100m / mem 150Mi
limitsmem 1500Micpu 2 / mem 1000Mi
scrapeInterval30s30s
maxDiskUsagePerURL1000MiB2000MiB

리소스 기준치의 근거와 “실측 후 조정” 항목은 04 스케일링·용량 기준치에서 정리합니다.

공통 수집 설정 (extraArgs)

두 환경 공통으로 다음을 겁니다.

설정의미
scrapeInterval30s스크랩 주기
promscrape.streamParsetrue응답을 스트리밍 파싱해 대형 타깃의 메모리 급증을 억제
promscrape.maxScrapeSize24GiB단일 스크랩 응답 허용 상한

Phase 1에서 여기에 remoteWrite.forceVMProto가 추가됐습니다. 그 근거는 02에서 다룹니다.

prod 주의 — 두 계열에 함께 걸린다

prod의 vmagent는 용도에 따라 두 계열로 운영합니다. extraArgs는 base 설정이라 양쪽 vmagent에 함께 적용됩니다. 02에서 다룰 remoteWrite.forceVMProto도 base에 넣으면 두 계열 모두에 걸리는데 둘 다 목적지가 VM이라 안전합니다. 한쪽이라도 VM이 아닌 목적지였다면 base가 아니라 계열별로 나눠 걸어야 합니다.

마지막 수정 일자