Arndt Schönbergs Weblog

Sonntag Jun 12, 2016

IcingaWeb2 - Anzeige von Graphen

Graphen sagen mehr als tausend Worte … oder so ähnlich. Erst die graphische Darstellung der Messwerte ermöglicht dem Nutzer einen schnellen Überblick über die Daten (und es sieht viel besser aus ;-)). Um Graphen der Messwerte in IcingaWeb2 anzuzeigen, müssen verschiedene Tools installiert und konfiguriert werden. Die Kernkomponente ist Graphite, die für die Erzeugung der Grafiken verantwortlich ist. Graphite ist eine eigenständige webbasierte Anwendung, die Grafiken erzeugt.

Installation der notwendigen Pakete

Folgende Pakete werden benötigt
apt-get install graphite-carbon libapache2-mod-wsgi graphite-web

Aktivieren der Datenerzeugung in Icinga2

Um die Daten für die Graphen zu erzeugen, muss das entsprechend Feature in Icinga2 aktiviert werden. Mit folgenden Kommando wird das Feature aktiviert
icinga2 feature enable perfdata graphite 
Im Anschluss muss der Deamon neu gestartet werden.
systemctl restart icinga2  
Bei meiner Installation gab es Rechteprobleme (Meldungen nach Neustart des Dienstes), daher eventuell folgende Verzeichnisse zuvor anlegen und mit entsprechenden Rechten versehen
mkdir /var/spool/icinga2/tmp/service-perfdata
chown nagios:icingaweb2 /var/spool/icinga2/tmp/service-perfdata 
mkdir /var/spool/icinga2/tmp/host-perfdata
chown nagios:icingaweb2 /var/spool/icinga2/tmp/host-perfdata 
Die Daten der Messwerte werden nach Aktivierung des Features zur Auswertung in
/var/spool/icinga2/perfdata/
abgelegt.

Anlegen des Graphite Moduls für Icengaweb2

Für die Installation muss die aktuelle Version des Graphite Moduls in das Modulverzeichnis von Icingaweb2 ausgecheckt und mit dem geeigneten Namen versehen werden.
cd /usr/share/icingaweb2/modules/
git clone https://github.com/findmypast/icingaweb2-module-graphite.git
mv icingaweb2-module-graphite graphite 
Im nächsten Schritt muss eine Konfiguration für das Graphite-Modul erstellt werden. Sie legt den Zugriff auf Graphite fest indem der Metrik-Präfix und die URL für den Zugriff auf die Graphite Web-Anwendung definiert wird.

Auf diesem „Socket“ werden die Performance-Graphen von IcingaWeb2 abgefragt und anschließend in der GUI entsprechend dargestellt. Es dürfen in der Konfigurationsdatei nur absolute URLs mit IP oder Hostname verwendet werden. Es ist die URL zu verwenden, unter welcher die normale Graphite-GUI zu erreichen ist. Nach vollständiger Installation von Graphite (insbesondere den Teil von Apache s.u.), kann diese URL als Test für die korrekte Installation von Graphite aufgerufen werden.

Anlegen der Konfigurationsdatei
mkdir /etc/icingaweb2/modules/graphite
joe /etc/icingaweb2/modules/graphite/config.ini
Folgender Inhalt sollte nach verschiedenen Quellen in der Datei abgelegt werden
[graphite]
metric_prefix = icinga
base_url = http(s)://<ServerIp>//render?
legacy_mode = false
service_name_template = "$host.name$.services.$service.name$.$service.check_command$.perfdata"
host_name_template = "$host.name$.host.$host.check_command$.perfdata"
Wie auch in https://github.com/findmypast/icingaweb2-module-graphite/issues/23/ diskutiert wurde, scheint das neue Schema so nicht zu funktionieren. Unsere aktuelle Lösung vorerst ist die folgende
[graphite]
metric_prefix = icinga
base_url = http(s)://<ServerIp>//render?
legacy_mode = true
# service_name_template = "$host.name$.services.$service.name$.$service.check_command$.perfdata"
# host_name_template = "$host.name$.host.$host.check_command$.perfdata"

Carbon Cache

Graphite benötigt zur Auswertung von Daten den Carbon-Cache, welcher standardmäßig zum Empfang von Daten auf Port 2003 an localhost lauscht. Diese Daten legt er in Form von Whisper-Datenbanken auf der Festplatte ab. Dabei wird von Carbon natürlich Hauptspeicher benötigt. Es sollte sichergestellt sein, dass Carbon 1GB Ram zur Verfügung steht, um die teuren Festplattezugriffe zu vermeiden (in größeren Systemen werden sehr viele kleine Dateien angelegt, die eine normale Festplatte durchaus in die Knie zwingen können).

Die Konfigurationsdatei für den Zugriff von Icinga2 findet sich unter
/etc/icinga2/features-enabled/graphite.conf 
In dieser werden der Port und diverse andere Parameter verwaltet. Carbon selber wurde mit dem Paket graphite-carbon installiert (s.o.). Ob der Dienst schon automatisch gestartet wurde und ein Socket aufgebaut ist, kann mit
ss -nlp | grep 2003
geprüft werden.

Die Konfigurationsdatei von Carbon findet sich unter
/etc/carbon/carbon.conf
Es sollte vorerst nur der Parameter für das Einschalten von Logrotate angepasst werden
…
# Enable daily log rotation. If disabled, carbon will automatically re-open
# the file if it's rotated out of place (e.g. by logrotate daemon)
ENABLE_LOGROTATION = true
Zusätzlich sollte der Port geprüft werden.
LINE_RECEIVER_INTERFACE = 0.0.0.0  
LINE_RECEIVER_PORT = 2003  
Damit die Aggregation der Daten in Carbon funktioniert, müssen in der Datei
/etc/carbon/storage-schemas.conf
die Intervalle und Vorhaltezeiten eingetragen werden. Es wird definiert für welche Abfrageintervalle von Icinga2 welche Vorhaltezeiten in Carbon verwendet werden. Alle Intervalle, die z.B. in template.conf oder in den Dienstdefinitionen von Icinga2 definiert sind, müssen auch hier definiert sein.
[carbon]
pattern = ^carbon\.
retentions = 60:90d

[icinga2_default]
# intervals like PNP4Nagios uses them per default
pattern = ^icinga2\.
retentions = 1min:180d,10min:280d

[default_1min_for_1day]
pattern = .*
retentions = 60s:1d
Nach Anpassung der Konfiguration sollte der Dienst neu gestartet werden.
systemctl restart carbon-cache.service  
Mit Hilfe der Whisper-Scripts kann geprüft werden, ob die eingetragenen Werte korrekt aktiviert wurden. Alle Daten liegen nach Rechnern getrennt unter
/var/lib/graphite/whisper/icinga2/
Die wsp Datei für einen Server vsrv01 würde also z.B. wie folgt geprüft werden können
whisper-info /var/lib/graphite/whisper/icinga2/vsrv01/host/hostalive/perfdata/rta/value.wsp
Mit dem Befehl whisper-fetch können die bisher gespeicherten Datenpunkte eingesehen werden. Die Option --pretty macht die Ausgabe besser lesbar. Die wsp Dateien finden sich unter
/var/lib/graphite/whisper/icinga2/
Für einen Server mt der Bezeichnung vsrv01 und dem IP4-Ping Dienst ergibt sich
whisper-fetch --pretty /var/lib/graphite/whisper/icinga2/vsrv01/services/ping4/ping4/perfdata/rta/value.wsp
Nach diesen Schritten sollten die Dienste von Apache2 und Icinga2 neu gestartet werden.
systemctl restart icinga2  
systemctl restart apache2

Graphite-Weboberfläche

Die Web-GUI von Graphite muss installiert werden, da diese von Icingaweb2 angesprochen wird (Paket graphite-web s.o.).

Für die Erstellung von Hashes benötigt die GUI einen Key, der zwischen 20 und 30 Zeichen lang sein sollte und frei gewählt werden kann. Hierbei handelt es sich nicht um ein Passwort, welches später erneut eingegeben werden muss. Des Weiteren sollte die Zeitzone in folgender Datei eingetragen werden (Europe/Berlin).
/etc/graphite/local_settings.py
...
SECRET_KEY = 'Baenahsoo5AeJaihaeS3pao4thoh2f'  
...
TIME_ZONE = 'Europe/Berlin'
...
Der letzte Schritt ist die Anpassung von Apache. Es wird die Bibliothek libapache2-mod-wsgi für das Python-WSGI-Interface benötigt (s.o. Paketinstallation). Dies sollte nach der Installation auch aktiv sein und kann mit
a2enmod wsgi
geprüft bzw. aktiviert werden.

Die Graphite-Weboberfläche läuft bei Standardinstallation auf Port 80 ohne Kontextroot. Eine Apache Konfiguration für Graphite auf Port 80 findet sich unter
/usr/share/graphite-web/apache2-graphite.conf
Für diese Datei sollte ein Link eingerichtet werden.
ln -s /usr/share/graphite-web/apache2-graphite.conf /etc/apache2/sites-available/  
Im Anschluss wird die Seite für Apache2 eingerichtet.
a2ensite apache2-graphite.conf  
Wichtig ist die original Konfiguration von Apache zu deaktivieren, da sich beide Konfigurationen auf den gleichen Port beziehen und sich somit stören. Es ist auch möglich die GUI auf einem anderen Port zu legen. Hierfür muss die Graphite GUI Apache-Konfiguration angepasst werden (z.B. Port 8000)
...
WSGISocketPrefix /var/run/apache2
...

...
Des Weiteren muss Apache informiert werden, dass dieser Port genutzt wird. Hierfür in der Dateien
/etc/apache2/ports.conf
die Nutzung eintragen
...
Listen 80
Listen 8000
...
Im letzten Schritt wird die Whisper-Datenbank graphite erzeugt. Hierbei wird ein Nutzer angelegt, mit dem eine Anmeldung am Graphite Webinterface möglich ist. Für den Betrieb von IcingaWeb2 ist dies allerdings nicht notwendig.
python /usr/lib/python2.7/dist-packages/graphite/manage.py syncdb
Im Anschluss Apache2 neu starten.
systemctl restart apache2
Die erzeugte Datenbank liegt unter
/var/lib/graphite/
und muss dem Nutzer _graphite:_graphite gehören.

Aktivieren des Moduls in IcingaWeb2

Nach erfolgreicher Installation muss das Modul im Web-Frontend von IcingaWeb2 aktiviert werden. IcingaWeb2GraphiteEnable.png

Das war es ...

Nun ist das Ende dieses überlangen Blogs erreicht. Viel Spaß!

Links

Folgende Artikel haben uns bei der Installation unterstützt:

https://www.linuxfrickeln.de/visualisierung-von-performancedaten-in-der-icingaweb2-gui/

https://www.spiller.me/icingaweb2-und-graphite/

http://dokuwiki.nausch.org/doku.php/centos:web_c7:icinga:graphite

https://www.zhmurko.com/services/icinga2-monitoring/icingaweb2-graphite-integration/

https://blog.netways.de/2015/07/24/graphite-mit-icingadaten-fuettern/

https://www.infoq.com/articles/graphite-intro

https://www.icinga.org/2015/11/09/icinga-2-v2-4-new-graphite-schema/

IcingaWeb2 - Installation

In diesem Blog beschreibe ich, wie wir IcingaWeb2 installiert haben. Eine Beschreibung der Installation findet sich auch unter

https://github.com/Icinga/icingaweb2/blob/master/doc/02-Installation.md

Umgebung

  • Ubuntu 16.04
  • PostgreSQL 9.5
  • Installation aus dem letzten Post

Installation der notwendigen Pakete

Folgende Pakete für IcingaWeb2 und die Nutzung von Postgres in PHP werden benötigt:
apt-get install icingaweb2
apt-get install php-pgsql
Des Weiteren sollten folgende Pakete für vollständigen Einsatz von IcingaWeb2 installiert sein
apt-get install php-imagick
apt-get install php-intl
apt-get install php-dompdf
apt-get install php-xml

Vorbereitungen vor dem Setup im Web

Bevor das eigentliche webbasierte Setup gestartet werden kann, müssen einige Vorbereitungen getroffen werden. Es muss sichergestellt werden, dass eine Systemgruppe icingaweb2 angelegt wurde.
addgroup --system icingaweb2
Dieser Gruppe muss der Apache User www-data zugeordnet werden
usermod -a -G icingaweb2 www-data
Im Anschluss muss der Deamon Apache neu gestartet oder neu geladen werden.
service apache2 restart
Das eigentliche Setup von IcingaWeb2 ist in die Web-Anwendung integriert. Während des Setups wird einToken benötigt, welches mit
icingacli setup config directory --group icingaweb2
icingacli setup token create
erzeugt wird. Wenn ein Token einmal erzeugt wurde, kann es mit
icingacli setup token show
wieder angezeigt werden.

Setup im Web

Das Setup ist selbsterklärend, daher im Folgenden nur einige Stichworte. Der Aufruf des Setups erfolgt mit
http(s)://<ServerIp>/icingaweb2/setup
Nach Eingabe des Tokens folgt der eigentliche Installations-Wizard. Bei den Prüfungen findet sich unter anderem die Prüfung der PHP Default Time Zone. Ist diese noch nicht korrekt gesetzt, kann dies nachgeholt werden. Hierfür muss die Datei
/etc/php/7.0/apache2/php.ini
in einem Editor geöffnet und die Zeitzone eintragen werden.
date.timezone = Europe/Berlin

Fehler

Bei uns trat am Ende der installation ein Fehler auf, der darauf zurückzuführen war, dass www-data bzw icingagruppe keine Rechte an
/etc/icingaweb2/modules/
hatten.

Mittwoch Jun 01, 2016

Icinga 2 - Konfiguration Server

Hallo zum zweiten Teil aus dem Bereich Icinga Installation. Nachdem im ersten Teil das Grundsystem bereitgestellt wurde, folgen nun einige Konfigurationen.

Umgebung

  • Ubuntu 16.04
  • Installation aus dem letzten Post

Allgemeines

Die meisten Konfigurationsdateien finden sich unter /etc/icinga2 und können mit include-Befehlen und // Kommentaren umgehen (ähnlich zu C/C++).

Master für die Clients

Icinga unterscheidet zwischen Master Knoten, die die Daten sammeln und anzeigen, und Satelliten, die nur die Daten an einen oder mehrere Master Knoten senden. Mit
icinga2 node wizard
wird ein Wizzard zur Installation gestartet. Der Wizzard ist selbsterklärend. Da wir den Master einrichten wollen, wählen wir diese Variable. Wichtig ist die Vergabe des Namens (CN), der bei allen weiteren (Satelliten-)Installationen benötigt wird. Des Weiteren wird während der installation eine CA aufgebaut über die an die Satelliten Schlüssel für die Kommunikation vergeben werden.

Mail einrichten

Wie andere Befehle in Icinga ist auch der Mail Befehl in einem Skript definiert. Hier kann grundsätzlich jedes Mail Programm eingebunden werden. Eine einfache und schelle Installation bietet z.B. SendMail, dass mit
apt-get install sendemail
installiert wird. Das Skript von Icinga, welches angepasst werden muss findet sich unter
/etc/icinga2/scripts/mail-service-notification.sh
Die Zeile in der die Mail versendet wird auskommentieren und durch
/usr/bin/printf "%b" "$template" | sendEmail -f <From Email address> -t $USEREMAIL 
-u "$NOTIFICATIONTYPE - $HOSTDISPLAYNAME - $SERVICEDISPLAYNAME is $SERVICESTATE" -s <SMTP Server:Port> -xu <username@domain> -xp <Password>
ersetzen (natürlich die Platzhalter <...> zuvor austauschen). Um das Mailprogramm direkt zu testen, können die Icinga $-Variablen durch Dummy-Texte ersetzt und der Befehl direkt abgesetzt werden. Damit die Icinga Nachrichten an die entsprechenden Personen gesendet werden, muss die Datei user.conf in /etc/icinga2/connf.d angepasst werden. In ihr müssen display_name und email wie gewünscht gesetzt werden. Durch Kopieren des Blocks können auch weitere Empfänger erzeugt werden.

Im nächsten Blog geht es um die Installation von Icongaweb2.

Mittwoch Mai 25, 2016

Icinga 2 - Installation

Ich beschribe hier, wie eine Installation von Icinga bei uns realisiert wurde. Diese Beschreibung hat keinen Anspruch auf Allgemeingültigkeit, wenn sie dem einen oder anderen helfen kann, ist aber das Ziel erreicht.

Umgebung

  • Ubuntu 16.04

Pakete installieren

Es wird das Repository mit dem entsprechenden Add-Befehl aufgenommen
add-apt-repository ppa:formorer/icinga
und anschließend die Paketlisten aktualisiert und icinga installiert.
apt-get update
apt-get install icinga2
Die verschiedenen Verzeichnisse und die Befehle für den Deamon sind gut unter
http://docs.icinga.org/icinga2/latest/doc/module/icinga2/toc#!/icinga2/latest/doc/module/icinga2/chapter/getting-started
beschrieben.

PostgreSQL

Um die Daten dauerhaft bereitzustellen, wird eine Datenbank benötigt. Ich verwenden hier, wie in vielen meiner Projekte, Postgres. Die folgenden Befehle installieren Postgres aus den Quellen. Nach der Installation sollte man als User postgres das aktuelle Passwort setzen.
apt-get install postgresql
su postgres
psql
\password postgres
Die SQL Shell kann mit CTRL+D wieder verlassen werden. Nachdem nun eine Datenbank bereitsteht soll auch das IDO Modul installiert
apt-get install icinga2-ido-pgsql
und das Feature aktiviert werden
icinga2 feature enable ido-pgsql
Web-Interfaces und Icinga Addons können Befehle an Icinga 2 senden. Um die entsprechende externe Command Pipe zu aktivieren, müssen die folgenden Features aktiviert werden
icinga2 feature enable command
Nach der Aktivierung muss der Icinga2 Dienst neu gestartet werden.

Apache

Im Allgemeinen wird ein Web-Frontend verwendet. Diese Frontends (wir verwenden icingaweb2) basieren meistens auf PHP in einem Apache Web-Server. Daher sollte der Apache installiert werden. Apache wird aus den Paketen mit folgenden Befehlen installiert
apt-get install apache2
install libapache2-mod-php
Da PHP essentiell ist, sollte eine Testseite im Home Verzeichnis des Web-Servers erzeugt und dann aufrufen werden. (z.B. Seitenname: test.php) mit folgendem inhalt
<?php
 phpinfo();
?>

Rechte des Apache Nutzers

Um später keine Probleme bei der Nutzung des Web-Clients zu bekommen, sollte der Apache Nutzer in die relevante Gruppe aufgenommen werden
usermod -a -G nagios www-data
Da Icinga ein Fork von Nagios ist, ist hier noch die Bezeichnung Nagios zu finden.

In den folgenden Blogs beschäftige ich mich mit der Konfiguration, IcingaWeb und einigen anderen Themen, die in meiner Firma im Rahmen der Einrichtig notwendig waren.

Calendar

Feeds

Search

Links

Navigation