Ruby on rails 3 如何将同一代码中的New Relic数据报告回不同的应用程序名称?
我们有一个Rails web应用程序堆栈,其中包含一些在单独进程(Heroku实例)中运行EventMachine的代码。它们共享公共代码和类,将它们分开是没有意义的 我想以不同的应用程序名称向New Relic报告数据,这样实例统计数据(CPU、内存)就不会全部平均起来,因为EventMachine进程的使用特性与web进程非常不同 理想情况下,我希望EventMachine进程在Ruby on rails 3 如何将同一代码中的New Relic数据报告回不同的应用程序名称?,ruby-on-rails-3,heroku,eventmachine,newrelic,Ruby On Rails 3,Heroku,Eventmachine,Newrelic,我们有一个Rails web应用程序堆栈,其中包含一些在单独进程(Heroku实例)中运行EventMachine的代码。它们共享公共代码和类,将它们分开是没有意义的 我想以不同的应用程序名称向New Relic报告数据,这样实例统计数据(CPU、内存)就不会全部平均起来,因为EventMachine进程的使用特性与web进程非常不同 理想情况下,我希望EventMachine进程在newrelic.yml文件中选择不同的配置节 我尝试调用NewRelic::Control.instance.i
newrelic.yml
文件中选择不同的配置节
我尝试调用NewRelic::Control.instance.init\u插件(:agent\u enabled=>true,:env=>em process')
以使用不同的环境重新初始化。那没用
我还尝试关闭并重新启动代理:::NewRelic::agent.shutdown
,::NewRelic::Agent.manual_start(env:'connector')
但我在日志中看到:此代理从父进程10878连接--未发送关机
--这也不起作用
如何做到这一点?我从New Relic的Ben Weintraub那里得到了一个非常有用的答案 最好的选择是通过在
Gemfile
中设置require:false
,不自动请求并通过bundler自动启动代理:
gem 'newrelic_rpm', '~> 3.6.5.130', require: false
然后添加初始值设定项文件,例如config/initializers/new_relic.rb
:
require 'newrelic_rpm'
args = {}
args[:env] = 'em-process' if ($0 =~ /em-process/) # start in em-process environment if script name includes the word 'em-process'
NewRelic::Agent.manual_start(args)
这假定EventMachine进程的启动脚本的名称包括字符串em进程
谢谢你,本 TLDR:
一种更简洁的方法是在调用YourApp::Application.initialize之前将以下行添加到environment.rb
文件中代码>:
NewRelic::Control.instance.env = 'em-process' if ($0 =~ /em-process/)
详情:
诀窍是确保在运行NewRelic\u rpm.start\u插件之前设置NewRelic::Control.instance.env
(启动代理并读取env
值)。无法放入初始值设定项文件的原因是,config/initializers
中的文件在所有Railtie初始值设定项运行后加载
使用这种方法,您不需要在Gemfile中的newrelic_rpm gem上禁用auto require,也不需要创建新的初始值设定项文件,因此它更干净一些
同样,在我们的例子中,这种方法更好,因为我们不希望newrelic代理在rails控制台或迁移中运行,所以我们在newrelic.yml
文件中启用了agent\u-ENABLE:false
,当我们想要启用代理时,我们显式地设置了环境变量newrelic\u-ENABLE=true
(仅当我们的进程在Heroku上运行时)。当我们使用config/initializers/new_relic.rb
方法时,它导致代理在本地和Heroku上的rails控制台和迁移中启动,这是我们不希望的。我们尝试将手动启动
调用更改为:
NewRelic::Agent.manual_start(args) if ENV['NEWRELIC_ENABLE']
但是当未设置NEWRELIC\u ENABLE
时,我们遇到了异常,如undefined method'add\u method\u tracer'
,因为调用NEWRELIC::Agent.manual\u start
使这些检测方法可用
结果是,当在Gemfile
中设置require:false
时,newrelic\u rpm gem的设计没有表现良好