Garelic: Use Google Analytics as "New Relic" performance monitoring for your Rails app
This gem uses Google Analytics User Timing API to report application performance statistics directly to Google Analytics, where you can slice & dice your data as you wish.
Here are some features with pictures:
- Performance reports as a nice dashboard
- Histogram of response times for action
- Identify slow page loads & drill down to different actions
- Showing average response times for each action
- How much is spent in database & view generation for an action?
- How has the switch to Ruby 1.9.3 affected response time?
- In which action do we spent most time globaly?
This is a proof of concept and will probably break things. Use it at your own risk.
It's easy as 1-2-3.
Step 1. Add this line to your application's Gemfile:
Step 2. Add
<%= Garelic::Timing %> instrumentation to your GA code in application layout template like this:
(Please note the
_gaq.push(['_setSiteSpeedSampleRate', 100]); code for better testing.)
Step 3. Go to Google Analytics > Content > Site Speed > User Timings
- it's free
- shows slow performing pages (not only actions)
- show response times histogram for any action (response time averages tend to lie, since distribution of response times is multimodal)
- segment/slice/dice response data across any dimensions available in your GA account
- you can only track actions that return a response body (redirects, ajax-requests & async jobs are not supported)
- all timings are visible in page source code (if you are concerned about this look elsewere)
- caching GA code (e.g. page caching) & not modified response will probably break/skew reported statistics
- adding user timing table widgets to GA dashboards does not preserve sorting order (wtf?)
- it's kind of a hack
- add more fine-grained ActiveRecord instrumentation
- add support for adding custom user tracers (e.g. for external services)
- Fork it
- Create your feature branch (
git checkout -b my-new-feature)
- Commit your changes (
git commit -am 'Added some feature')
- Push to the branch (
git push origin my-new-feature)
- Create new Pull Request