본문 바로가기
WIKI 기술 지식 베이스

Ruby 로그와 트레이스 상호 연관 (Correlating Ruby Logs and Traces)

원문 보기 위키 갱신

Ruby 애플리케이션의 로그에 트레이스 ID를 주입해 Datadog에서 로그와 트레이스를 연결하는 방법을 안내해요.

출처: 문서

본문

트레이스 상호 연관

로깅 같은 많은 경우에 트레이스 ID를 다른 이벤트나 데이터 스트림과 상호 연관하면 더 쉽게 교차 참조할 수 있어요.

Rails 애플리케이션에서 로깅

자동 주입

ActiveSupport::TaggedLogging(기본값), semantic_logger 또는 lograge를 사용하는 Rails 애플리케이션의 경우 트레이스 ID 주입이 자동으로 구성돼요.

경고: lograge를 사용할 때는 TaggedLogging을 비활성화해야 해요.

또한 관련 로그를 해당 트레이스에 연결하려면 트레이스 리매퍼를 추가해야 해요.

수동 주입

로거에 상호 연관 ID를 추가하려면 Datadog::Tracing.correlation으로 상호 연관 ID를 검색하는 로그 포맷터를 추가한 다음 이를 메시지에 추가해요.

Datadog 로깅과 제대로 상호 연관되도록 로그 메시지에 다음 항목이 나타나는 순서대로 포함되어 있는지 확인하세요:

  • dd.env=<ENV>: <ENV>는 Datadog::Tracing.correlation.env와 같음. 환경이 구성되어 있지 않으면 생략.
  • dd.service=<SERVICE>: <SERVICE>는 Datadog::Tracing.correlation.service와 같음. 기본 서비스 이름이 구성되어 있지 않으면 생략.
  • dd.version=<VERSION>: <VERSION>은 Datadog::Tracing.correlation.version과 같음. 애플리케이션 버전이 구성되어 있지 않으면 생략.
  • dd.trace_id=<TRACE_ID>: <TRACE_ID>는 Datadog::Tracing.correlation.trace_id와 같거나 로깅 중 활성 트레이스가 없으면 0.
  • dd.span_id=<SPAN_ID>: <SPAN_ID>는 Datadog::Tracing.correlation.span_id와 같거나 로깅 중 활성 트레이스가 없으면 0.

기본적으로 Datadog::Tracing.log_correlation은 dd.env=<ENV> dd.service=<SERVICE> dd.version=<VERSION> dd.trace_id=<TRACE_ID> dd.span_id=<SPAN_ID>를 반환해요.

트레이스가 활성화되어 있지 않고 애플리케이션 환경 및 버전이 구성되어 있지 않으면 dd.service= dd.trace_id=0 dd.span_id=0을 반환해요.

실제 예시:

require 'ddtrace'
require 'logger'

Datadog.configure do |c|
  c.env = 'production'
  c.service = 'billing-api'
  c.version = '2.5.17'
end

logger = Logger.new(STDOUT)
logger.progname = 'my_app'
logger.formatter  = proc do |severity, datetime, progname, msg|
  "[#{datetime}][#{progname}][#{severity}][#{Datadog::Tracing.log_correlation}] #{msg}\n"
end

# 트레이스가 활성화되지 않은 경우
logger.warn('This is an untraced operation.')
# [2019-01-16 18:38:41 +0000][my_app][WARN][dd.env=production dd.service=billing-api dd.version=2.5.17 dd.trace_id=0 dd.span_id=0] This is an untraced operation.

# 트레이스가 활성화된 경우
Datadog::Tracing.trace('my.operation') { logger.warn('This is a traced operation.') }
# [2019-01-16 18:38:41 +0000][my_app][WARN][dd.env=production dd.service=billing-api dd.version=2.5.17 dd.trace_id=8545847825299552251 dd.span_id=3711755234730770098] This is a traced operation.

더 알아보기 (Learn more)