- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我正在开发一个 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_start
和 shutdown
您插入到 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 问题有两种解决方案:
手动调用NewRelic::Agent.after_fork
来自 fork 的 child ,就在 fork 之后。
如果您使用的是 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/
以下是一个非常简单的ruby服务器。 require 'socket' local_socket = Socket.new(:INET, :STREAM) local_addr = Socket.
我正在使用 OS X(使用 bash),并且是 unix 的新手。我想知道是否可以修改一些文件以便运行 ruby 程序,我不需要“ruby file.rb”,而是可以运行“ruby.rb”。 有理
我在用 Ruby 替换字符串时遇到一些问题。 我的原文:人之所为不如兽之所为。 我想替换为:==What== human does is not like ==what== animal does.
我想在一个循环中从 Ruby 脚本做这样的事情: 写一个文件a.rb(每次迭代都会改变) 执行系统(ruby 'a.rb') a.rb 将带有结果的字符串写入文件“results” a.rb 完成并且
我的问题是尝试创建一个本地服务器,以便我可以理解由我的新团队开发的应用程序。我的问题是我使用的是 Ruby 2.3.3,而 Gemfile 需要 2.3.1。我无法编辑 Gemfile,因为我被告知很
我有一个使用 GLI 框架用 Ruby 编写的命令行实用程序。我想在我的主目录中配置我的命令行实用程序,使用 Ruby 本身作为 DSL 来处理它(类似于 Gemfile 或 Rakefile)。 我
我的 Rails 应用 Controller 中有这段代码: def delete object = model.datamapper_class.first(:sourced_id =>
我正在寻找的解析器应该: 对 Ruby 解析友好, 规则设计优雅, 产生用户友好的解析错误, 用户文档的数量应该比计算器示例多, UPD:允许在编写语法时省略可选的空格。 快速解析不是一个重要的特性。
我刚开始使用 Ruby,听说有一种“Ruby 方式”编码。除了 Ruby on Rails 之外,还有哪些项目适合学习并被认可且设计良好? 最佳答案 Prawn被明确地创建为不仅是一个该死的好 PDF
我知道之前有人问过类似的问题,但是我该如何构建一个无需在前面输入“ruby”就可以在终端中运行的 Ruby 文件呢? 这里的最终目标是创建一个命令行工具包类型的东西。现在,为了执行我希望用户能够执行的
例如哈希a是{:name=>'mike',:age=>27,:gender=>'male'}哈希 b 是 {:name=>'mike'} 我想知道是否有更好的方法来判断 b 哈希是否在 a 哈希内,而
我是一名决定学习 Ruby 和 Ruby on Rails 的 ASP.NET MVC 开发人员。我已经有所了解并在 RoR 上创建了一个网站。在 ASP.NET MVC 上开发,我一直使用三层架构:
最近我看到 Gary Bernhardt 展示了他用来在 vim 中执行 Ruby 代码的 vim 快捷方式。捷径是 :map ,t :w\|:!ruby %. 似乎这个方法总是执行系统 Rub
在为 this question about Blue Ruby 选择的答案中,查克说: All of the current Ruby implementations are compiled to
我有一个 Ruby 数组 > list = Request.find_all_by_artist("Metallica").map(&:song) => ["Nothing else Matters"
我在四舍五入时遇到问题。我有一个 float ,我想将其四舍五入到小数点后的百分之一。但是,我只能使用 .round ,它基本上将它变成一个 int,意思是 2.34.round # => 2. 有没
我使用 ruby on rails 编写了一个小型 Web 应用程序,它的主要目的是上传、存储和显示来自 xml(文件最多几 MB)文件的结果。运行大约 2 个月后,我注意到 mongrel 进程
我们如何用 Ruby 转换像这样的字符串: 𝑙𝑎𝑡𝑜𝑟𝑟𝑒 收件人: Latorre 最佳答案 s = "𝑙𝑎𝑡𝑜𝑟𝑟𝑒" => "𝑙𝑎𝑡𝑜𝑟𝑟𝑒" s.u
通过 ruby monk 时,他们偶尔会从左侧字段中抛出一段语法不熟悉的代码: def compute(xyz) return nil unless xyz xyz.map {|a,
不确定我做错了什么,但我似乎弄错了。 问题是,给你一串空格分隔的数字,你必须返回最大和最小的数字。 注意:所有数字都是有效的 Int32,不需要验证它们。输入字符串中始终至少有一个数字。输出字符串必须
我是一名优秀的程序员,十分优秀!