OpenTelemetry Rails 계측 구현
-
필수 조건: Ruby >= 3.0, Rails 애플리케이션, 옵저버빌리티 개념 이해 및 백엔드 접근.
-
젬 설치:
opentelemetry-sdk,opentelemetry-exporter-otlp,opentelemetry-instrumentation-all(포괄적 계측) 또는 특정 계측 젬(opentelemetry-instrumentation-rails,opentelemetry-instrumentation-active_record등)을 Gemfile에 추가 후 설치합니다. -
초기화:
config/initializers/opentelemetry.rb에OpenTelemetry::SDK.configure블록을 사용하여 서비스 이름(service_name) 설정 및c.use_all()또는 개별 계측을 활성화합니다. 환경 변수(OTEL_SERVICE_NAME,OTEL_EXPORTER_OTLP_ENDPOINT)를 통한 유연한 구성도 지원됩니다. -
ActiveRecord 모니터링:
opentelemetry-instrumentation-active_record를 통해 데이터베이스 쿼리의 SQL 문과 실행 시간을 자동으로 트레이스합니다. -
커스텀 계측:
OpenTelemetry.tracer_provider.tracer로 트레이서를 얻어tracer.in_span블록 내에서 애플리케이션 로직에 대한 스팬을 생성합니다.span.add_attributes,span.add_event로 정보 추가 및span.record_exception으로 예외를 처리할 수 있으며,OpenTelemetry::SemanticConventions::Trace를 활용하여 표준 속성을 사용합니다.
생산 환경 최적화 및 고려사항
-
성능 최적화: 생산 환경에서는
BatchSpanProcessor를 사용하여 효율적인 트레이스 처리를 구현하고,service_name,deployment.environment등 리소스 속성을 구성하여 서비스 컨텍스트를 제공합니다. 고트래픽 애플리케이션의 트레이스 볼륨 관리를 위해 샘플링을 구성합니다. -
보안: 스팬 속성에 민감한 정보를 포함하지 않도록 주의하고, 필요한 경우 속성 프로세서를 활용하여 데이터를 정화합니다.
-
디버깅:
OTEL_TRACES_EXPORTER=console및OTEL_LOG_LEVEL=debug환경 변수를 통해 콘솔 출력을 활성화하여 문제 해결에 도움을 받을 수 있습니다.
Uptrace를 통한 OpenTelemetry 활용
-
Uptrace는 OpenTelemetry를 위해 구축된 오픈 소스 APM 플랫폼으로, 트레이스, 메트릭, 로그를 통합 관리합니다.
-
uptrace-ruby젬은 표준 OpenTelemetry SDK의 래퍼로, Uptrace로 데이터를 내보내도록 OpenTelemetry를 미리 구성하여 설정 과정을 간소화합니다. -
Uptrace.configure_opentelemetry를 사용하여 DSN과 서비스 정보를 설정하며,Uptrace.trace_url(span)을 통해 특정 트레이스에 대한 직접 URL을 얻을 수 있습니다.
기타 OpenTelemetry 지원 백엔드
- Uptrace 외에도 Jaeger, Zipkin, Prometheus (메트릭 안정화 시), Elastic APM, Datadog 등 OTLP 프로토콜을 지원하는 다양한 APM 도구와 연동할 수 있습니다.