Seite wählen

Graphite-API für Grafana und Icinga Web 2

von | Aug 9, 2019 | German, Graphite & Grafana, Linux, Python, Security

Ziel dieses Posts ist es, am Ende die Metriken über die Graphite-API als Backend für Grafana und das Icinga-Web-2-Module graphite betreiben zu können.

Grafana übernimmt hierbei optional die Visualisierung über eigene Dashboards, was ansonsten Graphite-Web leistet. Für Icinga Web 2 ist Grafana nur erforderlich, falls nicht das Module graphite zum Einsatz kommen soll, sondern stattdessen grafana zur Darstellung im Icinga Web 2 verwendet werden sollte.

Die Graphite-API ist in Python implementiert und soll hierbei via HTTPS angesprochen werden. Zusätzlich ist der Zugriff via Basis-Authentifizierung zu beschränken. Dies alles überlassen wir dem Apache, auch die API lassen wir mittels WSGI im Apache laufen.

Der Vorteil gegenüber dem Graphite-Web liegt darin, die ganzen Django-Bibliotheken nicht zu benötigen und auch kein DB-Backend a la SQLite, MySQL oder PostgreSQL. Nachteil ist, das Projekt Graphite-API wird nicht vom Graphite-Team betrieben, somit ist die Pflege und Aktualität nicht sichergestellt.

Für RedHat basierte Systeme befindet sich das Paket graphite-api im EPEL-Repsitory, Debian liefert es aus seinen eigenen Repositories bereits selbst. Nachfolgend sind die Beispiele auf ein CentOS 7 angepasst beschrieben.

$ yum install -y graphite-api http mod_wsgi mod_ssl

In der Konfigurationsdatei /etc/graphite-api.yaml ist der Ort der whisper-DB-Dateien zu kontrollieren, da dieser je nach verwendeten Carbon-Cache variieren kann, hier verwendete ich einen go-carbon, der standardmäßig den Pfad /var/lib/graphite/whisper benutzt.

...
whisper:
  directories:
    - /var/lib/graphite/whisper
...
carbon:
  hosts:
    - 127.0.0.1:7002
  timeout: 1
  retry_delay: 15
  carbon_prefix: carbon
  replication_factor: 1
...

Voreingestellt ist der Eintrag zur Verwendung des Carbonlinks deaktiviert, sollen jedoch auch die Metriken, die noch nicht auf Platte persistiert worden sind, angezeigt werden, sind unter dem Abschnitt carbon die verwenden Carbon-Caches einzutragen.

Die Apache Konfiguration, die die Graphite-API mittels WSGI auf Port 8888 startet, könnte wie folgt ausschauen:

Listen 8888 https

<VirtualHost *:8888>
  SSLEngine On
  SSLCertificateFile /etc/httpd/conf/graphite.crt
  SSLCertificateKeyFile /etc/httpd/conf/graphite.key
  SSLCACertificateFile /etc/httpd/conf/graphite.crt
  WSGIDaemonProcess graphite-api processes=<#cpu> threads=<#cpu> display-name='%{GROUP}' inactivity-timeout=120
  WSGIProcessGroup graphite-api
  WSGIApplicationGroup %{GLOBAL}
  WSGIImportScript /var/www/wsgi-scripts/graphite-api.wsgi process-group=graphite-api application-group=%{GLOBAL}

  WSGIScriptAlias / /var/www/wsgi-scripts/graphite-api.wsgi

  <Directory /var/www/wsgi-scripts>
    AuthType Basic
    AuthName "Graphite API"
    AuthUserFile /etc/httpd/conf/htpasswd.graphite
    Require valid-user
  </Directory>
</VirtualHost>

Die ersten vier Zeilen beschäftigen sich mit der TLS-Verschlüsselung. Hier kommt als Test ein selbstsigniertes Zertifikat zum Einsatz. In Produktion ist selbstverständlich ein CA-signiertes Zertifikat zu verwenden. Als nächstes wird das WSGI konfiguriert, zu beachten ist, dass hier für die zu verwendende Anzahl an Prozessoren und Threads, der Platzhalter <#pcu> zu ersetzen ist.

Das Verzeichnis, in dem das WSGI-Skript liegt, wird via Basis-Auth abgesichert. Im Folgenden muss neben dem Zertifikat und der Passwortdatei für die Basis-Authentifizierung noch das Startskript mit Verzeichnis angelegt werden. Beim Verzeichnis für die variabel vom Graphite erzeugten Dateien ist außerdem die Berechtigung auf den Apache anzupassen.

$ openssl req -newkey rsa:2048 -nodes -keyout /etc/httpd/conf/graphite.key -x509 -days 365 -out /etc/httpd/conf/graphite.crt
$ install -m755 -d /var/www/wsgi-scripts
$ echo "from graphite_api.app import app as application" > /var/www/wsgi-scripts/graphite-api.wsgi
$ chown apache:apache /var/lib/graphite-api
$ htpasswd -c /etc/httpd/conf/htpasswd.graphite graphite

Schon sind wir fertig und können den Apache einem Neustart unterziehen bzw. ihn initial starten. In Grafana ist nun abschließend die Data Source bzw. im Icinga Web 2 das Backend des graphite Moduls entsprechend dem konfigurierten Socket und eingetragenen Basis-Benutzers zu konfigurieren.

Lennart Betz
Lennart Betz
Senior Consultant

Der diplomierte Mathematiker arbeitet bei NETWAYS im Bereich Consulting und bereichert seine Kunden mit seinem Wissen zu Icinga, Nagios und anderen Open Source Administrationstools. Im Büro erleuchtet Lennart seine Kollegen mit fundierten geschichtlichen Vorträgen die seinesgleichen suchen.
Mehr Beiträge zum Thema German | Graphite & Grafana | Linux | Python | Security

Squid 4 Proxy mit LDAP & MITM SSL-Bump

Im Zuge meiner Ausbildung bei NETWAYS durfte ich mich diese Woche mit Squid auseinandersetzen. Dabei merkte ich, dass man sich bezüglich LDAP & SSL-BUMP wirklich nur auf die offiziellen Squid Dokus und die Red Hat Dokus verlassen konnte. Squid ist ein Caching...

User aus LDAP in Icinga Director Importieren

Ich hatte das Vergnügen mich etwas mit dem Icinga Director zu beschäftigen dabei war eine der Aufgabenstellungen die User aus unserem LDAP in den Director zu Importieren. Im Folgenden werde ich erläutern, welche Schritte notwendig sind, um dies zu tun. Dabei ist zu...

Benachrichtigungen mit Icinga 2 mal anders

Vor Kurzem stand ich im Rahmen eines Kundentermins vor der Anforderung noch die Benachrichtigungen für das Icinga 2 Setup umzusetzen. "Soweit kein Problem" dachte ich mir, allerdings war die genaue Anforderung dann doch etwas speziell: Sowohl bei Hosts als auch bei...

Veranstaltungen

Di 27

GitLab Training | Online

Oktober 27 @ 09:00 - Oktober 28 @ 17:00
Di 27

Graylog Training | Online

Oktober 27 @ 09:00 - Oktober 28 @ 17:00
NETWAYS Headquarter | Nürnberg
Nov 04

Vorstellung der Monitoring Lösung Icinga 2

November 4 @ 10:30 - 11:30
NETWAYS Headquarter | Nürnberg
Nov 24

Elastic Stack Training | Online

November 24 @ 09:00 - November 26 @ 17:00
Dez 01

Foreman Training | Nürnberg

Dezember 1 @ 09:00 - Dezember 2 @ 17:00
NETWAYS Headquarter | Nürnberg