【发布时间】:2009-12-18 17:21:09
【问题描述】:
我正在尝试为我的 Rails 应用程序设置自定义 Pingdom 监控,并希望制作如下所示的 XML 响应:
<?xml version="1.0" encoding="UTF-8"?>
<pingdom_http_custom_check>
<status>OK</status>
<response_time>210.22</response_time>
</pingdom_http_custom_check>
其中 response_time 值是 Rails 呈现 XML 响应所用的时间。
我找到了一些 resources 用于使用 Mongrel 执行此操作,但我使用的是 Apache Passenger。
我有一个作为 Sinatra-Metal 端点实现的解决方案,如下所示:
class Pingdom < Sinatra::Base
set :views, "#{RAILS_ROOT}/app/views/metal"
get '/pingdom' do
@start_time = Time.now
builder :pingdom
end
end
然后我有一个构建器视图:
xml.instruct!
xml.pingdom_http_custom_check do |pingdom_http_custom_check|
pingdom_http_custom_check.status("OK")
pingdom_http_custom_check.response_time((Time.now-@start_time)*1000)
end
(注意 response_time 以毫秒为单位)。
这个实现足以检查应用程序是否启动,但它是一个金属端点这一事实意味着它实际上并没有命中主 Rails 应用程序,因此并不是一个很好的衡量当前响应时间的方法我的应用程序。
有人对更好的方法有什么好的建议吗?
干杯,阿方
【问题讨论】:
-
你到底想计时什么?总响应时间需要从客户端测量。当您处于呈现响应的中间时,如何计算出某些事情需要多长时间?也许您应该在 Apache 级别进行拦截。
-
我想我正在寻找两件事:衡量应用程序的当前渲染时间以及应用程序是否启动。或许 New Relic 更适合前者。
标签: ruby-on-rails ruby monitoring sinatra