每个请求都有新的Relic日志http_referer

时间:2014-11-11 19:28:26

标签: ruby-on-rails middleware newrelic

我们在应用程序控制器中有这个beofre_filter,以便首先记录HTTP_REFER

  def init_newrelic_agent
      ::NewRelic::Agent.add_custom_parameters(
        request_referer: request.referer,
        request_url: request.url,
        request_user_agent: request.user_agent
      )
    end

仅当请求落在rails控制器中时,才会添加上述自定义参数。 然而,有些请求甚至没有降落在那里,因为他们用假路线打我们的应用程序。 如果甚至在控制器初始化之前发生了一些错误,你将如何配置rails以在每个应用程序跟踪的newrelic中记录此params?

2 个答案:

答案 0 :(得分:3)

对于那些感兴趣的人,在具体实施之下:

#config/initializers/newrelic.rb
Rails.configuration.middleware.use  NewRelic::Rack::Custom  

#app/middlewares/newrelic/rack/custom.rb
module NewRelic
  module Rack

    class Custom
      def initialize(app)
        @app = app
      end

      def call(env)
        init_newrelic_agent(env)
        @app.call(env)
      end

      def init_newrelic_agent(env)
        ::NewRelic::Agent.add_custom_parameters(
          request_referer: env['HTTP_REFERER'],
          request_url: env['REQUEST_URI'],
          request_user_agent: env['HTTP_USER_AGENT']
        )
      end

    end
  end
end

答案 1 :(得分:1)

从3.9.0开始的New Relic Ruby代理的版本可以跟踪Rack middlewares中的事务,因此如果这些请求没有访问Rails控制器,那么添加您自己的包含这些参数的中间件可能会起作用。对于此类中间件的添加,Rack::Request是一个很好的选择。