42

Answer to Life, the Universe, and the IT

Graphite mit mod_wsgi auf CentOS 7 installieren

| 0 comments

Graphite ist ein Tool mit welchem man z.B. Performancegraphen für Systeme zeichnen lassen kann. Hier will ich nun kurz zeigen wie man ein graphite auf einem frischen CentOS 7 zum laufen bekommt.

Vorbereitungen

Zur Vorbereitung auf die Installation und um sicher zu gehen dass alles funktioniert, habe ich zuerst einmal die Firewall ausgeschaltet und selinux auf permissive geschaltet.

Als erstes sollte man EPEL einbinden und dann die benötigten Pakete sowie pip installieren. Die eigentliche
graphite installation passiert dann per pip.

# yum install http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm
# yum update
# yum install wget httpd net-snmp perl pycairo mod_wsgi python-devel git gcc-c++ python-pip node npm cairo cairo-devel pycairo-devel

Installation

Jetzt beginnt die Installation der graphite-Komponenten.

# pip install django Twisted django-tagging whisper graphite-web carbon

Als nächstes erzeugt man aus den .example Dateien die initialen Konfigurationsdateien.

# cp /opt/graphite/conf/storage-schemas.conf.example /opt/graphite/conf/storage-schemas.conf
# cp /opt/graphite/conf/storage-aggregation.conf.example /opt/graphite/conf/storage-aggregation.conf
# cp /opt/graphite/conf/graphite.wsgi.example /opt/graphite/conf/graphite.wsgi
# cp /opt/graphite/conf/graphTemplates.conf.example /opt/graphite/conf/graphTemplates.conf
# cp /opt/graphite/conf/carbon.conf.example /opt/graphite/conf/carbon.conf
# cp /opt/graphite/webapp/graphite/local_settings.py.example /opt/graphite/webapp/graphite/local_settings.py
# chown -R apache:apache /opt/graphite/storage/

Retention verändern

Graphite nutzt Whisper als Storagebackend welches eine RRD Implementierung in Python darstellt. Um zu verhindern dass die RRD-Dateien unendlich wachsen, kann man eine retention einstellen nach welcher die Datenpunkte gelöscht werden. Dies definiert man in der /opt/graphite/conf/storage-schemas.conf. Hier ein kurzes Beispiel:

[default]
pattern = .*
retentions = 10s:60d, 1m:120d, 5m:180d, 15m:1y, 1h:2y

Dieses Beispiel hebt alle 10s-Samples für 60 Tage auf, die 1min-Samples für 180,… .
Falls man das feiner einstellen möchte, kann man solch einen Block kopieren und die pattern-Zeile mit einer passenden regex ersetzen und dann dafür die retention ändern.

DB initialisieren

Als nächstes muss man die Datenbank initialisieren wobei ein User angelegt wird unter welchem die Graphen gespeichert werden. Nach der Initialisierung der Datenbank muss sie dann noch für den Apache zugreifbar gemacht werden.

# /opt/graphite/webapp/graphite/python manage.py syncdb
# chown apache:apache /opt/graphite/storage/graphite.db

autom. starten von graphite

Die Vorbereitungen sind nun abgeschlossen und man kann mit dem automatischen starten von graphite beginnen.

carbon-cache automatisch starten

Carbon-cache ist ein cashing layer welcher die Messdaten von externen Programmen entgegennimmt und dann in Whisper speichert. Hier das init-Script (/etc/init.d/carbon) um das ganze automatisch beim booten zu starten.


#!/bin/bash
#
# Carbon (part of Graphite)
#
# chkconfig: 3 50 50
# description: Carbon init.d
. /etc/rc.d/init.d/functions

prog=carbon
RETVAL=0

start() {
        echo -n $"Starting $prog: "

        /opt/graphite/bin/carbon-cache.py start
        RETVAL=$?

        if [ $RETVAL = 0 ]; then
                success "carbon started"
        else
                failure "carbon failed to start"
        fi

        echo
        return $RETVAL
}

stop() {
        echo -n $"Stopping $prog: "

        /opt/graphite/bin/carbon-cache.py stop > /dev/null 2>&1
        RETVAL=$?

        if [ $RETVAL = 0 ]; then
                success "carbon stopped"
        else
                failure "carbon failed to stop"
        fi

        echo
        return $RETVAL
}

# See how we were called.
case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  status)
        /opt/graphite/bin/carbon-cache.py status
        RETVAL=$?
        ;;
  restart)
        stop
        start
        ;;
  *)
        echo $"Usage: $prog {start|stop|restart|status}"
        exit 1
esac

exit $RETVAL

Apache Conf

Damit graphite per mod_wsgi direkt vom Apache gestartet werden kann, hier die passende config (/etc/httpd/conf.d/graphite.conf).

LoadModule wsgi_module modules/mod_wsgi.so

WSGISocketPrefix /var/run/httpd/wsgi

Listen 8000

        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 "/media/">
                SetHandler None
        

        
                #Order deny,allow
                #Allow from all
                Options All
                AllowOverride All
                Require all granted

graphite-web anpassen

Als nächstes muss noch in der /opt/graphite/webapp/graphite/local_settings.py der SECRET_KEY sowie die TIME_ZONE angepasst werden und schon kann man graphite starten.

START

# systemctl enable httpd
# chkconfig carbon on
# /etc/init.d/carbon start
# systemctl start httpd

Nun noch einen Webbrowser starten welcher sich auf Port 8000 des Servers connected und schon strahlt einem ein frisches graphite entgegen.
graphite

Leave a Reply

Required fields are marked *.


This site uses Akismet to reduce spam. Learn how your comment data is processed.