At Etsy, they graph everything, which they use to great effect.
Collecting statistics is cool because it gives you hard data about how your software is performing. This in turn gives you powerful analytical tools to dig deep into your code, and find out what’s really going on (especially true when combined with a visualisation tool such as Graphite). It let you see the impact of code or infrastructure changes, and to quickly identify problems. Perhaps most importantly, it is only when armed kind of hard data that you can even begin to grasp at the nettles of code optimisation, growth and scalability.
Introducing StatsD for Elgg
With this in mind, and because I needed to collect some stats for a couple of client projects, I’ve put up on Github the first version of an Elgg statsD module. When installed and configured, this module will interface with a statsd server and collect a whole bunch of statistics from your running Elgg site.
Out of the box the current version of the plugin can log:
- Events & Hooks (which in turn give you things like user signup events and object creation)
- PHP Errors, Notices and Warnings
- Elgg popups (system messages and error messages)
- Database calls
- Script execution time
In addition you can record your own statistics by making a call to wrapper functions contained in the plugin itself.
All data will be logged into a custom “bucket”, which is by default derived from your Elgg site name. This lets you log statistics from multiple different sites to a common statsd server.
Installation is pretty straightforward once you’ve installed the base infrastructure. Follow the instructions for installing graphite, nodeJS and statsd from the various sites around the internet, and then upload the elgg-statsd plugin to your Elgg site’s mod directory.
Once activated, you can specify the statsd server you wish to log to and configure what statistics you want to record.
P.S. If you try and set this up and are seeing errors in your graphite log along the lines of “
create() takes at most 5 arguments (6 given)“, then you are likely falling foul of this bug.
My solution was to build Whisper from the latest code in
master rather than the stable 0.9.x branch. This worked for me, but of course YMMV.