bugcy013
6/21/2014 - 12:28 AM

Quick start how-to graphite base install on debian based systems

Quick start how-to graphite base install on debian based systems

This only gets graphite working on your local Linux box. Left to user to translate to remote server installation thereafter.

NOTE: Do everything as root user 

make sure apache2 is installed and working with wsgi
apt-get install apache2 -y
apt-get install libapache2-mod-wsgi -y
a2enmod wsgi
wsgi needs a place for its sockets
mkdir /etc/apache2/run
mkdir /var/run/wsgi
chmod 777 /etc/apache2/run /var/run/wsgi
this seems undocumented, thanks!
Install dependencies
apt-get install -y libapache2-mod-wsgi python-twisted python-memcache python-pysqlite2 python-simplejson
apt-get install -y python2.6 python-pip python-cairo python-django python-django-tagging
Install graphite elements
mkdir -p /root/graphite-install
cd /root/graphite-install
git clone https://github.com/graphite-project/graphite-web.git
git clone https://github.com/graphite-project/carbon.git
git clone https://github.com/graphite-project/whisper.git
git clone https://github.com/graphite-project/ceres
cd /root/graphite-install/whisper
git checkout 0.9.x
python setup.py install
cd /root/graphite-install/ceres
python setup.py install 
cd /root/graphite-install/carbon
git checkout 0.9.x
python setup.py install 
cd /root/graphite-install/graphite-web
git checkout 0.9.x
python check-dependencies.py
fix any missing dependencies
ignore warnings if certain you don't need a feature
python setup.py install
Setup configuration files and permissions
cp -v /opt/graphite/conf/carbon.conf.example /opt/graphite/conf/carbon.conf
cp -v /opt/graphite/conf/storage-schemas.conf.example /opt/graphite/conf/storage-schemas.conf
Create Django database
cp -v /opt/graphite/webapp/graphite/local_settings.py.example /opt/graphite/webapp/graphite/local_settings.py
Edit this file by uncommenting the entire DATABASES section
Otherwise next commands may fail with bizarre error
cd /opt/graphite/webapp/graphite
python manage.py syncdb
Make sure NO errors
Create a user/pass you'll never forget
chown -Rv www-data:www-data /opt/graphite/storage/
EXTREMELY IMPORTANT
Apache
Add below Apache configuration as a virtual host (details not covered here)
Or do this and struggle to make it work
cp -v /opt/graphite/examples/example-graphite-vhost.conf /etc/apache2/sites-available/graphite
Every "directory" and "location" in the virtual hosts file need these entries, or you'll get permission denied errors
apache versions before 2.4
Order deny,allow
Allow from all
apache versions 2.4 and after
Require all granted
a2ensite graphite
cp -v /opt/graphite/conf/graphite.wsgi.example /opt/graphite/conf/graphite.wsgi
apache2ctl -S
Check all is OK
service apache2 stop
service apache2 start
If you have trouble check permissions under this directory and/or run this again
chown -Rv www-data:www-data /opt/graphite/storage/
Seems some files are created by root that should be created by www-data user maybe
Start carbon daemon
cd /opt/graphite
/opt/graphite/bin/carbon-cache.py start
verify with:
lsof -nP -i :2003
TASK: automate this to start on reboot somehow
Add to /etc/hosts
127.0.1.3 graphite
tail -F /opt/graphite/storage/log/webapp/error.log
python /opt/graphite/examples/example-client.py
Hit http://graphite
Should show initial graphite interface
View results
Click down into "system" -> loadavg_5min
Find "Select Recent Data" icon in upper-left toolbar
Set to 10 mins
You should see lines appearing as script runs and feed data to Graphite via Carbon
Check out giraffe once you get some stats to shove in it
https://github.com/kenhub/giraffe
Just dump the files you get from the git clone into a directory under you default Apache install and tweedle with dashboard.js until you see something
Try this a few times on the CLI of your graphite server every few minutes
echo "system.logs.changed_last10 `find /var/log -mmin -10 | wc -l` `date +%s`" | nc -w 1 localhost 2003
Try similar commands to pass in other stats
echo must output a single integer.

WSGISocketPrefix /var/run/wsgi

<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
    
    WSGIDaemonProcess graphite processes=5 threads=5 display-name='%{GROUP}' inactivity-timeout=120
    WSGIProcessGroup graphite
    WSGIApplicationGroup %{GLOBAL}
    WSGIImportScript /opt/graphite/conf/graphite.wsgi process-group=graphite application-group=%{GLOBAL}
    WSGIScriptAlias / /opt/graphite/conf/graphite.wsgi 

    Alias /content/ /opt/graphite/webapp/content/
    <Location "/content/">
        SetHandler None
    </Location>
    
    Alias /media/ "@DJANGO_ROOT@/contrib/admin/media/"
    <Location "/media/">
        SetHandler None
    </Location>
    
    <Directory /opt/graphite/conf/>
        Order deny,allow
        Allow from all
    </Directory>
</VirtualHost>