Ruby Gem中的NewRelic事务跟踪

我正在开发一个我想添加NewRelic监控的 Ruby宝石.宝石用于作为守护进程运行并由bluepill监视的脚本.我跟着“ Monitoring Ruby background processes and daemons”开始.

我确认宝石正在建立与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

唯一真正关心的是“没有已知的调度程序被检测到”.

我正在努力做什么?

解决方法

我在New Relic工作,想添加一些关于最新版本的newrelic_rpm gem的最新的详细信息. TrinitronX在正确的轨道上,但不幸的是,代码示例和博客文章是基于一个非常旧版本的宝石,内部从那以后发生了重大变化.好消息是,新版本的代理应该使这更简单.

要开始,我应该说我假设你的进程作为守护进程长时间保持活动,并重复调用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来增加详细程度,以获得更详细的输出.

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...