This is a Django application to make it a bit simpler to use Munin to monitor various metrics for your Django app.
First, it includes a munin plugin that you can symlink into
/etc/munin/plugins/ and point at your django application and it will
gather data for munin to graph. Second, it contains a couple views
that return some very basic information about the state of your app:
database performance, number of users, number of sessions, etc. Third,
it provides a decorator to make it simple to expose your own custom
metrics to Munin.
django-munin into your python path with the usual
or whatever you are doing. Then add
munin to your
manage.py syncdb (it just needs to set up one database table
that it will use for performance testing).
To access the included basic views, add the following pattern to your
The views available there are then going to be at:
munin/db_performance/(milliseconds to perform insert/select/delete operations)
munin/total_users/(total number of Users)
munin/active_users/(number of users logged in in the last hour)
munin/total_sessions/(total number of sessions)
munin/active_sessions/(number of sessions that are not expired)
Those were the only metrics I could think of that would be potentially useful on just about any Django app and were likely to always be available.
(I'm going to assume that you are already a pro at configuring Munin. If not, go get on that. Munin is very cool)
plugins/django.py into your
For each metric that you want Munin to monitor, make a symlink in
/usr/share/munin/plugins/django.py with an
appropriate name. Eg, to monitor all five of the included ones (as
$ ln -s /usr/share/munin/plugins/django.py /etc/munin/plugins/myapp_db_performance $ ln -s /usr/share/munin/plugins/django.py /etc/munin/plugins/myapp_total_users $ ln -s /usr/share/munin/plugins/django.py /etc/munin/plugins/myapp_active_users $ ln -s /usr/share/munin/plugins/django.py /etc/munin/plugins/myapp_total_sessions $ ln -s /usr/share/munin/plugins/django.py /etc/munin/plugins/myapp_active_sessions
You then need to configure each of them in
For each, give it a stanza with
graph_category set. To
continue the above, you'd add something like:
[myapp_db_performance] env.url http://example.com/munin/db_performance/ env.graph_category myapp [myapp_total_users] env.url http://example.com/munin/total_users/ env.graph_category myapp [myapp_active_users] env.url http://example.com/munin/active_users/ env.graph_category myapp [myapp_total_sessions] env.url http://example.com/munin/total_sessions/ env.graph_category myapp [myapp_active_sessions] env.url http://example.com/munin/active_sessions/ env.graph_category myapp
If your HTTP server require Basic Authentication, you can add login and password as parameters:
[myapp_active_sessions] env.url http://example.com/munin/active_sessions/ env.graph_category myapp env.login mylogin env.password mypassword
Restart your Munin node, and it should start collecting and graphing that data.
Custom munin views
Those are pretty generic metrics though and the real power of this application is that you can easily expose your own custom metrics. Basically, anything that you can calculate in the context of a Django view in your application, you can easily expose to Munin.
django-munin includes a
@muninview decorator that lets you write a
regular django view that returns a list of
(key,value) tuples and it
will expose those to that
django.py munin plugin for easy graphing.
@muninview decorator takes a
config parameter, which is just a
string of munin config directives. You'll want to put stuff like
graph_info there. Possibly
graph_category too (if you include it there, remove it from the munin
plugin conf stanza). The view function that it wraps then just needs
to return a list of tuples.
The simplest way to get a feel for how this works is to look at how the included views were written. So check out munin/views.py.