콘텐츠로 이동

OpenObserve - 페타바이트 규모 관찰성 플랫폼 치트시트

OpenObserve - 페타바이트 규모 관찰성 플랫폼 치트시트

OpenObserve (O2)는 로그, 메트릭, 트레이스를 위한 Rust로 작성된 오픈소스 관찰성 플랫폼입니다. 정의하는 설계 선택은 객체 저장소 (S3, GCS, MinIO)에 압축된 Parquet 형식으로 데이터를 저장합니다. 비싼 로컬 디스크 대신 이는 Elasticsearch 기반 스택보다 극적으로 낮은 저장소 비용 주장의 기초입니다. 내장 UI가 있는 단일 바이너리로 제공되고, OpenTelemetry를 기본적으로 지원하고, SQL로 쿼리합니다.

설치

방법명령
바이너리GitHub Releases에서 다운로드한 후 ./openobserve
Dockerdocker run -d -p 5080:5080 -e ZO_ROOT_USER_EMAIL=a@b.c -e ZO_ROOT_USER_PASSWORD=pass public.ecr.aws/zinclabs/openobserve:latest
KubernetesHelm 차트 사용 가능
UIhttp://localhost:5080
확인설정한 루트 자격 증명으로 로그인

저장소 모드

모드사용
로컬 디스크단일 노드, dev/작은 배포
S3 / GCS / Azure Blob프로덕션, 저렴한 장기 보관
MinIO자체 호스팅 객체 저장소
# 프로덕션 저장소를 위해 S3을 지정
export ZO_LOCAL_MODE=false
export ZO_S3_BUCKET_NAME=my-o2-bucket
export ZO_S3_REGION_NAME=us-east-1

데이터 수집

소스방법
OpenTelemetryOTLP를 /api/{org}/v1/traces, /v1/logs, /v1/metrics로 전송
HTTP JSONPOST /api/{org}/{stream}/_json
Fluent Bit / VectorO2 HTTP 엔드포인트로 출력 플러그인
Prometheus 원격 쓰기/api/{org}/prometheus/api/v1/write
SyslogTCP/UDP 리스너
# JSON 로그 대량 수집
curl -u "$USER:$PASS" -X POST \
  "http://localhost:5080/api/default/app_logs/_json" \
  -H "Content-Type: application/json" \
  -d '[{"level":"error","message":"db timeout","service":"api"}]'

쿼리 (SQL)

-- 하나의 서비스에 대한 최근 오류 찾기
SELECT * FROM app_logs
WHERE level = 'error' AND service = 'api'
ORDER BY _timestamp DESC
LIMIT 100;

-- 시간에 따라 서비스당 오류 개수
SELECT service, count(*) AS errors
FROM app_logs
WHERE level = 'error'
GROUP BY service
ORDER BY errors DESC;
기능참고
SQL 쿼리로그 스트림에 대한 친숙한 구문
전체 텍스트 검색match_all('timeout')
시간 범위UI에서 선택하거나 _timestamp 필터를 통해
저장된 검색재사용 가능한 쿼리

핵심 개념

용어의미
조직최상위 테넌트
스트림명명된 데이터 스트림 (인덱스처럼)
스키마수집된 데이터에서 추론됨
함수수집 또는 쿼리 시 적용된 VRL 변환
알림예약된 쿼리 + 대상

알림 및 대시보드

기능방법
예약된 알림쿼리 + 임계값 + 평가 간격
실시간 알림매칭된 수집 레코드에 대해 트리거
대상Webhook, Slack, 이메일, PagerDuty
대시보드SQL 쿼리에서 패널 구축
템플릿재사용 가능한 알림 메시지 형식

수집 시간 함수 (VRL)

# 수집 시 필드를 수정하고 새로운 것 파생
.email = "REDACTED"
.status_class = floor(.status / 100)

함수를 사용하면 저장소 전에 PII를 스크럽하거나 레코드를 강화할 수 있습니다. 쿼리 시 수행하는 것보다 저렴합니다.

OpenObserve vs 대안

측면OpenObserveElasticsearch/ELKGrafana Loki
저장소객체 저장소 (Parquet)로컬 디스크 인덱스객체 저장소 (청크)
비용 프로필매우 낮음높음낮음
쿼리SQLQuery DSL / KQLLogQL
범위로그 + 메트릭 + 트레이스로그 (+ APM)로그 (나머지용 Grafana 스택)
설정단일 바이너리다중 구성요소다중 구성요소

OpenTelemetry로 계측을 위해 쌍을 이루고; Grafana LokiElasticsearch와 비교합니다.

리소스