카테고리 없음

Victoria Metrics 알아보기

홍띠 2024. 2. 25. 17:20

Victoria Metrics

Victoria Metrics는 Prometheus 호환 TSDB(Time Series Database, 시계열데이터베이스) 및 모니터링 솔루션 이다. KISS(Keep It Simple, Stupid)의 설계원칙을 갖고 있어, 단순한 코드와 아키텍처를 지향하고 복잡한 추상화와 큰 외부 의존성을 지양한다.

특징

  • 고효율의 솔루션으로 적은 리소스 사용량으로 높은 처리량을 갖는다.
  • PromQL과 비슷한 MetricsQL이라는 쿼리 언어를 제공한다.
  • series limiter를 통해 높은 카디널리티 문제와 high churn rate를 처리할 수 있다.
  • 고성능의 single-node를 지원하므로 간단한 설치와 운영이 가능하다.
  • 빠른 속도로 발전하고 있어, 주기적으로 upgrade가 필요하다.

구성요소

  • vmagent - pull 및 push 기반 프로토콜을 통해 메트릭을 수신, 변환하여 Victoria Metrics같은 Prometheus 호환 원격 스토리지 시스템에 전송하는 경량화된 에이전트
  • vmalert - Prometheus 호환 alerting과 레코딩 규칙을 처리하는 서비스
  • vmalert-tool - alerting 과 레코딩 규칙 유효성 검사를 위한 도구
  • vmauth - VictoriaMetrics 제품에 최적화된 authorization 프록시 및 로드 밸런서로, 사용자에게 권한을 부여하는 역할을 합니다.
  • vmgateway - 속도 제한, 토큰 접근 제어가 가능한 프록시 (enterprise package 구성요소)
  • vmctl - 메트릭을 다른 저장 시스템 간에 이동하고 복사하는 데 사용되는 도구
  • vmbackup, vmrestore, vmbackupmanager(enterprise package) - VictoriaMetrics 데이터에 대한 백업 생성 및 복원을 위한 도구
  • vminsert, vmselect, vmstorage - VictoriaMetrics 클러스터의 구성 요소

Cluster version

Single-node 버전 대신 매우 높은 처리량이 요구 될때, 수평적 확장이 가능한 클러스터 버전을 지원한다. 다중 node로 고가용성을 확보 할 수 있고 데이터 복제를 통한 안전성을 제공한다. 또한 single-node에서는 지원하지 않는 Multi-tenancy를 지원한다.

Victoria Metrics는 초당 100만건 이하의 데이터 수집 속도에서는 single-node의 사용을 권장한다. (공식 문서에는 cluster version 사용전에 2번 생각하라고 되어있다 ㅎㅎ)

KISS 설계 원칙 때문에 일반적인 분산 컴퓨팅시스템과 달리 Automatic cluster resizing과 스토리지 노드간 Automatic data reshuffling 등을 제공하지 않는다.

Cluster version 구조

출처: Victoria Metrics Docs

  • vminsert: 수집된 데이터를 받아들이고, 들어온 데이터를 metric name과 label에 대한 consistent hasing에 따라 vmstorage에 분배한다.
  • vmstorage: raw data를 저장하고 지정된 lable 필터에 대해서 주어진 시간범위의 쿼리된 데이터를 반환한다.
    • vmstorage 노드들 간에는 어떠한 것도 공유되지 않아, 가용성을 높이고 클러스터 scaling같은 유지보수를 단순화한다. 이를 shared nothing architecture라고 한다.
  • vmselect: 설정된 vmstorage 노드들로부터 필요한 데이터를 가져오는 incoming queries를 수행한다.
  • vmselect와 vminsert 앞단에는 반드시 http load balancer가 배치되어야 한다. 또한 아래의 routing configs를 포함해야 한다.
    • /insert 로 시작하는 요청은 vminsert 노드에 8480 포트로 라우팅되어야 함
    • /select로 시작하는 요청은 vmselect 노드에 8481 포트로 라우팅 되어야 함
  • 각 구성 별 필수 설정값
    • vmstorage: retentionPeriod, storageDataPath
      리소스 사용 충돌을 방지하기 위해서는 아래의 설정값을 고유한 값으로 설정한다.
      • storageDataPath - 데이터 저장 경로
      • vminsertAddr - vminsert로 부터 데이터를 받기 위한 tcp 주소
      • vmselectAddr - vmselect로 부터 요청을 받기 위한 tcp 주소
    • vminsert: storageNode=<vmstorage_host>
    • vmselect: storageNode=<vmstorage_host>