Vector - 고성능 관찰성 데이터 파이프라인 치트시트
Vector (Datadog, 오픈소스)는 Rust로 작성된 고성능 관찰성 데이터 파이프라인입니다. 로그, 메트릭, 트레이스를 모든 소스에서 수집하고 변환을 통해 재형성한 후 모든 싱크로 전달합니다. 모두 공급 업체 무관이므로 재계측 없이 백엔드를 전환할 수 있습니다. 일반적으로 노드마다 에이전트가 실행될 때 중요한 Logstash 또는 Fluentd의 CPU 및 메모리 일부만 사용합니다.
설치
| 방법 | 명령 |
|---|
| 설치 스크립트 | `curl —proto ‘=https’ —tlsv1.2 -sSf https://sh.vector.dev |
| Debian/Ubuntu | Vector 릴리스의 .deb |
| macOS (Homebrew) | brew install vectordotdev/brew/vector |
| Docker | docker run -v $PWD/vector.yaml:/etc/vector/vector.yaml timberio/vector:latest-alpine |
| 확인 | vector --version |
모델: 소스 → 변환 → 싱크
# vector.yaml
sources:
app_logs:
type: file
include: ["/var/log/app/*.log"]
transforms:
parse:
type: remap
inputs: ["app_logs"]
source: |
. = parse_json!(.message)
.env = "production"
del(.password)
sinks:
out:
type: elasticsearch
inputs: ["parse"]
endpoints: ["http://es:9200"]
| 단계 | 목적 |
|---|
sources | 데이터가 어디서 나오는지 |
transforms | 파싱, 필터링, 강화, 수정, 집계 |
sinks | 데이터가 어디로 가는지 |
inputs | 구성요소를 DAG에 연결 |
일반적인 소스
| 소스 | 수집 |
|---|
file | 로그 파일 (테일링) |
journald | systemd 저널 |
kubernetes_logs | k8s 메타데이터가 있는 Pod 로그 |
docker_logs | 컨테이너 로그 |
http_server | Push 엔드포인트 |
syslog | TCP/UDP를 통한 Syslog |
prometheus_scrape | 메트릭 엔드포인트 스크래핑 |
opentelemetry | OTLP 수집 |
일반적인 싱크
| 싱크 | 전송 |
|---|
elasticsearch | Elasticsearch/OpenSearch |
loki | Grafana Loki |
clickhouse | ClickHouse |
aws_s3 | S3 (보관) |
prometheus_exporter | 스크래핑을 위한 메트릭 노출 |
datadog_logs / splunk_hec | 공급 업체 백엔드 |
console | stdout (디버깅) |
blackhole | 버림 (테스팅) |
VRL (Vector Remap Language)
remap 변환은 대부분의 작업이 일어나는 곳입니다.
# 파싱, 강화, 수정, 노이즈 제거
. = parse_json!(.message)
.timestamp = parse_timestamp!(.ts, "%+")
.service = "checkout"
del(.credit_card)
if .level == "debug" { abort }
| VRL 함수 | 목적 |
|---|
parse_json!, parse_regex!, parse_grok! | 원본 텍스트 구조화 |
del(.field) | 필드 제거 (PII 수정) |
to_int!, to_float! | 타입 강제변환 |
abort | 이벤트 드롭 |
merge, flatten | 객체 재형성 |
유용한 변환
| 변환 | 수행 |
|---|
remap | VRL 기반 재형성 (주력) |
filter | 조건과 일치하는 이벤트 유지 |
route | 스트림을 명명된 분기로 분할 |
aggregate | 간격에 따라 메트릭 롤업 |
throttle | 시끄러운 이벤트 속도 제한 |
dedupe | 중복 제거 |
sample | 이벤트의 백분율 유지 |
Vector 운영
| 명령 | 설명 |
|---|
vector --config vector.yaml | 구성으로 실행 |
vector validate | 배포 전 구성 확인 |
vector test | 구성에서 정의한 단위 테스트 실행 |
vector top | 구성요소당 처리량의 라이브 TUI |
vector tap <component> | 구성요소를 통해 흐르는 이벤트 스트림 |
--watch-config | 구성 변경 시 핫 리로드 |
# 변환이 실제로 무엇을 내보내는지 디버그
vector tap parse
신뢰성
| 기능 | 참고 |
|---|
| 디스크 버퍼 | 재시작/백프레셔 생존 (buffer.type: disk) |
| 승인 | 엔드-투-엔드 전달 보장 |
| 적응형 동시성 | 싱크 요청 속도 자동 조정 |
| 상태 검사 | 도달 불가능한 싱크에 빠른 실패 |
Vector vs 대안
| 측면 | Vector | Fluent Bit | Logstash |
|---|
| 언어 | Rust | C | JRuby/JVM |
| 리소스 사용 | 매우 낮음 | 매우 낮음 | 높음 |
| 변환 언어 | VRL (풍부) | Lua/필터 | Ruby/grok |
| 데이터 타입 | 로그, 메트릭, 트레이스 | 로그, 메트릭 | 로그 |
| 최적 용도 | 공급 업체 무관 파이프라인 | 초경량 엣지 에이전트 | 레거시 ELK 스택 |
OpenObserve, Loki, Elasticsearch와 같은 싱크를 공급합니다; Fluentd와 비교합니다.
리소스