在Sidekiq工作者中,我想忽略NewRelic中的一些错误,同时仍然提高它们,以便Sidekiqs重试行为开始。
我编写了一个帮助类来调用NewRelic::Agent.ignore_transaction
,但NewRelic仍会报告这些异常并抱怨错误率。我究竟做错了什么?
我想我可能误解了交易的范围?
module NewRelic
# Run a block which rescues some exceptions and ignores them in NewRelic
class IgnoreExceptions
class << self
def ignore(*class_list)
raise ArgumentError, 'Block required' unless block_given?
begin
yield
rescue errors_matching { |e| class_list.include?(e.class) }
NewRelic::Agent.ignore_transaction
raise
end
end
private
def errors_matching(&block)
Module.new.tap { |m| m.define_singleton_method(:===, &block) }
end
end
end
end
答案 0 :(得分:1)
不要试图忽略交易,而是最好定位生成的错误。如果存在特定的错误类,您希望New Relic Ruby代理忽略您可以使用error_collector.ignore_errors
configuration option。另一种可能的解决方案是使用NewRelic::Agent#ignore_error_filter
方法过滤代理正在跟踪的错误。