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 <enable|disable> <MODUL_NAME>
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 = "<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:
- 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 '<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
- 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 '<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.
- 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 = "<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 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:
- Verzeichnisse
/etc/icinga2
/var/lib/icinga2
- Datenbanken
mysql
icinga2
icingaweb2