이메일 서비스
이 서비스는 주문이 접수되면 사용자에게 확인 이메일을 보낸다.
트레이싱 초기화하기
핵심 오픈텔레메트리(OpenTelemetry) SDK와 익스포터 Ruby gem뿐만 아니라, 자동 계측
라이브러리에 필요한 gem(예: Sinatra)도 require로 불러와야 한다.
require "opentelemetry/sdk"
require "opentelemetry/exporter/otlp"
require "opentelemetry/instrumentation/sinatra"
Ruby SDK는 오픈텔레메트리 표준 환경 변수를 사용하여 OTLP 내보내기, 리소스 속성, 서비스 이름을 자동으로 설정한다. 오픈텔레메트리 SDK를 초기화할 때 사용할 자동 계측 라이브러리(예: Sinatra)도 지정한다.
OpenTelemetry::SDK.configure do |c|
c.use "OpenTelemetry::Instrumentation::Sinatra"
end
트레이스
자동 계측된 스팬에 속성 추가하기
자동 계측된 코드가 실행되는 동안 컨텍스트에서 현재 스팬을 가져올 수 있다.
current_span = OpenTelemetry::Trace.current_span
스팬에 여러 속성을 추가하려면 스팬 객체의 add_attributes를 사용한다.
current_span.add_attributes({
"app.order.id" => data.order.order_id,
})
단일 속성만 추가하려면 스팬 객체의 set_attribute를 사용한다.
span.set_attribute("app.email.recipient", data.email)
새 스팬 생성하기
오픈텔레메트리 트레이서 객체의 in_span을 사용하여 새 스팬을 생성하고 활성
컨텍스트에 스팬을 넣을 수 있다. do..end 블록과 함께 사용하면 블록 실행이 끝날
때 스팬이 자동으로 종료된다.
tracer = OpenTelemetry.tracer_provider.tracer('email')
tracer.in_span("send_email") do |span|
# 스팬 컨텍스트 내에서 실행할 로직
end
메트릭
메트릭 초기화하기
오픈텔레메트리 메트릭 SDK와 OTLP 메트릭 익스포터는 email_server.rb 파일의
최상위 수준에서 초기화한다. 먼저 이들을 사용하기 위한 require 문이 필요하다.
require "opentelemetry-metrics-sdk"
require "opentelemetry-exporter-otlp-metrics"
Ruby SDK는 오픈텔레메트리 표준 환경 변수를 사용하여 OTLP 내보내기, 리소스 속성, 서비스 이름을 자동으로 설정한다. 오픈텔레메트리 메트릭 SDK를 초기화할 때 미터 프로바이더와 메트릭 리더도 설정해야 한다.
otlp_metric_exporter = OpenTelemetry::Exporter::OTLP::Metrics::MetricsExporter.new
OpenTelemetry.meter_provider.add_metric_reader(otlp_metric_exporter)
meter = OpenTelemetry.meter_provider.meter("email")
미터 프로바이더를 통해 미터에 접근할 수 있으며, 이를 사용하여 전역 메트릭 (예:
counter)을 생성할 수 있다.
$confirmation_counter = meter.create_counter("app.confirmation.counter", unit: "1", description: "Counts the number of order confirmation emails sent")
커스텀 메트릭
현재 다음 커스텀 메트릭을 사용할 수 있다.
app.confirmation.counter: 전송된 주문 확인 이메일 수의 누적값
로그
로그 초기화하기
오픈텔레메트리 로그 SDK와 OTLP 로그 익스포터는 email_server.rb 파일의 최상위
수준에서 초기화한다. 먼저 이들을 사용하기 위한 require 문이 필요하다.
require "opentelemetry-logs-sdk"
require "opentelemetry-exporter-otlp-logs"
Ruby SDK는 오픈텔레메트리 표준 환경 변수를 사용하여 OTLP 내보내기, 리소스 속성, 서비스 이름을 자동으로 설정한다. 오픈텔레메트리 로그 SDK를 초기화할 때 전역 로거를 생성하려면 로거 프로바이더가 필요하다.
$logger = OpenTelemetry.logger_provider.logger(name: "email")
구조화된 로그 생성하기
로거의 on_emit 메서드를 사용하여 구조화된 로그를 작성할 수 있다.
severity_text(예: INFO, ERROR), 사람이 읽을 수 있는 body, 그리고 추후
로그를 조회할 때 도움이 될 수 있는 app.email.recipient 속성을 포함한다.
$logger.on_emit(
timestamp: Time.now,
severity_text: "INFO",
body: "Order confirmation email sent",
attributes: { "app.email.recipient" => data.email }
)
피드백
이 페이지가 도움이 되었나요?
Thank you. Your feedback is appreciated!
Please let us know how we can improve this page. Your feedback is appreciated!