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.