Seite wählen

NETWAYS Blog

Better Late than never – Graphite-Web installation unter Debian 10 – Part 3

Photo by Vita Vilcina on UnsplashHerzlich Willkommen,

wir verliessen unsere tapferen Helden in der letzten Episode bei der schwierigen Aufgabe, Timmy, dem schlauen Collie, die Installation von Graphite-Web via Django zu erklären. Nein, Scherz beiseite. Wir sind nun im finalen Teil unserer dreiteiligen Serie und steigen bei der Finalisierung der Graphite-Web-Installation ein.

Zuletzt hatten wir die Apache2-Konfig, welche wir in die /etc/apache2/sites-available abgelegt hatten, per apachectl -t validiert. Nun folgt die Initialisierung des eigentlichen Graphite-Web Contents.

Zuerst die Initialisierung der Graphitedb.

PYTHONPATH=/opt/graphite/webapp django-admin.py migrate --settings=graphite.settings --run-syncdb

Gefolgt von der Benutzererstellung für das Graphite-Web Frontend.

PYTHONPATH=/opt/graphite/webapp django-admin.py createsuperuser --settings=graphite.settings

Abschließend die Generierung der statischen Website-Elemente.

PYTHONPATH=/opt/graphite/webapp django-admin.py collectstatic --noinput --settings=graphite.settings

Nach der Generierung versorgen wir die Ordner und Dateien mit der korrekten Berechtigung chown -R www-data. /opt/graphite.

Um das Ganze nun in Betrieb zu nehmen, aktivieren wir im Apache2 noch die ssl also auch wsgi-Module. Des Weiteren aktivieren wir auch die graphite-web-ssl.conf

#>a2enmod ssl;
#>a2enmod wsgi;
#>a2ensite graphite-web-ssl.conf;

Somit sind die Voraussetzungen für den Apache2 aktiviert und wir müssen nur noch Sorge dafür tragen, dass die Komponenten bei einem Neustart automatisch initialisiert werden.

systemctl enable apache2 --now
systemctl enable go-carbon.service --now

Nun kann die Website von Graphite-Web unter der angegeben IP-Adresse aufgerufen werden, wo man bei erfolgreichem Ablauf folgende Website sehen sollte:

Aus dem Off hört man eine Stimme von Rodrigo, dem Plantagenbesitzer, der fordert, dass dieser How-to-Guide mit Centos 8.1 wiederholt wird. Ich bedanke mich für die Aufmerksamkeit und freue mich, Sie gern wieder zu einer weiteren Episode ‚curacon fuego del graphite con centos ocho‘ begrüßen zu können.

Servus sagt David!

David Okon
David Okon
Senior Systems Engineer

Weltenbummler David hat aus Berlin fast den direkten Weg zu uns nach Nürnberg genommen. Bevor er hier anheuerte, gab es einen kleinen Schlenker nach Irland, England, Frankreich und in die Niederlande. Alles nur, damit er sein Know How als IHK Geprüfter DOSenöffner so sehr vertiefen konnte, dass er vom Apple Consultant den Sprung in unser Professional Services-Team wagen konnte. Er ist stolzer Papa eines Sohnemanns und bei uns mit der Mission unterwegs, unsere Kunden zu glücklichen Menschen zu machen.

Better Late than never – Graphite-Web-Installation unter Debian 10 – Part 2

Willkommen zum zweiten Teil des Blogposts zur Graphite-Web-Installation unter Debian 10.

Wir springen hier direkt an die Stelle, an der wir aufgehört haben, und editieren die storage-schemas.conf unter /etc/go-carbon/

In der Storage-Schemas liegt das default-storage Schema:
Dadurch dass wir Icinga 2 installiert haben und auch dort Graphen generieren möchten, nehmen wir das folgende Schema:

[icinga_internals]
pattern = ^icinga\..*\.(max_check_attempts|reachable|current_attempt|execution_time|latency|state|state_type)
retentions = 5m:7d
[icinga_default]
pattern = ^icinga\.
retentions = 1m:2d,5m:10d,30m:90d,360m:4y

Damit haben wir die Konfiguration vom go-carbon in diesem Beispiel abgeschlossen.

Der nächste Schritt ist nun Whisper selbst und Graphite-Web.
Da das Graphite-Web immer noch Python-lastig ist, müssen wir einen kleinen Schritt im Voraus machen.

Wir definieren die Pfade im Voraus:

export PYTHONPATH="/opt/graphite/lib/:/opt/graphite/webapp/"

Danach erfolgt der allseits beliebte und gefürchtete pip-Aufruf:

pip install --no-binary=:all: https://github.com/graphite-project/whisper/tarball/1.1.6
pip install --no-binary=:all: https://github.com/graphite-project/graphite-web/tarball/1.1.6

Nach der Installation der beiden Komponenten wechseln wir in das /opt/graphite/webapp/graphite Verzeichnis und kopieren die local_settings.py.example, damit wir eine local_settings.py Datei haben, um die Einstellungen zu verändern.

SECRET_KEY = 'Sollte_durch_eine_zufällige_Zeichenkette_ersetzt_werden'
ALLOWED_HOSTS = [ '*' ]  // Für den Testzweck belassen wir es bei dem Asterisk, es sollte aber in Produktivumgebungen ersetzt werden durch die Maschinen welche mit dem Graphite sprechen dürfen.
TIME_ZONE = 'America/Los Angeles' // Die Zeitzone ist selbsterklärend
WHISPER_DIR = '/var/lib/graphite/whisper' // Das Whisper Datei Verzeichnis wo unserer Whisper Dateien liegen

Kleiner Hinweis wegen der Random-Zeichenkette:

Diese kann man mit dem folgenden Kommando erzeugen, wenn man möchte:

openssl rand -base64 32

Nun müssen wir noch den Ordner für unsere Whisper-Dateien anlegen und berechtigen.

mkdir -pv /var/lib/graphite/whisper
chown -Rf carbon. /var/lib/graphite/whisper

Daraufhin kopieren wir das Graphite.wsgi File um, damit es verwendbar ist.

cp /opt/graphite/conf/graphite.wsgi.example /opt/graphite/conf/graphite.wsgi

An dieser Stelle kommt nun die Konfiguration des Apache2. Wenn jemand eine nginx-Konfiguration braucht, bitte ich diese Personen, sich in der Community zu melden, damit wir auswerten können, wie viele Anfragen es gibt, um eine ‚Standard‘-Konfig für die nächste Iteration dieses Blogposts zu erstellen. 🙂

Wir erstellen im Apache-Verzeichnis eine graphite-web-ssl.conf und befüllen diese mit dem folgenden Beispielinhalt. Dieser ist je nach Umgebung anzupassen.

cd /etc/apache2/sites-available/
vi graphite-web-ssl.conf

Inhalt der graphite-web-ssl.conf:

# Enable virtualhosts, perhaps by adding this to your server's config somewhere,
# probably the main httpd.conf
# NameVirtualHost *:443

# This line also needs to be in your server's config.
# LoadModule wsgi_module modules/mod_wsgi.so

# You 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 occurrences of /opt/graphite/
# in this file to your chosen install location.

LoadModule wsgi_module modules/mod_wsgi.so

# XXX You need to set this up!
# Read http://code.google.com/p/modwsgi/wiki/ConfigurationDirectives#WSGISocketPrefix
# For example, create a directory /var/run/wsgi and use that.
WSGISocketPrefix /var/run/apache2/wsgi

# Base Configuration
ServerName localhost.local
DocumentRoot "/opt/graphite/webapp"

# Log Configuration
ErrorLog /opt/graphite/storage/log/webapp/error.log
CustomLog /opt/graphite/storage/log/webapp/access.log common

# SSL Configuration
SSLEngine On
SSLCertificateFile /etc/pki/tls/private/certificate.crt
SSLCertificateKeyFile /etc/pki/tls/private/certificate.key
SSLCertificateChainFile /etc/pki/tls/private/certificate.pem

# Graphite Related Configuration
# 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
WSGIApplicationGroup %{GLOBAL}
WSGIImportScript /opt/graphite/conf/graphite.wsgi process-group=graphite application-group=%{GLOBAL}

# XXX 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

# XXX To serve static files, either:
# * Install the whitenoise Python package (pip install whitenoise)
# * Collect static files in a directory by running:
# django-admin.py collectstatic --noinput --settings=graphite.settings
# And set an alias to serve static files with Apache:
Alias /static/ /opt/graphite/static/

########################
# URL-prefixed install #
########################
# If using URL_PREFIX in local_settings for URL-prefixed install (that is not located at "/"))
# your WSGIScriptAlias line should look like the following (e.g. URL_PREFX="/graphite"

# WSGIScriptAlias /graphite /srv/graphite-web/conf/graphite.wsgi/graphite
# Alias /graphite/static /opt/graphite/webapp/content
# <Location "/graphite/static/">
# SetHandler None
#

# XXX 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/"

# The graphite.wsgi file has to be accessible by apache. It won't
# be visible to clients because of the DocumentRoot though.

Order deny,allow
Allow from all

= 2.4>
Require all granted

Order deny,allow
Allow from all

= 2.4>
Require all granted

Abschließend überprüfen wir die Konfig mit

apachectl -t

Hier erreichen wir nun den spannenden Teil (Cliffhanger) der Graphite-Web-Installation, und wie zuletzt um den Spannungsbogen zu erhöhen,
bitte ich um etwas Geduld, da im finalen und letzten spannenden Teil dieser Serie wir Graphite-Web initialisieren werden.

Bis dahin mit einem Servus

David

David Okon
David Okon
Senior Systems Engineer

Weltenbummler David hat aus Berlin fast den direkten Weg zu uns nach Nürnberg genommen. Bevor er hier anheuerte, gab es einen kleinen Schlenker nach Irland, England, Frankreich und in die Niederlande. Alles nur, damit er sein Know How als IHK Geprüfter DOSenöffner so sehr vertiefen konnte, dass er vom Apple Consultant den Sprung in unser Professional Services-Team wagen konnte. Er ist stolzer Papa eines Sohnemanns und bei uns mit der Mission unterwegs, unsere Kunden zu glücklichen Menschen zu machen.

Better Late than never – Graphite-Web-Installation unter Debian 10 – Part 1

Hallo erstmal und vielen Dank für die Aufmerksamkeit.

Wie ich leider schon viel zu oft angekündigt hatte in den Kommentaren zu meinen häufig angeschauten Artikel Graphite mit Debian 9, reiche ich mit diesem Blogpost mein Versprechen mal ein.

Die Voraussetzungen sind fast die Gleichen wie im alten Blogpost, aber dank unserer Community und deren Mithilfe verfeinert. Ich verweise gern an dieser Stelle auf unsere Community, welche gern & freundlich weiterhilft: Icinga Community.

Nun aber zum Inhalt. Prämisse ist, dass wir eine Icinga2-Installation auf einem frischen Debian 10 (Codename Buster) haben. Die Installation von Icinga2 wird hier explizit nicht erklärt.

Ich liste die Schritte mit auf, werde aber im Gegenzug nur die Graphite-spezifischen Schritte erklären.

Beginnen wir mit der Basisinstallation, sprich den Paketen, welche man braucht und die relativ selbsterklärend sind.

apt-get update -y
apt install gnupg2 vim nagios-plugins-standard nagios-plugins-contrib apache2 -y
wget -O -https://packages.icinga.com/icinga.key | apt-key add -
echo -e "deb http://packages.icinga.com/debian icinga-buster main\ndeb-src http://packages.icinga.com/debian icinga-buster main\n" >> /etc/apt/sources.list
apt-get update -y
apt install python-dev libcairo2-dev libffi-dev build-essential python-pip python-sqlite libapache2-mod-wsgi golang -y
apt install icinga2 -y

Somit wären die ersten Vorarbeiten geleistet. Ab diesem Schritt werden wir für das Graphite-Web nun zuerst Zertifikate generieren.

Wir befinden uns im Jahr 2020. Da sollte zumindest jede sinnvolle Website ein Sicherheitszertifikat mitbringen, vor allem wenn es sich im freien Internet präsentiert. Ich promote hier an dieser Stelle auch nicht „Let’s Encrypt“, weil ich es nicht mag. Es gibt bereits 1001 und mehr Seiten, die bereits darauf eingehen und ich will/möchte mich da nicht einreihen.

Ich halte die händische Zertifikatsgenerierung mal hier als Alternative hoch.

Es fängt unter Debian schon mit der Erstellung der Ordner an.

mkdir -pv /etc/pki/tls/private

Innerhalb des Ordners erzeugen wir uns einen Zertifikatsschlüssel.

openssl genrsa -out certificate.key 2048

Hinweis: 4096 ist ein Wert, der akzeptabel ist. >4096 kann durchaus für die meisten internen Sicherheitsanforderungen nötig sein.

2048 ist hier also nur ein Beispielwert, kein Muss-Wert.

Danach erzeugen wir mit dem Schlüssel eine Signierungsanfrage für ein neues Zertifikat.

openssl req -new -key certificate.key -out certificate.csr -subj "/C=DE/ST=Somewhere1/L=Somewhere/O=Somewhere Company GmbH/OU=IT/CN=localhost.localdomain/emailAddress=admin@somewhere.com"

Wem nun die Frage nach den hier verwendeten Parametern kommt aus einem Ubuntu Guide aus der Community von mir selbst kopiert, hier die Erklärung:


Explanation of the -subj parameters:

Parameter Explanation
/C Country
/ST State
/L Location
/O Organization
/OU Organizational Unit
/CN Common Name
/emailAddress self explanatory

Mit den so erhaltenen Key & CSR erstellen wir nun ein Zertifikat.

openssl x509 -req -days 395 -in certificate.csr -signkey certificate.key -out certificate.crt

Damit hätten wir den Zertifikats-Part an dieser Stelle abgeschlossen. Nun geht es weiter zum Carbon-Teil dieses Blogposts.
Mir war es aktuell auch mit guten ‚Google-Fu‘ nicht möglich, eine aktuellere Quelle zu finden als „https://github.com/lomik/go-carbon/“.
Aktuell ist auf der Graphite-Seite carbon 1.16, aber ich kann nicht sagen, ob beide „feature equal“ sind.

Also wenn jemand etwas Neueres findet, bitte in der Community melden 🙂


wget https://github.com/lomik/go-carbon/releases/download/v0.14.0/go-carbon_0.14.0_amd64.deb
dkpg -i go-carbon_0.14.0_amd64.deb

Nach der Installation des Paketes muss natürlich die Konfiguration angepasst werden.

Also editieren wir die go-carbon.conf & storage-schemas.conf in /etc/go-carbon/.

go-carbon.conf:
max-cpu = 4 (default) // Sollte an die Möglichkeiten des Rechners angepasst werden
data-dir = "/var/lib/graphite/whisper" // Dies ist das Datenverzeichnis wo die Whisper Dateien abgelegt werden hier sollte man bedenken das dies im laufe der Zeit anwächst.
write-strategy = "max" // Um die CPU zu entlasten sollte hier "noop" gewählt werden.
\[udp\] = ... // In diesem Beispiel verwenden wir udp nicht also sollte der gesamte Block auskommentiert werden.
\[tcp\] = ... // Ist in diesem Beispiel unser Transport Protokoll
listen = ":2003" // Ist der Port auf den go-carbon hört sollte um die IP der Maschine ergänzt werden auf der er läuft `beispielhaft` hier "127.0.0.1:2003"

An der Stelle eine kleine Unterbrechung. Es geht weiter in dem folgenden Blogpost:Better Late than never – Graphite-Web-Installation unter Debian 10 – Part 2

Mit freundlichem Gruß

David

David Okon
David Okon
Senior Systems Engineer

Weltenbummler David hat aus Berlin fast den direkten Weg zu uns nach Nürnberg genommen. Bevor er hier anheuerte, gab es einen kleinen Schlenker nach Irland, England, Frankreich und in die Niederlande. Alles nur, damit er sein Know How als IHK Geprüfter DOSenöffner so sehr vertiefen konnte, dass er vom Apple Consultant den Sprung in unser Professional Services-Team wagen konnte. Er ist stolzer Papa eines Sohnemanns und bei uns mit der Mission unterwegs, unsere Kunden zu glücklichen Menschen zu machen.

Revisited – Graphite-Web installation unter Debian 9

Erstmal wieso Revisited ?

Dies ist ein update meines älteren Blog Posts Blogpost 2016 welcher darauf einging das unter Debian 8.4 graphite-web wegen eines Fehlenden Eintrages in der Apache 2.4 Konfiguration nicht korrekt gestartet/aufgerufen werden konnte.
Es ist schon einige Zeit ins Land gegangen und ich habe weniger ein Auge darauf geworfen ob das weiterhin so Funktioniert.
Deshalb Revisited.

Here we Go again !

Ich gehe in diesem Fall von einer Debian Version der Nummer 9 aus und werde wie bei dem alten Blogpost. In der Grundannahme mal davon ausgehen das alles Funktioniert wie es soll:
Also hier die folgenden installationschritte:
#> apt-get install apache2 libapache2-mod-wsgi python-django python-django-tagging fontconfig python-tz python-pip python-dev python-twisted python-cairo
#> pip install carbon whisper graphite-web
#> pip install --upgrade twisted
#> cp /opt/graphite/conf/carbon.conf.example /opt/graphite/conf/carbon.conf
#> cp /opt/graphite/conf/storage-schemas.conf.example /opt/graphite/conf/storage-schemas.conf
#> /opt/graphite/bin/carbon-cache.py start
#> /opt/graphite/bin/carbon-cache.py status
#> cp /opt/graphite/examples/example-graphite-vhost.conf /etc/apache2/sites-available/graphite.conf
#> cp /opt/graphite/conf/graphite.wsgi.example /opt/graphite/conf/graphite.wsgi
#> cp /opt/graphite/webapp/graphite/local_settings.py.example \ /opt/graphite/webapp/graphite/local_settings.py
#> python /opt/graphite/webapp/graphite/manage.py syncdb
#> chown www-data. -R /opt/graphite/storage
#> a2dissite 000-default
#> a2ensite graphite
#> a2enmod wsgi
#> service apache2 restart
#> chmod +x /etc/init.d/carbon-cache // Damit 'carbon-cache.py start' mit Systemstart erfolgt

Ergebnis davon ist -> Nichts funktioniert.

Back to the Roots

Ab hier kommt der Weg graphite-web auf einem Debian 9 (Stretch) in Betrieb zu nehmen.
Ausgangspunkt ist ein frisch installiertes Debian 9.
#> apt-get install vim -y
#> vim /etc/apt/sources.list

Wir müssen die Sources auf die Jessie Repositories setzen da zum Zeitpunkt dieses Blogposts die graphite-web Pakete nicht abrufbar sind.
Daher fügen wir folgendes hinzu in der sources.list
deb http://httpredir.debian.org/debian jessie main
Gefolgt von einem frischem #> apt-get update -y .
Nun installieren wir den großteil der Pakete welche wir benötigen.
#> apt-get install graphite-web graphite-carbon mysql-server python-mysqldb python-pymysql apache2 libapache2-mod-wsgi apt-transport-https ssl-cert python-pip -y
Es folgen ca. 300MB an Daten.
Daraufhin stürzen wir uns direkt auf die Konfig.
Wir fangen an folgende Datei zu editieren.
#> vim /etc/graphite/local_settings.py
Darin ändern wir folgende Settings Sinnvoll in etwas was wir für unsere Installation benötigen.
Also SECRET_KEY, TIME_ZONE & ALLOWED_HOSTS setzen.
Danach muss in der folgenden Datei ein „true“ gesetzt werden damit graphite & carbon gemeinsam starten.
#> vim /etc/default/graphite-carbon
Nun kommt der trickreichste Part wir sind leider dazu genötigt eine alte django Version zu installieren.
#> pip install "django==1.4"
Damit haben wir die Grundlage womit wir das folgende Kommando erfolgreich absetzen können.
#> graphite-manage syncdb
#> Kundenverbesserung: Danke an bbtronic!
#> graphite-manage migrate --run-syncdb
#> chown _graphite. /var/lib/graphite/graphite.db
HINWEIS ! Dies setzt erst mal die voreingestellte sqlitedb in Gang.
Wenn eine andere DB verwendet werden soll dann sollte dies bitte in der „local_settings.py“ vorgenommen werden.
Wir sind fast am Ziel ein funktionierendes graphite-web zu haben.
Es fehlt nur etwas Apache2 Magie.
#>a2dissite 000-default.conf
#>cp /usr/share/graphite-web/apache2-graphite.conf /etc/apache2/sites-available/
#> a2ensite apache2-graphite.conf
#> systemctl restart apache2

Voilà !

Es sollte nun auf dem Host System das graphite-web aufrufbar sein.

Danke für die Aufmerksamkeit !

Addenum nicht Sichtbare Kommentare von Kunden:
# Oliver: Ich bekam leider den Fehler:
twisted.python.usage.UsageError: Unknown command: carbon-cache

Hier hat dies geholfen:
mv /usr/local/lib/python2.7/dist-packages/twisted /usr/local/lib/python2.7/dist-packages/twisted2

Hier half mir ein downgrade:
python -m pip install ‘django-tagging<0.4' Das hatte ich auch, habe es mit upgrade auf django 1.5 beseitigen können: python -m pip install django==1.5 Vinc: hallo David nach dem ich die Installation bei back to the roots gestartet habe, klappte es. Wobei ein paar Infos unter Also SECRET_KEY, TIME_ZONE & ALLOWED_HOSTS wäre wohl noch nützlich. Aber trotzdem – klappt es nicht – die “bilder” erscheinen nicht wie wenn der Pfad falsch ist. gruss vinc

David Okon
David Okon
Senior Systems Engineer

Weltenbummler David hat aus Berlin fast den direkten Weg zu uns nach Nürnberg genommen. Bevor er hier anheuerte, gab es einen kleinen Schlenker nach Irland, England, Frankreich und in die Niederlande. Alles nur, damit er sein Know How als IHK Geprüfter DOSenöffner so sehr vertiefen konnte, dass er vom Apple Consultant den Sprung in unser Professional Services-Team wagen konnte. Er ist stolzer Papa eines Sohnemanns und bei uns mit der Mission unterwegs, unsere Kunden zu glücklichen Menschen zu machen.

Graphite installation unter Debian 8.4

Ich hab mich mit der Aktualiserung unserer Schulungsunterlagen diese Woche beschäftigt, dies erfolgt bei uns auf kontinuierlicher Basis.
Was mir dabei auffiel bei unseren Graphing Unterlagen war dass das Webfrontend von Graphite wenn man es unter einer aktuellen Version von Debian oder Ubuntu installiert den Zugriff auf die Weboberfläche verweigert. Ich warf ich einen genaueren Blick auf das Setup um zu sehen wo der Fehler lag.
Die Ursache war relativ schnell ausgemacht.
Unter Debian Jessie 8.4 und Ubuntu 15.10 in den aktuellen Versionen gibt es kleine Veränderungen in der Apache2-Konfiguration unter Apache 2.4.10 und der Installation von Graphite.
Der bisherige Installationsweg für eine Graphite Installation mit Webfrontend war bisher wie folgt:

# apt-get install apache2 libapache2-mod-wsgi python-django python-django-tagging fontconfig python-tz python-pip python-dev python-twisted python-cairo
# pip install carbon whisper graphite-web
# pip install --upgrade twisted
# cp /opt/graphite/conf/carbon.conf.example /opt/graphite/conf/carbon.conf
# cp /opt/graphite/conf/storage-schemas.conf.example /opt/graphite/conf/storage-schemas.conf
# /opt/graphite/bin/carbon-cache.py start
# /opt/graphite/bin/carbon-cache.py status
# cp /opt/graphite/examples/example-graphite-vhost.conf /etc/apache2/sites-available/graphite.conf
# cp /opt/graphite/conf/graphite.wsgi.example /opt/graphite/conf/graphite.wsgi
# cp /opt/graphite/webapp/graphite/local_settings.py.example \ /opt/graphite/webapp/graphite/local_settings.py
# python /opt/graphite/webapp/graphite/manage.py syncdb
# chown www-data. -R /opt/graphite/storage
# a2dissite 000-default
# a2ensite graphite
# a2enmod wsgi
# service apache2 restart
# chmod +x /etc/init.d/carbon-cache // Damit 'carbon-cache.py start' mit Systemstart erfolgt

Die *kleine* aber wichtige Änderung ist folgende pip install graphite-web fügt nicht folgendes hinzu:
Anscheinend vergisst die pip graphite-web den Eintrag in der graphite-vhost.conf welcher auf das webapp Verzeichnis den Zugriff erlaubt.

// < Directory "/opt/graphite/webapp/" >
// Options +ExecCGI
// Order deny,allow
// Allow from all
// Require all granted
// < /Directory >

Wenn man dies wie manuell ergänzt dann erhält am auch Zugriff auf die Weboberfläche.
Hier ein Kurzdurchlauf bei der Graphite installation auf einem frischen Debian Jessie 8.4.

# apt-get install python python-pip python-dev python-cairo python-django \
python-django-tagging apache2 libapache2-mod-wsgi python-twisted \
python-memcache python-pysqlite2 python-simplejson
# pip install whisper
# pip install carbon
# pip install graphite-web
# cp /opt/graphite/webapp/graphite/local_settings.py.example \ /opt/graphite/webapp/graphite/local_settings.py
# cp /opt/graphite/conf/graphite.wsgi.example /opt/graphite/conf/graphite.wsgi
# cp /opt/graphite/conf/carbon.conf.example /opt/graphite/conf/carbon.conf
# 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
# cd /opt/graphite/webapp/graphite && python manage.py syncdb
# chown -R www-data:www-data /opt/graphite/storage/
# vim /etc/apache2/sites-available/graphite.conf // hier erfolgt das manuelle Hinzufuegen von des Ordners in der Config
# a2dissite 000-default.conf
# a2ensite graphite.conf
# service apache2 restart
# vim /etc/systemd/system/carbon-cache.service // Erstellen eines Service-Files fuer den Start von carbon-cache.py start
# systemctl enable carbon-cache.service
# systemctl start carbon-cache.service
# systemctl reload apache2.service

Somit ist das Problem gelöst und die Graphite-Web Oberfläche aufrufbar.
Ich werde demnächst noch ein Video fuer Ubuntu 15.10 nachreichen da hier die Pfade abweichen von Debian und dies nicht 1:1 übertragbar ist.
Bis Demnächst!
Und übrigens: die nächste Graphing Schulung findet schon ganz bald statt, also noch fix anmelden!

David Okon
David Okon
Senior Systems Engineer

Weltenbummler David hat aus Berlin fast den direkten Weg zu uns nach Nürnberg genommen. Bevor er hier anheuerte, gab es einen kleinen Schlenker nach Irland, England, Frankreich und in die Niederlande. Alles nur, damit er sein Know How als IHK Geprüfter DOSenöffner so sehr vertiefen konnte, dass er vom Apple Consultant den Sprung in unser Professional Services-Team wagen konnte. Er ist stolzer Papa eines Sohnemanns und bei uns mit der Mission unterwegs, unsere Kunden zu glücklichen Menschen zu machen.