我确认宝石正在建立与NewRelic的连接,因为应用程序显示在我的门户网站中,但是,没有任何事务跟踪或正在调用的代码的任何指标分解.
这是我的宝石的“入口”点,因为我试图在调用方法周围手动启动代理:
require 'fms/parser/version' require 'fms/parser/core' require 'fms/parser/env' require 'mongoid' ENV['NRCONFIG'] ||= File.dirname(__FILE__) + '/../newrelic.yml' require 'newrelic_rpm' module Fms module Parser def self.prepare_parse(filename) ::NewRelic::Agent.manual_start Mongoid.load!("#{File.dirname(__FILE__)}/../mongoid.yml",:development) Core.prepare_parse(filename) ::NewRelic::Agent.shutdown end end end
我也尝试将这个添加到模块中:
class << self include ::NewRelic::Agent::Instrumentation::ControllerInstrumentation add_transaction_tracer :prepare_parse,:category => :task end
我不完全确定我还能做什么.我确认代理能够与服务器进行通信,并启用事务跟踪.在后台应用程序选项卡中也没有任何内容.
这是迄今为止从代理日志中获得的最有用的信息:
[12/23/13 21:21:03 +0000 apivm (7819)] INFO : Environment: development [12/23/13 21:21:03 +0000 apivm (7819)] INFO : No known dispatcher detected. [12/23/13 21:21:03 +0000 apivm (7819)] INFO : Application: MY-APP [12/23/13 21:21:03 +0000 apivm (7819)] INFO : Installing Net instrumentation [12/23/13 21:21:03 +0000 apivm (7819)] INFO : Finished instrumentation [12/23/13 21:21:04 +0000 apivm (7819)] INFO : Reporting to: https://rpm.newrelic.com/[MASKED_ACCOUNT_NUMBER] [12/23/13 22:12:06 +0000 apivm (7819)] INFO : Starting the New Relic agent in "development" environment. [12/23/13 22:12:06 +0000 apivm (7819)] INFO : To prevent agent startup add a NEWRELIC_ENABLE=false environment variable or modify the "development" section of your newrelic.yml. [12/23/13 22:12:06 +0000 apivm (7819)] INFO : Reading configuration from /var/lib/gems/1.9.1/gems/fms-parser-0.0.6/lib/fms/../newrelic.yml [12/23/13 22:12:06 +0000 apivm (7819)] INFO : Starting Agent shutdown
唯一真正关心的是“没有已知的调度程序被检测到”.
我正在努力做什么?
解决方法
要开始,我应该说我假设你的进程作为守护进程长时间保持活动,并重复调用prepare_parse.
一般来说,您不必需要将您插入到prepare_parse方法中的显式的manual_start和shutdown调用(除了一些特殊情况(某些耙机任务和交互式会话)).新遗物将在需要时立即自动启动.您可以看到有关Ruby代理何时自动启动以及如何在此处控制此行为的详细信息:
> https://docs.newrelic.com/docs/ruby/forcing-the-ruby-agent-to-start
为了监控这样的后台任务,在概念上有两个级别的仪器,您可能需要:事务跟踪和方法示踪.你已经有了一个事务跟踪器,但是你也可能想要在你的prepare_parse方法中发生的主要工作块周围添加方法跟踪.这样做可以让您更好地了解每个prepare_parse调用过程中发生的情况.您可以在这里找到有关添加方法示踪剂的详细信息:
> https://docs.newrelic.com/docs/ruby/ruby-custom-metric-collection#method_tracers
通过您调用add_transaction_tracer的方式,您对prepare_parse的调用应显示为New Relic UI中“后台任务”选项卡上的事务.
这里的一个注意事项可能是你作为一个守护进程运行这个事实. Ruby代理使用后台线程与New Relic服务器进行异步通信.由于线程不会跨越对fork()的调用进行复制,这意味着有时必须在fork()之后手动重新启动代理程序(请注意,Ruby的Process.daemon使用fork,因此也包括在内).这是否需要取决于newrelic_rpm的要求的相对时间和对fork / daemon的调用(如果在调用fork / daemon之后不需要newrelic_rpm,则应该很好,否则见下文).
叉问题有两种解决方案:
>从分叉后的叉子手动调用NewRelic :: Agent.after_fork.
>如果您使用的是newrelic_rpm 3.7.1或更高版本,则可以通过设置restart_thread_in_children:true来自动重新启动可以在newrelic.yml文件中启用的后台线程的实验选项.此时默认关闭,但可能会成为未来版本代理中的默认行为.
如果你仍然遇到麻烦,那么newrelic_agent.log文件是你最好的选择.您将通过在newrelic.yml文件中设置log_level:debug来增加详细程度,以获得更详细的输出.