Rust
공식 opentelemetry 크레이트를 사용해 별도의 Sophonz 패키지 없이 모든 Rust 서버에서 트레이스와 로그를 Sophonz로 전송하세요.
sophonz-sdk 크레이트는 존재하지 않으며, 필요하지도 않습니다. Sophonz 컬렉터는 표준 OTLP를 사용하므로, 모든 Rust 서비스는 공식 opentelemetry와 opentelemetry-otlp 크레이트를 연결하고 환경 변수로 Sophonz를 가리키면 트레이스와 로그를 전송할 수 있습니다.
제공되는 것
- 공식 Rust SDK —
opentelemetry+opentelemetry_sdk+opentelemetry-otlp. 프로그래밍 방식으로 재정의하지 않는 한 표준OTEL_EXPORTER_OTLP_*환경 변수를 읽는 OTLP/HTTP 익스포터를 만들어 줍니다. tracing브릿지 — 애플리케이션이 이미 구조화 로깅에tracing크레이트를 쓰고 있다면(대부분의 Rust 웹 서비스가 그렇습니다),tracing-opentelemetry와opentelemetry-appender-tracing이 기존tracing::info!/#[instrument]호출을 다시 작성할 필요 없이 OTel 스팬과 로그 레코드로 바꿔 줍니다.- 시작 시점에 한 번만 작성하면 되는 작고 명시적인 설정 함수 — Go와 마찬가지로 Rust에는 바이트코드를 재작성하는 에이전트가 없으므로, 플래그 하나가 아니라 몇 줄의 코드로 연결합니다.
동작 방식
Rust에는 코드 변경 없는(zero-code) 자동 계측 에이전트가 없습니다 — 패치할 런타임 바이트코드가 없고 컴파일러가 정적 바이너리를 만들기 때문입니다. 대신 시작 시점에 짧은 설정 함수를 한 번 호출합니다.
- 서비스를 설명하는
Resource를 만듭니다 (service.name등). SpanExporter::builder().with_http().build()/LogExporter::builder().with_http().build()로 OTLP/HTTP 스팬 익스포터와 로그 익스포터를 만듭니다 — 둘 다OTEL_EXPORTER_OTLP_ENDPOINT,OTEL_EXPORTER_OTLP_PROTOCOL,OTEL_EXPORTER_OTLP_HEADERS를 자동으로 읽습니다.- 결과로 만들어진
SdkTracerProvider/SdkLoggerProvider를 전역으로 등록하고,tracing을 쓴다면tracing-opentelemetry의 레이어를 설치해 기존 스팬과 로그 라인이 같은 파이프라인으로 흐르게 합니다.
이후 요청 핸들러를 #[tracing::instrument]나 프레임워크의 트레이싱 미들웨어(tower-http, tracing-actix-web, axum-tracing-opentelemetry)로 계측하면 스팬이 자동으로 생성됩니다.
CAUTION — 유효한 service.key가 없으면 텔레메트리는 조용히 버려집니다
Sophonz 컬렉터는 강제 모드(enforce mode)로 동작합니다. 즉, OTLP 페이로드는 네트워크상으로 정상 수신되더라도 해석 가능한 service.key 리소스 속성이 없으면 조용히 폐기됩니다. 프로세스에 오류가 발생하지도, 요청이 거부되지도 않습니다 — 그저 콘솔이 비어 있을 뿐입니다. 다른 문제라고 넘겨짚기 전에 OTEL_RESOURCE_ATTRIBUTES(그리고 OTEL_EXPORTER_OTLP_HEADERS)부터 다시 확인하세요.
TIP — 다음 단계
정확한 Cargo.toml 의존성, 설정 코드, 환경 변수 표, 프레임워크별 참고 사항은 설치 문서를 확인하세요.