gpt4 book ai didi

ruby - Ruby Gem 中的 NewRelic 事务跟踪

转载 作者:数据小太阳 更新时间:2023-10-29 06:43:12 25 4
gpt4 key购买 nike

我正在开发一个 Ruby gem,我想在其中添加 NewRelic 监控。该 gem 在作为守护进程运行并由 bluepill 监控的脚本中使用。我按照“Monitoring Ruby background processes and daemons”开始了。

我确认 gem 正在与 NewRelic 建立连接,因为该应用程序显示在我的门户中,但是,没有事务跟踪或被调用代码的任何指标分割。

这是我的 gem 的“入口”点,因为我试图围绕调用方法手动启动代理:

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 走在正确的轨道上,但不幸的是,该代码示例和博客文章是基于一个非常旧的 gem 版本,并且自那时以来内部结构发生了重大变化。好消息是较新版本的代理应该会使这更简单。

首先,我应该说我假设您的进程作为守护进程长时间保持事件状态,并重复调用 prepare_parse .

一般来说,显式 manual_startshutdown您插入到 prepare_parse 中的电话方法应该不是必需的——除了一些特殊情况(某些抽取任务和交互式 session )。 New Relic 代理将在需要时自动启动。您可以在此处查看有关 Ruby 代理何时自动启动以及如何控制此行为的详细信息:

为了监控这样的后台任务,从概念上讲,您可能需要两个级别的工具:事务跟踪器和方法跟踪器。您已经有了一个事务跟踪器,但您可能还想在 prepare_parse 中发生的主要工作 block 周围添加方法跟踪器。方法。这样做可以让您更好地了解每个 prepare_parse 中发生的事情。调用。您可以在此处找到有关添加方法跟踪器的详细信息:

用你打电话的方式add_transaction_tracer , 您调用 prepare_parse应该在 New Relic UI 的“后台任务”选项卡上显示为事务。

这里的一个警告可能是您将其作为守护进程运行。 Ruby 代理使用后台线程与 New Relic 服务器进行异步通信。由于线程不会在对 fork() 的调用之间复制,这意味着您有时必须在 fork() 之后手动重新启动代理(请注意,Ruby 的 Process.daemon 在下面使用了 fork,因此它也包含在内)。这是否有必要取决于 newrelic_rpm 要求的相对时间并调用fork/daemon (如果在调用 newrelic_rpm/fork 之后才需要 daemon,你应该没问题,否则请参见下文)。

fork 问题有两种解决方案:

  1. 手动调用NewRelic::Agent.after_fork来自 fork 的 child ,就在 fork 之后。

  2. 如果您使用的是 newrelic_rpm 3.7.1 或更高版本,则有一个实验性选项可以自动重新启动后台线程,您可以通过设置 restart_thread_in_children: true 在 newrelic.yml 文件中启用该选项。 .目前此功能默认关闭,但可能会在未来版本的代理中成为默认行为。

如果您仍然遇到问题,newrelic_agent.log 文件是调试问题的最佳选择。您需要通过设置 log_level: debug 来增加详细程度在您的 newrelic.yml 文件中以获得更详细的输出。

关于ruby - Ruby Gem 中的 NewRelic 事务跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20696880/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com