Newrelic

July 30, 2014 20:44


最近一两个月CPU都跑满了,人一直处于忙碌状态,今天终于又交掉一件工作, 瞬间感觉轻松了一点。。。

Newrelic是一个监控的服务,将本地程序的运行状况提交到Newrelic服务, 由他来生成相关的报表数据,像我使用的Web服务,他可以编译每个请求所用的时间详情, 如一个请求中DB查询消耗了多长时间,Redis用了多长时间,页面渲染用了多长时间,等等 , 他会把这些统计做成图表。当然不只是Web应用,其它的也可以使用,而我,目前只使用了这一部分功能, 他还包括其它的很多功能,这些几乎都是实时的。

具体使用,我就不再详细说明了,官网有详细的指导,这次只说一下在grape + rack下遇到的一个问题. 直接把newrelic-grape这个Gem加到项目里来,部署后发现请求的记录全是显示为Proc#call.

在看源代码折腾半天后发现,其实是newrelicrpm会自动把所有的middleware包装一下, 而最后的执行代码就是一个proc,而newrelic-grepe是做了一个middleware放在了 Grape::Middleware::Error之前,由于后面的middleware被newrelicrpm包装了, 所以每个都会创建一条记录,而newrelic把最后一条记录的名称做为标识来显示了, 也就成了Proc#call,newrelic-grape的middleware不再是最后一条记录, 所以全部都显示为Proc#call

看到Newrelic 的Rack处理中有个参数可以disable包装middleware来进行统计, disablemiddlewareinstrumentation: true 这一条居然没在在默认的配置中。。把这个加入到config/newrelic.yml就好了。

最后在使用中发现有个developer mode,可以在 /newrelic 中显示请求的详细信息, 这个完全是在本地做的,所以有请求就会显示出来了,当然如果非Rails的项目还得配置一下才有, 在config.ru中加入

require 'newrelic_rpm'
require 'new_relic/rack/developer_mode'
use NewRelic::Rack::DeveloperMode

当然,这个也是从官方抄来的。。

Comments: