본문 바로가기
Dev/삽질 방지

[Datadog] HTTP 5XX일때만 Error tracking이 동작하는 문제 고치기

by ryush00 2023. 8. 30.

Datadog 라이브러리는 다른 APM 솔루션 라이브러리처럼 바로 drop해서 사용하기에 어려운 부분이 많아서 조금 아쉽다. 대표적인 문제로 Error tracking이 몇몇 요청에서 정상적으로 tracking되지 않는 문제가 있었다. 소스 코드를 확인해보니 HTTP Code가 5로 시작하지 않는 경우에는 Error tracking이 작동되지 않았다. 이로 인해서 HTTP가 500이 아닌데, 오류가 발생한 경우 오류가 무시되어 버리는 현상을 찾을 수 있었다.

아래 코드를 이용하면 HTTP Code가 404가 아닌 모든 오류를 추적할 수 있도록 데이터독의 내부 코드를 다시 정의한다.

module Datadog
  module Tracing
    module Contrib
      module ActionPack
        # Common utilities for ActionPack
        module Utils
          def self.exception_is_error?(exception)
            if defined?(::ActionDispatch::ExceptionWrapper)
              # Gets the equivalent status code for the exception (not all are 5XX)
              # You can add custom errors via `config.action_dispatch.rescue_responses`
              status = ::ActionDispatch::ExceptionWrapper.status_code_for_exception(exception.class.name)
              # Except 404, all exceptions are actually errors
              status.to_s != '404'
            else
              true
            end
          end
        end
      end
    end
  end
end

다른 오류 추적 솔루션들은 HTTP Code 기반보다는 오류 Class를 기반으로 무시할 수 있도록 기능이 되어 있는데, Datadog은 HTTP 5XX가 아니면 모두 무시하도록 되어 있는 부분이 조금 당황스러웠다. Datadog도 Class를 기반으로 오류를 무시할 수 있도록 개선되었으면 하는 바람에서 Github에 Issue를 생성했다.

참고 자료

댓글