OpenTelemetry Ruby SDK를 활용한 Rails 애플리케이션 계측 시작하기

Instrumenting Rails with OpenTelemetry

작성자
HackerNews
발행일
2024년 05월 09일

핵심 요약

  • 1 OpenTelemetry는 애플리케이션 관측성을 위한 개방형 표준을 제공하며, Ruby SDK를 통해 다양한 언어 및 벤더 간 계측을 표준화합니다.
  • 2 Ruby용 OpenTelemetry SDK는 Rails, Sidekiq 등 광범위한 자동 계측 기능을 제공하여 손쉬운 설정과 함께 트레이스, 메트릭, 로그를 수집합니다.
  • 3 자동 계측 외에도 OpenTelemetry API를 사용하여 현재 스팬에 사용자 ID와 같은 커스텀 속성을 추가하여 특정 트레이스를 쉽게 추적할 수 있습니다.

도입

소프트웨어 개발 경력 전반에 걸쳐 애플리케이션 계측은 항상 최우선 과제였습니다. 애플리케이션 실행 방식에 대한 포괄적인 데이터, 문제 발생 시 명확한 지표, 그리고 이 데이터를 저장할 중앙 집중식 공간은 엔지니어와 비즈니스에 큰 이점을 제공합니다. 기존 벤더들은 언어별 플러그인을 제공했지만 특정 벤더에 종속된다는 단점이 있었습니다. OpenTelemetry는 이러한 한계를 극복하고 애플리케이션 관측 방식을 위한 개방형 표준을 정의함으로써 언어와 벤더를 아우르는 계측 표준화를 목표로 하며, 본 글에서는 Ruby SDK에 초점을 맞춰 그 이점과 현재의 특징을 탐구합니다.

OpenTelemetry는 애플리케이션의 동작을 이해하는 데 필수적인 세 가지 유형의 시그널을 방출하며, 이들을 서로 연결하여 심층 분석을 용이하게 합니다.

OpenTelemetry 시그널 유형

  • 트레이스 (Traces)
    • 특정 요청에 대한 애플리케이션의 여정을 시각화하여, 결과를 제공하기 위해 함께 작동하는 모든 구성 요소 및 종속성을 명확하게 보여줍니다.
    • Rails에서는 들어오는 요청, 데이터베이스 호출, 응답 렌더링 과정을 시간 순서대로 아름다운 시각 자료로 나타낼 수 있습니다.
    • 트레이스를 구성하는 개별 조각들을 스팬(Spans)이라고 합니다.
  • 메트릭 (Metrics)
    • 나중에 분석하기 위해 특정 시점의 측정값을 캡처합니다.
    • 단순한 카운터부터 시간 경과에 따른 값을 추적하는 히스토그램 데이터까지 다양합니다.
    • Rails 컨텍스트에서는 200이 아닌 상태 코드를 반환한 횟수 또는 Sidekiq 큐의 특정 시점 크기 등이 예시가 될 수 있습니다.
  • 로그 (Logs)
    • 일반적인 애플리케이션 로그를 의미하며, OpenTelemetry SDK를 통해 방출될 때 스팬 및 메트릭과 연결되어 컨텍스트 내에서 문제를 쉽게 진단할 수 있도록 합니다.
    • OpenTelemetry는 로그가 포맷되어야 하는 구조를 명시합니다.

Ruby 시작하기

Ruby SDK는 Rails, Sidekiq 등 다양한 라이브러리에 대한 자동 계측 기능을 풍부하게 제공하여, 플러그 앤 플레이 방식으로 OpenTelemetry를 시작할 수 있게 합니다.

  1. Gemfile 설정: ruby gem 'opentelemetry-exporter-otlp' gem 'opentelemetry-auto-instrumentation' gem 'opentelemetry-instrumentation-rails'

  2. 초기화 파일 생성: 애플리케이션 부팅 시 OpenTelemetry를 설정하는 초기화 파일을 생성합니다. ```ruby require ‘opentelemetry/sdk’ require ‘opentelemetry/exporter/otlp’ require ‘opentelemetry/instrumentation/all’

OpenTelemetry::SDK.configure do |c| c.service_name = ‘my-rails-app’ c.use_all # 모든 자동 계측 라이브러리 활성화 end ``` * service_name을 설정하여 시그널의 출처를 식별합니다. * use_all 메서드는 내성(introspection)을 사용하여 Rails와 같은 특정 계측을 초기화할지 여부를 결정합니다. 이를 통해 초기 요청부터 데이터베이스 호출, 응답 렌더링까지 Rails 앱의 모든 과정에 대한 스팬이 자동으로 방출됩니다.

커스텀 컨텍스트 추가

자동 계측 외에, 모니터링 서비스에서 검사하고 싶은 커스텀 컨텍스트를 트레이스에 추가할 수 있습니다. 예를 들어, 고객 ID를 추가하여 특정 고객이 문제를 보고했을 때 관련 트레이스를 쉽게 추적할 수 있습니다.

```ruby class ApplicationController < ActionController::Base before_action :set_current_user_id

private

def set_current_user_id span = OpenTelemetry::Trace.current_span span.set_attribute(‘enduser.id’, current_user.id) end end ``` 이 코드는 현재 스팬을 가져와 enduser.id라는 새로운 속성을 추가합니다. OpenTelemetry는 정보를 표준적인 방식으로 캡처하기 위한 속성 목록인 Semantic Conventions을 정의하고 있으며, 이를 활용하여 특정 사용자별 트레이스를 쿼리할 수 있습니다.

결론

본 게시물에서는 OpenTelemetry의 기본적인 개념, Ruby SDK를 이용한 시작 방법, 자동 계측의 활용, 그리고 텔레메트리에 커스텀 속성을 추가하는 방법에 대해 다루었습니다. OpenTelemetry는 벤더 종속성에서 벗어나 표준화된 방식으로 애플리케이션의 관측성을 확보하는 강력한 도구임을 확인했습니다. 다음 2부에서는 텔레메트리 출처에 대한 더 많은 정보를 추가하고, Honeycomb과 같은 모니터링 시스템으로 텔레메트리를 내보내는 구체적인 방법을 심층적으로 다룰 예정입니다. 이를 통해 개발자들은 애플리케이션의 건강 상태를 더욱 정밀하게 파악하고 문제 해결 시간을 단축할 수 있을 것입니다.

댓글 0

로그인이 필요합니다

댓글을 작성하거나 대화에 참여하려면 로그인이 필요합니다.

로그인 하러 가기

아직 댓글이 없습니다

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