Skip to content

Instantly share code, notes, and snippets.

@mat
Created August 12, 2011 19:43
Show Gist options
  • Save mat/1142828 to your computer and use it in GitHub Desktop.
Save mat/1142828 to your computer and use it in GitHub Desktop.
Turn an Ubuntu 10.04 server into a StatsD/Graphite server
# This needs to be in your server's config somewhere, probably
# the main httpd.conf
NameVirtualHost *:80
# You may need to manually edit this file to fit your needs.
# This configuration assumes the default installation prefix
# of /opt/graphite/, if you installed graphite somewhere else
# you will need to change all the occurances of /opt/graphite/
# in this file to your chosen install location.
<VirtualHost *:80>
ServerName graphite
DocumentRoot "/opt/graphite/webapp"
ErrorLog /opt/graphite/storage/log/webapp/error.log
CustomLog /opt/graphite/storage/log/webapp/access.log common
# I've found that an equal number of processes & threads tends
# to show the best performance for Graphite (ymmv).
WSGIDaemonProcess graphite processes=5 threads=5 display-name='%{GROUP}' inactivity-timeout=120
WSGIProcessGroup graphite
# You will need to create this file! There is a graphite.wsgi.example
# file in this directory that you can safely use, just copy it to graphite.wgsi
WSGIScriptAlias / /opt/graphite/conf/graphite.wsgi
Alias /content/ /opt/graphite/webapp/content/
<Location "/content/">
SetHandler None
</Location>
# NOTE: In order for the django admin site media to work you
# must change @DJANGO_ROOT@ to be the path to your django
# installation, which is probably something like:
# /usr/lib/python2.6/site-packages/django
Alias /media/ "@DJANGO_ROOT@/contrib/admin/media/"
<Location "/media/">
SetHandler None
</Location>
# The graphite.wsgi file has to be accessible by apache. It won't
# be visible to clients because of the DocumentRoot though.
<Directory /opt/graphite/conf/>
Order deny,allow
Allow from all
</Directory>
</VirtualHost>
TODO:
- edit /opt/statsd/local.js
- correct the graphite host to localhost
- if desired, put 'debug: true' in there
- make the box accessible via the hostname 'graphite'
- update conf/storage-schemas.conf, see example for these retention rules:
6 hours of 10 second data
1 week of 1 minute data
5 years of 10 minute data
#!/bin/bash
version=0.9.9
# install git and graphite dependencies
aptitude install git-core curl python-cairo python-pip python-django memcached python-memcache python-ldap python-twisted apache2 libapache2-mod-python libapache2-mod-wsgi
# download and install everything for graphite
mkdir -pv /opt/graphite/install
cd /opt/graphite/install
for a in graphite-web carbon whisper; do
wget "http://launchpad.net/graphite/0.9/$version/+download/$a-$version.tar.gz"
tar xfz $a-$version.tar.gz
cd $a-$version
python setup.py install
cd ..
done
pip install django-tagging
# carbon: copy conf.example to conf
for a in carbon.conf graphTemplates.conf storage-schemas.conf graphite.wsgi; do
cp -v /opt/graphite/conf/$a.example /opt/graphite/conf/$a
done
cp -v /opt/graphite/webapp/graphite/local_settings.py.example \
/opt/graphite/webapp/graphite/local_settings.py
# apache conf
chown -Rv www-data:www-data /opt/graphite/storage/
cp -v /opt/graphite/install/graphite-web-$version/examples/example-graphite-vhost.conf \
/etc/apache2/sites-available/graphite.conf
ln -sv /etc/apache2/sites-available/graphite.conf \
/etc/apache2/sites-enabled/graphite.conf
/etc/init.d/apache2 restart
# run syncdb to setup the db and prime the authentication model (if you're using the DB model)
cd /opt/graphite/webapp/graphite
python manage.py syncdb
# start the carbon cache
/opt/graphite/bin/carbon-cache.py start
#!/bin/bash
version=116dfe36820159ff2633090d130abcd16a98aefe
# install nodejs from seperate apt repo
aptitude install python-software-properties
add-apt-repository ppa:chris-lea/node.js
aptitude update
aptitude install nodejs=0.4.10-1chl1~lucid1
# install the node package manager for later use
curl http://npmjs.org/install.sh | sudo sh
npm install express
# clone and setup statsd
git clone https://github.com/etsy/statsd.git /opt/statsd
cd /opt/statsd && git checkout $version
cp -v /opt/statsd/exampleConfig.js /opt/statsd/local.js
# start statsd
# node stats.js local.js
# Schema definitions for whisper files. Entries are scanned in order,
# and first match wins.
#
# [name]
# pattern = regex
# retentions = timePerPoint:timeToStore, timePerPoint:timeToStore, ...
[stats]
priority = 110
pattern = ^stats\..*
retentions = 10:2160,60:10080,600:262974
[default_1min_for_1day]
pattern = .*
retentions = 60s:1d
@b1-88er
Copy link

b1-88er commented Jun 19, 2013

You don't know, how grateful i am for this recipe :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment