반응형
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를 생성했다.
참고 자료
반응형