프로젝트 소개

Tero Edge는 Zig로 작성된 가볍고 고성능의 원격 측정 프록시로, 데이터가 목적지에 도달하기 전에 정책 기반 필터링(DROP/KEEP)을 적용합니다. OpenTelemetry Collector와 함께 작동하도록 설계되었으며, 이를 대체하지 않고 정책 적용을 위한 집중적인 대안을 제공합니다. 이 프로젝트는 다양한 사용 사례에 대해 사전 구성된 여러 배포판(진입점)을 포함합니다: - **전체 배포판**: 로그 및 메트릭에 대해 Datadog 및 OTLP 수집을 모두 처리합니다. - **Datadog 배포판**: Datadog 로그 및 메트릭 엔드포인트에 중점을 둡니다. - **OTLP 배포판**: OpenTelemetry 프로토콜 로그 수집에 중점을 둡니다. - **Prometheus 배포판**: 스트리밍 필터링으로 Prometheus 메트릭 스크래핑을 위한 사이드카 프록시 역할을 합니다. - **Lambda 배포판**: Datadog 원격 측정 처리를 위한 AWS Lambda 확장입니다. - **Edge Tail**: 체크포인트 재개 기능이 있는 라인 지향 로그 복사를 위한 파일/스트림 테일러입니다. 주요 기능은 다음과 같습니다: - 로그 및 메트릭에 대한 정책 기반 필터링(DROP/KEEP) - 비동기 정책 로딩(서버가 즉시 시작되고 정책이 백그라운드에서 로드됨) - 실패-개방 동작(오류는 데이터를 변경 없이 통과시킴) - 원자적 스냅샷을 통한 잠금 없는 정책 업데이트 - 신호 처리를 통한 원활한 종료 - 충돌 진단을 위한 SIGSEGV 핸들러 - Prometheus용 스트리밍 응답 처리(제한된 메모리) - 정책 검사를 통과한 메트릭에 대한 제로-카피 전달 - 스크래핑당 제한 구성 가능 - 파일 및 HTTP 정책 제공자 지원 - `/_edge/metrics`의 Prometheus 메트릭 엔드포인트 - 캐시 일관성을 위한 데이터 지향 설계 - 명시적 종속성을 가진 모듈식 패키지 구조 ## 저장소 구조 소스는 모듈식 패키지로 구성됩니다: - `core/` - 런타임 프리미티브(한계, 연결 슬래브, 아레나 풀, I/O) - `frontend/` - 인바운드 HTTP(stdio 및 httpz 프론트엔드) - `service/` - 라우팅 및 신호별 요청 계획 - `signals/` - 프로토콜 레코드 유형(Datadog, OTLP, Prometheus) - `pipeline/` - 프레이밍, 코덱, 스트리밍 레코드 파이프라인 - `runtime/` - 프로세스 수명 주기, 배포판, 메트릭 - `tail/` - 파일 및 표준 입력 테일링 - `config/` - 구성 파싱 - `lambda/` - AWS Lambda 확장 지원 - `zonfig/` - 환경 변수 오버라이드가 있는 컴파일 시간 구성 ## 빌드 및 실행 `zig build`로 모든 대상을 빌드합니다. `zig build test`로 테스트를 실행합니다. `zig build edge`, `zig build datadog`, `zig build otlp`, `zig build prometheus`, `zig build tail`, 또는 `zig build lambda`로 특정 배포판을 빌드합니다. 사전 빌드된 바이너리는 Linux x86_64, Linux ARM64, macOS ARM64용으로 제공됩니다. Docker 이미지는 GitHub Container Registry에서 제공됩니다. ## 구성 구성은 JSON 파일을 통해 이루어집니다. 주요 설정은 다음과 같습니다: - `listen_address` / `listen_port` - 서버 바인드 주소 - `upstream_url` - 기본 업스트림 목적지 - `logs_url` / `metrics_url` - 선택적 특정 업스트림 URL - `workspace_id` - 정책 동기화를 위한 작업 공간 식별자 - `log_level` - 로깅 수준 - `policy_providers` - 정책 소스 목록(파일/http) - `max_body_size` - 요청/응답 본문 한계 `TERO_LOG_LEVEL`과 같은 환경 변수가 설정을 재정의할 수 있습니다. ## 크기 조정 및 성능 README에는 다양한 페이로드 크기와 요청 속도에 대한 CPU 및 메모리 사용량을 보여주는 크기 조정 테이블이 포함되어 있습니다. 메모리는 주로 요청 속도가 아닌 동시 전송자 수에 의해 결정됩니다. CPU는 요청 수가 아닌 레코드 수에 따라 확장됩니다. 정책 수는 성능에 최소한의 영향을 미칩니다. ## Prometheus 메트릭 런타임 메트릭은 Prometheus 텍스트 형식으로 `GET /_edge/metrics`에서 노출됩니다. 모든 레이블은 시리즈 폭발을 방지하기 위해 제한된 열거형입니다. 메트릭은 요청, 응답, 연결, 업스트림 시도, 정책 평가 및 빌드 정보를 다룹니다. ## 설계 원칙 1. **데이터 지향 설계** - 캐시 일관성 및 메모리 접근 패턴 최적화 2. **잠금 없는 읽기** - 정책 평가는 원자적 스냅샷 포인터를 사용하여 경합 없는 읽기 보장 3. **실패-개방** - 정책 평가 오류는 데이터 삭제가 아닌 통과로 이어짐 4. **모듈식 구성** - 패키지는 독립적으로 사용되거나 함께 구성될 수 있음 5. **명시적 종속성** - 각 패키지는 가져오기를 통해 종속성을 선언함