Inhaltsverzeichnis

Installation-full

wget -O - https://packages.icinga.com/icinga.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/icinga.gpg  >/dev/null
echo 'deb http://packages.icinga.com/ubuntu icinga-bionic main
deb-src http://packages.icinga.com/ubuntu icinga-bionic main' >/etc/apt/sources.list.d/icinga.list
apt-get update
apt-get install icinga2

Damit icinga2 bei einem Crash neustartet, noch folgende Datei erstellen und mit Inhalt füllen.

vi /etc/systemd/system/icinga2.service.d/override.conf

Inhalt:

[Service]
Restart=always
RestartSec=1
StartLimitInterval=10
StartLimitBurst=3

Danach diese Einstellungen noch aktivieren.

systemctl daemon-reload && systemctl restart icinga2

Pfade

Pfad Beschreibung
/etc/icinga2 Konfigurationsdateien
/usr/lib/systemd/system/icinga2.service Systemd Scripte
/etc/systemd/system/icinga2.service.d/limits.conf Systemd Service limits
/usr/sbin/icinga2 Shell wrapper
/usr/lib*/icinga2 Libraries und ausführbare Dateien
/usr/share/doc/icinga2 Dokumentation
/usr/share/icinga2/include Template Library und Plugin Konfigurationen
/var/lib/icinga2 Statusdatei für Cluster log, CA, Node Zertifikate und Konfigurationsdateien
/var/run/icinga2 PID file
/var/run/icinga2/cmd Command-Datei
/var/cache/icinga2 status.dat, objects.cache, icinga2.debug Dateien
/var/spool/icinga2 spool Dateien
/var/log/icinga2 Logs
/usr/lib/nagios/plugins Check-Plugins
/usr/share/vim/addons Icinga Erweiterungen für vim

Vim-Erweiterungen

Icinga bietet Erweiterungen für vim an.
Installiert werden diese wie folgt.

apt-get install vim-icinga2 vim-addon-manager
vim-addon-manager -w install icinga2

Dann noch ggf. das Syntax Highlighting einschalten (ist bei Ubuntu systemweit eingeschaltet).

vim ~/.vimrc

Inhalt:

syntax on

Testen kann man dies so:

vim /etc/icinga2/conf.d/templates.conf

Plugins

Zu icinga2 müssen noch Check-Plugins installiert werden.

apt-get install monitoring-plugins

Features

Debugging

Konfiguration testen

Wenn man Änderungen an der Konfiguration von Icinga vorgenommen hat, kann man diese vor dem neustarten testen.

icinga2 daemon -C

Icinga Web

Über Icinga Web lässt sich icinga konfigurieren, auslesen und steuern.

MySQL

Das Icinga Web schreibt seine Konfiguration in eine Datenbank.
Hier wird die Installation anhand von MySQL veranschaulicht.

apt-get install mysql-server mysql-client
mysql_secure_installation

Nun noch die IDO Module für MySQL installieren und die Datenbank erstellen und einrichten.

apt-get install icinga2-ido-mysql

Im Installationsablauf, wird die Datenbank „icinga2“ erstellt und mit Tabellen und Schemata gefüllt.
Die Konfiguration von icinga zum Verbinden mit der Datenbank, stehen in der Datei /etc/icinga2/features-available/ido-mysql.conf.

Zuletzt noch das neue Feature einschalten und icinga neustarten.

icinga2 feature enable ido-mysql
systemctl restart icinga2.service

Webserver

Als Webserver wird nginx verwendet.

apt-get install nginx openssl fcgiwrap php-curl php-intl php-mbstring php-xml php-fpm php-gettext php-ldap php-mysql php-net-socket php-gd php-imagick

Rest API

Um die Rest API zu aktivieren, folgendes tun.

icinga2 api setup

Hierbei werden Certifikate und der API-Benutzer „root“ mit einem generierten Password erstellt. Die Konfiguration wird in der Datei /etc/icinga2/conf.d/api-users.conf abgelegt.
Da der neue API-Benutzer alle Rechte für die API hat, sollte man sich einen anderen Benutzer erstellen und diesem zunächst nur minimale Rechte geben.

vi /etc/icinga2/conf.d/api-users.conf

Inhalt unten hinzufügen:

object ApiUser "icingaweb2" {
  password = "<PASSWORD>"
  permissions = [ "status/query", "actions/*", "objects/modify/*", "objects/query/*" ]
}

Zuletzt natürlich icinga neustarten zum aktivieren der neuen Einstellungen

systemctl restart icinga2.service

Web GUI

Nun kann die Web GUI installiert werden.

apt-get install icingaweb2 icingacli

Mit folgendem Befehl lässt sich die Konfiguration für den jew. Webserver (Apache|Nginx) auf der Konsole ausgeben.

icingacli setup config webserver <apache|nginx>

Die Ausgabe kopiert man in eine Webseiten Konfigurationsdatei ins Konfigurationsverzeichniss des Webservers und passt diese an (Stichwort: php-fpm Anbindung).
Danach die Konfiguration noch aktivieren und folgende Daemons neustarten

ln -s /etc/nginx/sites-available/icinga /etc/nginx/sites-enabled/icinga
systemctl restart php7.2-fpm.service nginx.service

Jetzt kann icinga über die Web-GUI erstmalig konfiguriert werden.
Dazu öffnet man folgende URL im Browser: http://<HOSTNAME>/icingaweb2 und wählt die Konfiguration aus.

Auf der ersten Seite des Setups wird nach einem Token gefragt.
Dieses erstellt man sich per CLI:

Mit diesem Token kann man nun die Konfiguration mit Hilfe des Wizard durchgehen.
Je nach Auswahl, muss noch mehr oder weniger auf der Konsole gemacht werden.
U. U. muss noch ein weiterer administrativer Benutzer in der mysql Datenbank angelegt werden, da der Root Benutzer mittlerweile nicht mehr verwendet werden kann.

grant all privileges on *.* to '<BENUTZER_NAME>'@'<localhost|%>' with grant option IDENTIFIED BY '<PASSWORD>';
flush privileges;

Director

Der Director ist das Web-Konfigurationstool für Icinga.

Installation

Folgende Pakete sollten zuvor installiert sein

Zunächst benötigt man eine Datenbank und einen dafür priviligierten Benutzer.

mysql -e "CREATE DATABASE director CHARACTER SET 'utf8';
GRANT ALL ON director.* TO director@localhost IDENTIFIED BY '<PASSWORD>';"

Danach erstellt man in der icinga Web-Gui eine neu Ressource für die gerade erstellte Datenbankverbindung.
Diese erstellt man unter Menü: Konfiguration→Anwendung Reiter „Ressourcen.
Als Datensatz muss auch hier „utf8“ angegeben werden.

Jetzt holt man sich noch das Modul lokal auf den Server:

cd /usr/share/icingaweb2/modules/director
git clone https://github.com/Icinga/icingaweb2-module-director.git

In der Web-Gui kann man das neue Modul nun aktivieren.
Dies geschieht im Menü: Konfiguration→Module.
Im Menü erscheint danach ein neuer Eintrag namens „Icinga-Director“, hier muss zunächst die Grundkonfiguration mit hilfe des Wizards erstellt werden.
Dieser fragt irgendwann nach dem Namen des Endpunktes und nach dem Icinga-Host.
Der Name des Endpunktes ist der der auch im Host-Zertifikat unter „Subject: CN =“ angegeben ist.

openssl x509 -in /var/lib/icinga2/certs/<HOSTNAME>.crt -text

Beim Eintrag „Icinga-Host“ trägt man die IP-Adresse des Icinga-Hosts ein.
Als Benutzer wählt man den beim Api-Setup erstellten Benutzer „root“ und dessen Passwort.

Wenn man den Director das erste benutzt, müssen noch einige Anpassungen an der bestehenden Icinga-Konfiguration gemacht werden.

Zuletzt noch icinga2 neustarten.

systemctl restart icinga2.service

Upgrade

Zum Upgraden muss erneut das GIT-Repo geholt werden (git pull) und die Dateien ersetzt werden.
Danach das Upgrade der DB ausführen und den Job-Runner-Daemon neustarten.

icingacli director migration run --verbose

Mit diesem Befehl sieht man ob alles durchgelaufen ist.

icingacli director migration pending --verbose
systemctl restart director-jobs.service

Graphite

Mit Graphite lassen sich Performancedaten grafisch darstellen.

Installation

Zunächst benötigt man folgende Pakete: carbon-cache, graphite-web, uwsgi und nginx.

apt-get install graphite-carbon graphite-web uwsgi uwsgi-plugin-python nginx

Konfiguration graphite: /etc/graphite/local_settings.py

#####################################
# General Configuration #
#####################################
#
LOG_ROTATION = False

#####################################
# Filesystem Paths #
#####################################
#
GRAPHITE_ROOT = '/usr/share/graphite-web'
CONF_DIR = '/etc/graphite'
STORAGE_DIR = '/var/lib/graphite/whisper'
STATIC_ROOT = '/usr/share/graphite-web/static'
LOG_DIR = '/var/log/graphite'
INDEX_FILE = '/var/lib/graphite/search_index'
WHISPER_DIR = '/var/lib/graphite/whisper'

##########################
# Database Configuration #
##########################
#
DATABASES = {
    'default': {
        'NAME': '/var/lib/graphite/graphite.db',
        'ENGINE': 'django.db.backends.sqlite3',
        'USER': '',
        'PASSWORD': '',
        'HOST': '',
        'PORT': ''
    }
}

Konfiguration uwsgi: /etc/uwsgi/apps-available/graphite.ini → muss verlinkt werden nach /etc/uwsgi/apps-enabled/graphite.ini

[uwsgi]

vacuum = true
master = true
processes = 4
chmod-socket = 666
gid = _graphite
uid = _graphite
chdir = /usr/share/graphite-web
wsgi-file = graphite.wsgi
pymodule-alias = graphite.local_settings=/etc/graphite/local_settings.py
buffer-size = 65536
plugin = python

Konfiguration nginx: /etc/nginx/sites-available/graphite → muss verlinkt werden nach /etc/nginx/sites-enabled/graphite

upstream graphite {
    server unix:/run/uwsgi/app/graphite/socket;
}

server {
    listen 9002;
    server_name _;

    access_log /var/log/nginx/graphite-access.log;
    error_log /var/log/nginx/graphite-error.log;

    root /usr/share/graphite-web/static;

    location / {
        add_header Access-Control-Allow-Origin "*";
        add_header Access-Control-Allow-Methods "GET, OPTIONS";
        add_header Access-Control-Allow-Headers "origin, authorization, accept";

        uwsgi_pass graphite;
        include /etc/nginx/uwsgi_params;
    }

#    location /media {
        # This makes static media available at the /media/ url.  The
        # media will continue to be available during site downtime,
        # allowing you to use styles and images in your maintenance page.
#        alias /usr/lib/python2.7/dist-packages/django/contrib/admin/media;
#    }
}

Nach der Konfiguration der Software noch die Daemons neustarten.

systemctl restart uwsgi nginx

Danach aktiviert man das Icinga-Modul.

icinga2 feature enable graphite

Die Konfigurationsdatei /etc/icinga2/features-enabled/graphite.conf kann wie folgt angepasst werden. Sie läuft aber auch ohne diese Änderungen.

library "perfdata"

object GraphiteWriter "graphite" {
  //host = "127.0.0.1"
  //port = 2003
  enable_send_thresholds = true
}

Jetzt startet man icinga neu.

systemctl restart icinga2

Das Graphite Modul lädt man sich wie immer in den folgenden Ordner herunter.

cd /usr/share/icingaweb2/modules
git clone https://github.com/Icinga/icingaweb2-module-director.git graphite

Nun noch im IcingaWeb2 Menü aktivieren: Konfiguration→Module.

Graphite speichert seine Graphen-DBs unter /var/lib/graphite/whisper.
Hier sollte nach rel. kurzer Zeit der Ordner „icinga2“ erstellt werden, worin die Graphen für Icinga sich befinden.

Für eine längere Vorhaltezeit der Graphen muss noch in der Datei /opt/graphite/conf/storage-schemas.conf folgende Konfiguration hinzugefügt werden:

[icinga2_default]
# intervals like PNP4Nagios uses them per default
pattern = ^icinga2\.
retentions = 1m:2d,5m:10d,30m:90d,360m:4y

Kofiguration in Icinga-Web

Im Icingaweb2 in der Konfiguration des Graphite-Moduls, im Reiter „Backend“, trägt man noch die URL zum Graphite-Server ein http://FQDN_ODER_IP_DES_SERVERS:81/.
Im Reiter „Advanced“ kann man die standardmäßige Zeitspanne für die Graphen angeben. Hier werden auch Templates gepflegt.

Templates

Templates sind INI-Daeien und regeln das aussehend er Graphen.
Im Download des Graphite-Moduls befinden sich schon viele Templates. Man findet diese im Ordner /usr/share/icingaweb2/modules/graphite/templates/.

Um eigene Templates einzubinden oder vorhandene Templates zu überschreiben, legt man diese in den Ordner /etc/icingaweb2/modules/graphite/templates (muß ggf. erst erstellt werden).
Hier werden auch Ordnerstrukturen unterstützt.
Kopiert man ein vorhandenes Template vom Graphite-Modul hier hinein, kann man dieses wie gewünscht anpassen. Dieses Template hat dann vor dem originalen Vorrang.
Weitere Infos zum konfigurieren von Templates findet man unter https://www.icinga.com/docs/graphite/latest/doc/04-Templates/.

Agents

Windows

Der Windows Agent kann auf verschiedene Weise installiert werden, hier die Anleitung über das Powershellmodul von https://github.com/Icinga/icinga2-powershell-module.
Das Modul befindet sich auch im Reiter „Agent“ eines Host im Icinga2Director.

Zunächst clont man sich den Odner „Icinga2agent“ von o.g. Github URL. Darin befindet sich das eigentliche PS-Modul.
Diesen Ordner kopiert man nach „C:\Windows\System32\WindowsPowerShell\v1.0\Modules“.
Mit dem Befehl Get-Module -ListAvailable sieht man ob die Powershell das neue Modul gefunden hat.
Dann aktiviert man dieses in der Powershell, deaktivert aber zuvor die Ausführungsrestrictionen mit

Set-ExecutionPolicy Unrestricted
Import-Module Icinga2Agent

Dieses Modul importiert den aktuellen Host mit den folgenden Befehlen in Icinga2.
WICHTIG: Dazu muss zuvor der Icinga2 Agent installiert sein, welchen man sich von der Icinga Webseite herunterladen kann.

exit Icinga2AgentModule `
    -AgentName       '<HOSTNAME>' `
    -Ticket          '<TICKET_ID_AUS_ICINGA2>' `
    -ParentZone      '<FQDN_ZU_ICINGA"_HOST>' `
    -ParentEndpoints '<FQDN_ZU_ICINGA"_HOST>' `
    -CAServer        '<FQDN_ZU_ICINGA"_HOST>' `
    -RunInstaller

Danach noch die „ExecutionPolicy zurücksetzen Set-ExecutionPolicy Restricted.

Hat man den Agent auf einem Webserver oder einer Freigabe hinterlegt, kann man dem o.g. Parametern noch folgende hinzufügen, um die Installation des Agents vorher anzustoßen.

-InstallAgentVersion '<VERSION_DES_AGENTS>' `
-DownloadUrl '<URL_ODER_UNC_ZU_AGENT_DIRECTORY>' `

Das Ticket bekommt man über den Icinga2Director, entweder direkt vom Host selbst, oder man aktiviert in einer Host-Vorlage die „Selbstservice-API“.
Damit wird ein Ticket erstellt, welches dauerhaft für alle Client-Importe gilt.
Der Modul aufruf sieht dann etwas anders aus (hier mit dem Installationsaufruf des Icinga2 Agents:

Icinga2AgentModule `
    -InstallAgentVersion  '<VERSION_DES_AGENTS>' `
    -DownloadUrl          '<URL_ODER_UNC_ZU_AGENT_DIRECTORY>' `
    -AgentName            '<HOSTNAME>' `
    -DirectorUrl          '<URL_ZUM_ICINGA2_DIRECTOR>' `
    -DirectorAuthToken    '<TICKET_ID_AUS_ICINGA2>' `
    -RunInstaller

Backup

Folgendes sollte gesichert werden: