我在使用New Relic监控我的应用时遇到了问题。
我有最新的Spree引擎安装在我的路由中,并拥有控制器作为root。
出于某种原因,New Relic只收集来自此根路由的数据,任何对Spree JSON API的调用都会被忽略,并且不会显示在Dashboard中,因此我只能看到一个事务而且它没用。
有没有办法在整个安装的应用上启用监控?我错过了什么吗?
答案 0 :(得分:6)
只要您在Rails 4.0或更高版本上运行,将以下内容添加到app/controllers/spree/api/base_controller_decorator.rb
或某个等效位置就可以连接仪器:
class Spree::Api::BaseController
include ActionController::Instrumentation
end
这是有效的,因为在Rails 4.0及更高版本中,New Relic的控制器工具基于ActiveSupport::Notifications
,而include ActionController::Instrumentation
可以使这些事件流动。
答案 1 :(得分:1)
我的猜测是这种情况正在发生,因为Spree的API继承自ActionController::Metal
,NewRelic没有挂钩。
这可能是一个很好的理由,可以在Spree中切换出来,所以请为此提交一个问题。
答案 2 :(得分:1)
我找到了一种绕过this article中的问题的方法。
使用以下代码创建app / controllers / spree / api / base_controller_decorator.rb:
require 'new_relic/agent/instrumentation/action_controller_subscriber'
require 'new_relic/agent/instrumentation/rails4/action_controller'
Spree::Api::BaseController.class_eval do
before_filter :check_for_user
include NewRelic::Agent::Instrumentation::ControllerInstrumentation
include NewRelic::Agent::Instrumentation::Rails4::ActionController
NewRelic::Agent::Instrumentation::ActionControllerSubscriber \
.subscribe(/^process_action.action_controller$/)
end