Ruby on Rails 애플리케이션에 OpenTelemetry 적용하기 워크숍

RailsConf 2025 How to instrument your Rails app with OpenTelemetry by Kayla Reopelle

작성자
Ruby Central
발행일
2025년 07월 24일

핵심 요약

  • 1 OpenTelemetry의 기본 개념과 Rails 앱에 Traces, Metrics, Logs를 통합하는 실용적인 방법을 다룹니다.
  • 2 SDK, Exporter, Instrumentation을 설정하고, 커스텀 스팬, 속성, 메트릭 및 로그를 추가하는 과정을 상세히 설명합니다.
  • 3 Ruby OpenTelemetry 프로젝트의 현황(안정성, 실험적 기능)과 커뮤니티 참여를 독려하며 향후 발전 방향을 제시합니다.

도입

관측성(Observability)은 시스템 내부 상태를 외부 출력으로 이해하는 핵심 사례입니다. 기존 모니터링이 '무엇이' 일어나는지에 집중한다면, 관측성은 '왜' 일어나는지까지 파악하여 알려지지 않은 문제에 대응합니다. OpenTelemetry는 벤더 중립적 오픈 소스 솔루션으로, 관측성 데이터를 수집 및 표준화하여 특정 벤더 종속 없이 유비쿼터스 관측성 구현을 지향합니다. 본 워크숍은 Rails 애플리케이션에 OpenTelemetry를 통합하는 기본 방법과 핵심 신호인 Traces, Metrics, Logs의 활용에 중점을 둡니다.

OpenTelemetry는 Traces, Metrics, Logs 세 가지 핵심 신호를 통해 애플리케이션 관측성을 확보합니다.

1. OpenTelemetry Traces

SDK와 OTLP Exporter를 설정하고, opentelemetry-instrumentation-all Gem으로 Rails 계측을 자동 설치합니다(Monkey Patching, Pub/Sub, Native 방식). 커스텀 스팬과 속성을 추가하여 트레이스를 풍부하게 하며, 백엔드에서 요청 흐름과 에러를 진단합니다.

2. OpenTelemetry Metrics (실험 단계)

Metrics SDK와 OTLP Exporter Gem을 추가합니다. 미터를 통해 카운터, 히스토그램 등 인스트루먼트를 정의하고 차원(Dimensions) 포함 메트릭을 수집합니다. OTEL_METRICS_EXPORT_INTERVAL 설정 및 meter_provider.add_view로 커스텀 버킷 경계를 정의합니다. ActiveSupport::Notifications.subscribe를 활용, process_action 이벤트에 히스토그램을 연결하여 요청 처리 시간을 기록합니다.

3. OpenTelemetry Logs

Logs SDK와 OTLP Exporter Gem을 추가하고 OTEL_LOGS_EXPORTER 환경 변수로 OTLP 전송을 설정합니다. Ruby Logger Instrumentation은 Ruby 기본 로거를 계측하여 Rails 8 ActiveSupport::BroadcastLogger 포함 모든 로그를 OpenTelemetry 형식으로 자동 변환 전송합니다. 로그는 Trace ID와 Span ID를 포함하여 트레이스 및 스팬 이벤트와의 상관 관계를 쉽게 파악할 수 있습니다.

4. 프로젝트 현황 및 참여

Ruby OpenTelemetry 프로젝트는 메트릭/로그 안정성 확보, 시맨틱 컨벤션 적용, 계측에 메트릭 자동 추가 등을 목표로 합니다. GitHub 리포지토리, Ruby SIG 미팅, CNCF Slack 채널을 통해 커뮤니티 참여를 독려합니다.

결론

OpenTelemetry는 Rails 애플리케이션에 강력하고 벤더 중립적인 관측성 기능을 제공하는 핵심 도구입니다. Traces, Metrics, Logs 통합을 통해 개발자는 시스템 내부 동작을 깊이 이해하고 문제 해결 시간을 단축할 수 있습니다. 현재 Ruby OpenTelemetry 프로젝트는 메트릭과 로그의 안정화에 주력하며 지속적으로 발전하고 있습니다. 개발자들의 적극적인 참여와 피드백은 프로젝트 성숙도를 높여 Ruby 생태계 전반의 관측성 수준 향상에 기여할 것입니다.

댓글 0

댓글 작성

0/1000
정중하고 건설적인 댓글을 작성해 주세요.

아직 댓글이 없습니다

첫 번째 댓글을 작성해보세요!