====== 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 =====
* Status der installierten Features prüfen icinga2 feature list
* Features ein-/ausschalten icinga2 feature
==== Debugging ====
* Debug-Konsole einschalten (in Linux und Windows-Client) icinga2.exe daemon -x [notice|debug]
* Debug-LOG einschalten icinga2 feature enable debuglog
service icinga2 restart
* Log-Datei: ''/var/log/icinga2/debug.log''
* Debug-LOG ausschalten icinga2 feature disable debuglog
service icinga2 restart
===== 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 = ""
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
Die Ausgabe kopiert man in eine Webseiten Konfigurationsdatei ins Konfigurationsverzeichniss des Webservers und passt diese an (Stichwort: [[web:nginx:fastcgi|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:///icingaweb2]] und wählt die Konfiguration aus.
Auf der ersten Seite des Setups wird nach einem Token gefragt.
Dieses erstellt man sich per CLI:
* Token erstellen icingacli setup token create
* Token nochmal ansehen icingacli setup token show
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 ''@'' with grant option IDENTIFIED BY '';
flush privileges;
===== Director =====
Der Director ist das Web-Konfigurationstool für Icinga.
==== Installation ====
Folgende Pakete sollten zuvor installiert sein
* icinga2
* icingaweb2
* mysql
* php
* php-curl
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 '';"
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/.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.
* neue globale Zone vi /etc/icinga2/zones.conf
Inhalt: object Zone "director-global" {
global = true
}
* neuer API-Benutzer vi /etc/icinga2/conf.d/api-users.conf
Inhalt: object ApiUser "director" {
password = ""
permissions = [ "*" ]
//client_cn = ""
}
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 [[https:\/\/www.icinga.com/download/|Icinga Webseite]] herunterladen kann.
exit Icinga2AgentModule `
-AgentName '' `
-Ticket '' `
-ParentZone '' `
-ParentEndpoints '' `
-CAServer '' `
-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 '' `
-DownloadUrl '' `
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 '' `
-DownloadUrl '' `
-AgentName '' `
-DirectorUrl '' `
-DirectorAuthToken '' `
-RunInstaller
===== Backup =====
Folgendes sollte gesichert werden:
* Verzeichnisse
* ''/etc/icinga2''
* ''/var/lib/icinga2''
* Datenbanken
* ''mysql''
* ''icinga2''
* ''icingaweb2''