4 분 소요

개요

  • 공식 사이트 / GitHub
  • 고성능 관측 가능성 데이터 파이프라인 — 로그·메트릭·트레이스를 수집, 변환, 라우팅
  • 핵심 흐름: sources → transforms → sinks
  • Rust로 구현 → 단일 바이너리, 의존성 없음, 메모리 안전, 빠른 처리량
  • 벤더 중립 — 특정 플랫폼에 종속되지 않고 어떤 소스·목적지와도 연결 가능


특징

특징 설명
단일 바이너리 런타임·의존성 없음, 배포 간단
고성능 Rust, 비동기 I/O, 벡터화 처리로 수백만 이벤트/초 처리 가능
유연한 배포 Daemon(에이전트), Sidecar, Aggregator 역할 전환 가능
VRL 자체 변환 언어로 안전하고 빠른 로그 파싱·변환
End-to-End ACK 이벤트 전달 보장, 정확히-한-번 또는 최소-한-번 보증
Hot reload SIGHUP으로 무중단 설정 변경 적용
Backpressure 싱크 지연 시 업스트림까지 자동 전파
민감 데이터 처리 VRL로 PII 스캔·마스킹·삭제


개념

Events

  • Vector가 처리하는 개별 데이터 단위
  • Logs: 키/값 구조의 일반 로그 이벤트
  • Metrics: 시계열 수치 데이터 (Counter, Gauge, Histogram, Summary 등)
  • Traces: 로그 이벤트의 특수형 (alpha)

Components

  • Sources: 데이터 수집 지점 (파일, Kafka, HTTP, syslog, Kubernetes 로그 등)
  • Transforms: 이벤트 파싱·필터링·샘플링·집계·라우팅
  • Sinks: 이벤트 목적지 (Elasticsearch, S3, Kafka, Prometheus, Datadog 등)

Pipeline

  • Components의 방향성 비순환 그래프(DAG)
  • 이벤트는 Sources → Sinks 단방향 흐름, 순환 불가
  • 독립 하위 그래프 포함 가능 (팬아웃, 멀티 라우팅)

Buffers & Backpressure

  • Sinks가 처리 불가 시 인메모리(기본) 또는 디스크 버퍼에 보관
  • when_full = block 설정 시 버퍼 포화 → Backpressure를 transforms·sources로 전파
  • Sources는 업스트림 시스템까지 Backpressure 전달 (HTTP 429, Kafka fetch 속도 조정 등)

Roles

  • Agent (Daemon/Sidecar): 호스트·파드에 붙어 로컬 데이터 수집·선처리 후 전송
  • Aggregator: 여러 Agent·업스트림에서 데이터를 받아 중앙 처리 후 최종 목적지로 전달


아키텍처

Data Model

  • Log 이벤트: 특정 시점의 구조적 키/값 표현
  • Metric 이벤트: Prometheus / StatsD 등 실세계 메트릭 타입을 반영한 이념보다 실용성 우선 설계
    • Counter, Gauge, Set, Distribution, Histogram, Summary

End-to-End Acknowledgements

  • 소스 이벤트 수신 → batch notifier 생성 (소스 보관 + 이벤트 연결 두 부분)
  • 싱크 처리 완료 후 응답 상태로 batch notifier 업데이트
  • 이벤트가 삭제·필터링되어도 notifier 반드시 업데이트 → 전달 보장 추적
  • 소스가 notifier 업데이트 수신 → 업스트림 시스템에 ACK 전파

Pipeline Model

  • YAML / TOML / JSON 구성 파일로 정의
  • 구성 컴파일 시(시작 시)에 검증 → 실수 조기 발견, DAG 속성 보장
  • Hot reload: SIGHUP 신호로 무중단 파이프라인 수정 적용
  • GraphQL API: 실행 중 인스턴스를 실시간 관찰·조작


설치

  • Linux (스크립트)

    curl --proto '=https' --tlsv1.2 -sSfL https://sh.vector.dev | bash
    
  • apt (Debian / Ubuntu)

    apt-get install -y vector
    
  • Docker

    docker run \
      -v $PWD/vector.toml:/etc/vector/vector.toml:ro \
      timberio/vector:latest-alpine
    
  • Helm (Kubernetes)

    helm repo add vector https://helm.vector.dev
    helm install vector vector/vector \
      --namespace vector --create-namespace \
      -f values.yaml
    


설정 (vector.toml)

기본 구조

  # Sources
  [sources.nginx_logs]
  type = "file"
  include = ["/var/log/nginx/access.log"]

  # Transforms
  [transforms.parse_nginx]
  type = "remap"
  inputs = ["nginx_logs"]
  source = '''
    . = parse_nginx_log!(.message, format: "combined")
  '''

  # Sinks
  [sinks.out_elasticsearch]
  type = "elasticsearch"
  inputs = ["parse_nginx"]
  endpoints = ["http://localhost:9200"]
  index = "nginx-%Y.%m.%d"

주요 Sources

Source 설명
file 파일 tail (glob 패턴 지원)
kubernetes_logs K8s 파드 로그 자동 수집
kafka Kafka Consumer
http_server HTTP 엔드포인트로 푸시 수신
syslog UDP/TCP syslog
stdin 표준 입력
prometheus_scrape Prometheus exporter 스크래핑
vector 다른 Vector 인스턴스에서 수신

주요 Transforms

Transform 설명
remap VRL로 이벤트 파싱·변환·보강
filter 조건에 맞는 이벤트만 통과
route 조건별로 이벤트를 다른 출력으로 분기
sample 지정 비율로 이벤트 샘플링
aggregate 일정 기간 이벤트 집계
lua Lua 스크립트로 변환 (고급 커스텀)
reduce 여러 로그를 하나의 이벤트로 병합

주요 Sinks

Sink 설명
elasticsearch Elasticsearch / OpenSearch
kafka Kafka Producer
aws_s3 Amazon S3 (배치 업로드)
prometheus_remote_write Prometheus Remote Write
datadog_logs Datadog Logs
loki Grafana Loki
clickhouse ClickHouse
http 범용 HTTP 엔드포인트
console 콘솔 출력 (디버그용)


Vector Remap Language (VRL)

  • Vector 전용 이벤트 변환 도메인 특화 언어(DSL)
  • 안전성: 런타임 오류 없음(컴파일 시 타입 검증), 샌드박스 실행
  • 성능: AOT 컴파일, Rust 수준 처리 속도

VRL 예시

  • Nginx 접근 로그 파싱

    . = parse_nginx_log!(.message, format: "combined")
    .timestamp = parse_timestamp!(.timestamp, format: "%d/%b/%Y:%T %z")
    
  • 필드 추가·삭제·수정

    .environment = "production"
    del(.sensitive_field)
    .status_code = to_int!(.status)
    
  • 조건부 필터링 (transforms.filter 대신 VRL 내 abort)

    if .status < 400 {
      abort
    }
    
  • IP 익명화 (PII 처리)

    .client_ip = ip_cidr_contains!("10.0.0.0/8", .client_ip) ? "internal" : "external"
    
  • JSON 파싱 + 필드 보강

    parsed = parse_json!(.message)
    . = merge!(., parsed)
    .host = get_hostname!()
    


배포 패턴

Agent + Aggregator (권장 대규모)

  [호스트/파드] → Vector Agent → Vector Aggregator → Elasticsearch / S3 / ...
  • Agent: 경량, 로컬 수집·전처리
  • Aggregator: 중앙 집계, 중복 제거, 분기 라우팅

단독 Aggregator

  [Kafka / HTTP Push] → Vector → 다수 목적지

Kubernetes DaemonSet (Agent)

  # Helm values.yaml 핵심 설정
  role: Agent
  customConfig:
    sources:
      kubernetes_logs:
        type: kubernetes_logs
    sinks:
      loki:
        type: loki
        inputs: ["kubernetes_logs"]
        endpoint: "http://loki:3100"


유사 도구 비교

도구 특징 적합 환경
Vector 고성능, Rust, VRL, 벤더 중립, 단일 바이너리 범용 관측 가능성 파이프라인
Fluentd Ruby 기반, 풍부한 플러그인, 다소 무거움 K8s 로그 수집
Fluent Bit C 기반 경량, 플러그인 제한 엣지·임베디드 환경
Logstash JVM 기반, Elastic 생태계 최적화, 무거움 ELK 스택 중심
OpenTelemetry Collector OTLP 중심, 트레이스 강점, 벤더 중립 OTel 표준 파이프라인


활용 사례

  • 로그 중앙화: 다수 서비스 로그 수집 → Elasticsearch / Loki 저장
  • 비용 최적화: 고빈도·저가치 로그 샘플링, 중복 제거 후 S3 장기 보관
  • 다중 목적지 라우팅: 에러 로그 → PagerDuty + Elasticsearch, 나머지 → S3
  • 메트릭 집계: Prometheus exporter 스크래핑 → Grafana Cloud / Datadog
  • PII 마스킹: VRL로 이메일·신용카드·IP 정보 익명화 후 전송
  • Kafka 릴레이: 로그 생산자 → Kafka → Vector → 다수 목적지 동시 전달


관련 포스트