Elixir

공식 opentelemetry Erlang/Elixir 패키지를 사용해 별도의 Sophonz 패키지 없이 모든 Elixir·Phoenix 서버에서 트레이스를 Sophonz로 전송하세요.

sophonz 헥스 패키지는 존재하지 않으며, 필요하지도 않습니다. Sophonz 컬렉터는 표준 OTLP를 사용하므로, 모든 Elixir 서비스는 공식 opentelemetry Erlang/Elixir 패키지와 약간의 애플리케이션 설정, 그리고 연결 정보를 위한 환경 변수만으로 트레이스를 전송할 수 있습니다.

제공되는 것

  • 공식 Erlang/Elixir SDK — opentelemetry + opentelemetry_api + opentelemetry_exporter. OTEL_EXPORTER_OTLP_ENDPOINT, OTEL_EXPORTER_OTLP_PROTOCOL, OTEL_EXPORTER_OTLP_HEADERS를 자동으로 읽는 OTLP 익스포터가 포함됩니다.
  • 대부분의 Phoenix 앱이 이미 쓰는 라이브러리를 위한 즉시 사용 가능한 계측 패키지 — 컨트롤러/LiveView 스팬을 위한 opentelemetry_phoenix, 어댑터에 따라 HTTP 계층을 위한 opentelemetry_bandit 또는 opentelemetry_cowboy, 데이터베이스 쿼리 스팬을 위한 opentelemetry_ecto — 각각 앱이 이미 발생시키고 있을 :telemetry 이벤트에 연결됩니다.
  • OS 환경 변수로부터의 자동 리소스 속성 감지 — SDK는 내장 리소스 감지기를 통해 기본적으로 OTEL_RESOURCE_ATTRIBUTES를 읽습니다.

동작 방식

Erlang/Elixir SDK는 환경 변수만이 아니라 약간의 Application 설정을 통해 구성됩니다 — 이는 Sophonz와 무관하게 OTel-Erlang의 표준적인 방식입니다.

  1. config/runtime.exs에서 :opentelemetry에게 스팬을 배치로 모아 OTLP로 내보내도록 지시합니다 (span_processor: :batch, traces_exporter: :otlp).
  2. Phoenix, 사용 중인 HTTP 어댑터, Ecto용 계측 패키지를 추가합니다 — 각각 애플리케이션 시작 시(보통 Application.start/2에서) telemetry 이벤트에 연결됩니다.
  3. 텔레메트리가 어디로 가고 누구에게 속하는지는 모두 환경 변수가 처리합니다 — 컬렉터 엔드포인트, 프로토콜, 헤더, 그리고 service.key를 포함한 리소스 속성.

CAUTION — 유효한 service.key가 없으면 텔레메트리는 조용히 버려집니다

Sophonz 컬렉터는 강제 모드(enforce mode)로 동작합니다. 즉, OTLP 페이로드는 네트워크상으로 정상 수신되더라도 해석 가능한 service.key 리소스 속성이 없으면 조용히 폐기됩니다. 애플리케이션에 오류가 발생하지도, 요청이 거부되지도 않습니다 — 그저 콘솔이 비어 있을 뿐입니다. 다른 문제라고 넘겨짚기 전에 OTEL_RESOURCE_ATTRIBUTES(그리고 OTEL_EXPORTER_OTLP_HEADERS)부터 다시 확인하세요.

TIP — 다음 단계

정확한 mix.exs 의존성, 설정, 환경 변수 표, Phoenix/Ecto 참고 사항은 설치 문서를 확인하세요.