NewRelic Ruby Agent:错误不被忽略

时间:2016-04-17 12:37:24

标签: ruby sidekiq newrelic

在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

1 个答案:

答案 0 :(得分:1)

不要试图忽略交易,而是最好定位生成的错误。如果存在特定的错误类,您希望New Relic Ruby代理忽略您可以使用error_collector.ignore_errors configuration option。另一种可能的解决方案是使用NewRelic::Agent#ignore_error_filter方法过滤代理正在跟踪的错误。