# Icinga

Icinga ist eine Open-Source-Anwendung zur System- und Netzwerküberwachung. Es wurde ursprünglich als Fork der Nagios-Systemüberwachungsanwendung im Jahr 2009 erstellt.
Durch zahlreiche Modifikationen sollten Mängel im Entwicklungsprozess von Nagios behoben sowie neue Features, wie die Web-Oberfläche Icinga Web2, und zusätzliche Datenbank-Konnektoren für MySQL, Oracle und PostgreSQL, einer REST-API integriert werden. Ziel der Icinga-Entwickler ist auch, die Bedürfnisse der Community besser zu berücksichtigen sowie Patches schneller zu integrieren. Die erste stabile Version 1.0 wurde im Dezember 2009 veröffentlicht.
„Icinga“ ist ein Wort der Zulu-Sprache, das „sucht“, „durchsucht“ oder „untersucht“ bedeutet und mit einem Klickkonsonanten ausgesprochen wird.

## Geschichte

Unzufrieden mit der damals stagnierenden Entwicklung von Nagios, auch mit dem Wunsch, die Entwicklung auf breitere Beine zu stellen, kündigte im Mai 2009 eine Gruppe von Entwicklern aus der Nagios-Community den Fork Icinga an.
In ihrem ersten Jahr veröffentlichten die Icinga-Entwickler separate Versionen von Core, API und Web und feierten ihren 10.000. Download.
Im zweiten Jahr brachte das Icinga-Projekt einen einheitlichen und stabilen Core und Web heraus, fügte Dual-Stack-IPv6-/IPv4-Unterstützung hinzu, optimierte die Datenbankanbindung, überarbeitete die Icinga-Web-Benutzeroberfläche Icinga Web2 und integrierte verschiedene Community-Add-ons (PNP4Nagios, LConf, Heatmap und Business Process Add-on). Das Projekt erreichte mehr als 70.000 Downloads und wuchs auf 23 Teammitglieder an.
Im dritten Jahr feierte Icinga den 100.000. Download, integrierte die Icinga-API-Komponente in Icinga Web, verbesserte SLA-Berichte, eröffnete eine offizielle Freenode-IRC-Gruppe und erweiterte die virtuellen Icinga-Appliances auf die Betriebssysteme Debian, OpenSUSE und CentOS.
Im Oktober 2012 veröffentlichte das Icinga-Projekt eine Technologievorschau auf einen Core-Framework-Ersatz- und Parallelentwicklungszweig, Icinga 2. Die Entwickler äußerten die Absicht, den Kern umzuschreiben, um Mängel wie komplizierte Konfigurations- und Skalierbarkeitseinschränkungen in großen Implementierungen zu korrigieren.
Das Projekt beschrieb Pläne, den Icinga-2-Kern hauptsächlich in C++ zu schreiben, eine neue Komponentenlader-Architektur zu entwerfen und den Prozess der Durchführung von Überwachungen und der entsprechenden Prüfungen umzugestalten.
Im Juni 2014 veröffentlichte das Icinga-Projekt die erste stabile Version von Icinga 2.

## Versionsgeschichte

| Datum | Release | Bemerkungen |
| 12. Juli 2023 | Icinga 2 v2.14.0 | Feature und Bugfix Release. Schnelleres Config-Reload, Icinga for Windows API, Redundante Abhängigkeitsgruppen sowie div. Bugfixes |
| 12. Juli 2023 | Icinga 2 v2.13.8 | Bugfix Release. Fehler in Verbindung zu IcingaDB IcingaDB-Redis behoben, SELinux-Rechten, weitere kleine Fehler behoben. |
| 15. Dezember 2020 | Icinga 2 v2.12.3 | Bugfix Release. Behebt Sicherheitsprobleme bei Zertifikaten, Behebung Sync-Lock welcher hohe Load bei Windows-Agents verursacht. |
| 15. Dezember 2020 | Icinga 2 v2.11.8 | Bugfix Release. Behebt Sicherheitsprobleme bei Zertifikaten, Behebung Sync-Lock welcher hohe Load bei Windows-Agents verursacht. |
| 1. Dezember 2020 | Icinga 2 v2.12.2 | Bugfix Release. Behebt Fehler bei fehlerhaft konfigurierten Agents, verbessert Synchronisation der API-Objekte. Verbesserung: HTTP Statuscodes sind nun im Icinga2-Log enthalten. |
| 1. Dezember 2020 | Icinga 2 v2.11.7 | Bugfix Release. Behebt Fehler bei fehlerhaft konfigurierten Agents, verbessert Synchronisation der API-Objekte. Verbesserung: HTTP Statuscodes sind nun im Icinga2-Log enthalten. |
| 5. August 2020 | Icinga 2 v2.12.0 | Bugfix Release. Behebt JSON-Bug, Verbindungsstabilität zwischen den Endpoints. Neues Feature: Icinga DB Unterstützung, basierend auf REDIS. |
| 5. August 2020 | Icinga 2 v2.11.5 | Bugfix Release. Behebt Fehler der unbekannten Service-Status nach Reload, behebt Segfault-Fehler während des Heartbeat-Timeouts. |
| 18. Juni 2020 | Icinga 2 v2.11.4 | Bugfix Release. Behebt Fehler der unbekannten Service-Status nach Reload, behebt Segfault-Fehler während des Heartbeat-Timeouts. |
| 3. März 2020 | Icinga 2 v2.11.3 | Bugfix Release. Behebt JSON-RPC Abstürze in großen Umgebungen. |
| 24. Oktober 2019 | Icinga 2 v2.11.2 | Bugfix Release. Behebt Fehler in Cluster-Config-Sync, insbesondere lang andauernde Reloads in großen Umgebungen. |
| 17. Oktober 2019 | Icinga 2 v2.11.1 | Bugfix Release. Behebt kritischen Fehler in Cluster-Config-Sync. |
| 19. September 2019 | Icinga 2 v2.11.0 | Feature und Bugfix Release. Behebt fehlende Notification nach Downtime, Netzwerk-Stack wurden zum großen Teil neu geschrieben, Verbesserung der REST-API, Verbesserung Stabilität. |
| 23. Mai 2019 | Icinga 2 v2.10.5 | Bugfix Release. Behebt Probleme mit logrotate, API Verbesserungen, IDO DB reloadmachanismus und Dokumentation |
| 19. März 2019 | Icinga 2 v2.10.4 | Bugfix Release. TLS-Verbindungen für InfluxDB/Elasticsearch. Performance für HA Clusterkommunikation |
| 26. Februar 2019 | Icinga 2 v2.10.3 | Bugfix Release. Probleme der TLS connections mit master and agents bei reload and “Connection: close” headers mit Ruby clients gefixt. Außerdem wurden Probleme mit (scheduled) downtimes in HA-enabled cluster environments behoben. 2.10.3 löst außerdem ein Problem mit zukünftigen time offsets und check results. |
| 14. November 2018 | Icinga 2 v2.10.2 | Bugfix Release. Fehler von TLS-Verbindung im Cluster behoben, Stabilität erhöht, API-Fehler behoben, IDO optimiert. |
| 18. Oktober 2018 | Icinga 2 v2.10.1 | Bugfix Release. Probleme des Namespace-Support und dem Reload/Neustart der Applikation behoben. |
| 11. Oktober 2018 | Icinga 2 v2.10 | Feature Release mit Support von eigenen Namespaces. Optimierung der Notifications, verbessertes Syntax-Highlighting mit vim. Verbesserung des „Connection-Handlings“. Erweiterung der ITL-Kommandos. |
| 24. Juli 2018 | Icinga 2 v2.9.1 | Bugfix Release. Fehler bei der Verwendung der Option daemonize oder eines anderen Init-Systems als systemd behoben. Behebt einen Fehler in der SELinux-Richtlinie und dem Sourcing im Initskript auf Nicht-Posix-Systemen. |
| 17. Juli 2018 | Icinga 2 v2.9.0 | Feature Release mit Elasticsearch 6 Unterstützung, TLS Unterstützung für IDO PostgreSQL und Verbesserungen für den Setup Wizard, Check Scheduling, Downtime Notification Handling und Memory Handling. |
| 25. April 2018 | Icinga 2 v2.8.4 | Bugfix Release. Eine Regression, bei der die Ausführung der Prüfung zu einem Absturz führte, wurde behoben. |
| 22. März 2018 | Icinga 2 v2.8.2 | Bugfix Release. Verschiedene sicherheitsrelevante Probleme wurden behoben. |
| 17. Januar 2018 | Icinga 2 v2.8.1 | Bugfix Release. Ein Fehler in der API wurde behoben, wenn ein Objekt zur Laufzeit erstellt wurde. Installationsprobleme unter Windows mit fehlenden DLLs behoben. Aktualisierungen der Dokumentation. |
| 17. November 2017 | Icinga 2 v2.8.0 | Feature Release mit neuer CA-Proxy-Funktion. Neuer Beat-Erkennungsalgorithmus. ElasticsearchWriter-Funktion mit HTTP-Proxy-Unterstützung. CORS-Unterstützung für die REST-API. Der „Bottom-up“-Cluster-Modus und das Classic-UI-Paket wurden entfernt. |
| 9. November 2017 | Icinga 2 v2.7.2 | Bugfix Release. Ungültige Attributnamen in der systemd Unit-Datei und falsche eindeutige Einschränkung für IDO DB behoben. Aktualisierung der Dokumentation |
| 21. September 2017 | Icinga 2 v2.7.1 | Bugfix Release. Problem mit DB IDO, Livestatus, Notifications behoben. Update der Notification-Scripte. Aktualisierung der Dokumentation. |
| 2. August 2017 | Icinga 2 v2.7.0 | Feature Release mit neuen Notification-Scripten, Work Queues, Check Plugin für NSClient++ API & Stabilitätsverbesserungen & Fixes |
| 13. Dezember 2016 | Icinga 2 v2.6.0 | Feature Release mit gebündeltem NSClient++ & Stabilitätsverbesserungen & Fixes |
| 23. August 2016 | Icinga 2 v2.5.0 | Feature Release mit InfluxDB, IDO Performance, Timeperiod Excludes & Fixes |
| 16. November 2015 | Icinga 2 v2.4.0 | Feature Release mit neuer API (REST API) |
| 13. März 2015 | 1.14 | Korrekturen |
| 9. März 2015 | Icinga 2 v2.3.0 | Feature Release mit Konfigurationserweiterungen (Funktionen, Schleifen, Conditionals, Objektzugriffe, zeitabhängige Schwellwerte usw.), OpenTSDB-Unterstützung und Troubleshooting-Clientbefehl |
| 19. November 2014 | 1.12 | Klassische UI-Erweiterungen und Korrekturen |
| 17. November 2014 | Icinga 2 v2.2.0 | Feature Release mit Remote Clients, CSR Auto-Signatur, Cli, Arrays/Wörterbücher in eigenen Attributen |
| 29. August 2014 | Icinga 2 v2.1.0 | Feature Release mit erweiterter Konfigurationsanalyse, Logging, Cluster High Availability Features |
| 16. Juni 2014 | Icinga 2 v2.0.0 | Erste stabile Version Icinga 2 |
| 16. Mai 2014 | Icinga 2 v0.0.11 | Überarbeitetes Cluster-Feature mit Hochverfügbarkeits- und Lastausgleichszonen, Befehlsargumenten & Conditionals |
| 29. April 2014 | Icinga 2 v0.0.10 | Erweiterung wendet Regeln für Benachrichtigungen, Abhängigkeiten, benutzerdefinierte Attribute usw. an. |
| 31. März 2014 | Icinga 2 v0.0.9 | Regelbasierte 'apply'-Logik, Benutzerfreundlichkeit der Konfiguration, Update des Datenbankschemas (MySQL, PostgreSQL) |
| 13. März 2014 | 1.11 | Interoperabilität (mit Solaris, Oracle, IE) und Verbesserungen der Benutzeroberfläche |
| 11. März 2014 | Icinga 2 v0.0.8 | Abhängigkeiten als In-Line-Wörterbücher, Cluster Health Checks, rekursive 'config includes' |
| 7. Februar 2014 | Icinga 2 v0.0.7 | Automatisierte Tests in Vagrant, Datenbank-IDO-Stabilität |
| 19. Dezember 2013 | Icinga 2 v0.0.6 | Wiederkehrende Ausfallzeiten, Log-Kommandoargumente, Latenzstatistiken |
| 3. Dezember 2013 | Icinga 2 v0.0.5 | Leistungsverbesserungen & Bugfixes |
| 12. November 2013 | Icinga 2 v0.0.4 | IDO PostgreSQL, Livestatus History |
| 24. Oktober 2013 | Icinga 2 v0.0.3 | IDO MySQL, Livestatus, Graphit, Clusteraufbau, Dokumentation |
| 24. Oktober 2013 | 1.10 | Klassische UI-Live-Suche und On-Demand-Filterauswahl, Performance-Verbesserungen |
| 2. Juli 2013 | Icinga 2 v0.0.2 | Technologievorschau mit Core 1.x Kompatibilitätsschicht |
| 7. Mai 2013 1.9 | 1.9 | Performance-Verbesserungen und Usability-Fixes |
| 25. Oktober 2012 | Icinga 2 v0.0.1 | Technologievorschau auf den Austausch des Core-Frameworks |
| 18. Oktober 2012 | 1.8 | Community basierte Verbesserungen an den optionalen Benutzeroberflächen und Icinga Reporting |
| 15. Mai 2012 | 1.7 | Paketierung vereinfacht |
| 30. November 2011 | 1.6 | SLA-Erweiterung (optional) |
| 24. August 2011 | 1.5 | Icinga Reporting in die Icinga-Weboberfläche integriert |
| 11. Mai 2011 | 1.4 | Verbesserungen an beiden optionalen Benutzeroberflächen |
| 16. Februar 2011 | 1.3 | Dual-Stack IPv4- und IPv6-Unterstützung |
| 13. Oktober 2010 | | Icinga Mobile Benutzeroberfläche für Smartphones und Tablets |
| 6. Oktober 2010 | 1.2 | Einheitliche stabile Version |
| 18. August 2010 | 1.0.3 | Einheitliche Version, instabiles Icinga Web |
| 30. Juli 2010 | 1.0.2 Core, 1.0.1 Web | Performance Verbesserungen |
| 3. März 2010 | 1.0.1 | Web Beta Performance Verbesserungen, Icinga Web Erweiterungen |
| 16. Dezember 2009 | 1.0 Core, 0.9.1 Web Alpha | Stable Core, Oracle und PostgreSQL Datenbankunterstützung |
| 28. Oktober 2009 | 1.0 RC Core | Initiale Oracle-Datenbankunterstützung |
| 15. September 2009 | 0.8.4 | IDOUtils Bugfixes |
| 2. September 2009 | 0.8.3 | Erste Unterstützung der PostgreSQL-Datenbank |
| 12. August 2009 | 0.8.2 | Icinga-API-Integration |
| 16. Juni 2009 | 0.8.1 | Core-Bugfix |
| 15. Mai 2009 | 0.8 | Initiales Release |

## Features

Als Fork von Nagios bietet Icinga die Funktionen von Nagios sowie einige Erweiterungen wie dem optionalen Reporting-Modul mit verbesserter SLA-Genauigkeit, zusätzlichen Datenbank-Konnektoren für PostgreSQL und Oracle und verteilten Systemen für redundantes Monitoring.
Grundsätzlich behält Icinga in der Version 1 die Konfigurations- und Plugin-Kompatibilität mit Nagios bei, was die Migration zwischen den beiden Monitoring-Programmen erleichtert. Icinga2 hingegen wurde komplett neu geschrieben, hier änderte sich die Konfigurations-Syntax. Die Plugin-Kompatibilität hingegen ist geblieben.

### Überwachung

* Überwachung von Netzwerkdiensten (SMTP, POP3, HTTP, NNTP, ping etc.)
* Überwachung der Host-Ressourcen (CPU-Auslastung, Festplattennutzung etc.)
* Überwachung von Serverkomponenten (Switches, Router, Temperatur- und Feuchtesensoren etc.)
* Einfaches Plug-In-Design, das es dem Anwender ermöglicht, eigene Service-Checks zu entwickeln
* Parallelisierte Service-Prüfungen
* Möglichkeit, eine Netzwerk-Host-Hierarchie mit Hilfe von „übergeordneten“ Hosts zu definieren, was die Erkennung und Unterscheidung zwischen ausgefallenen und nicht erreichbaren Hosts ermöglicht
* Möglichkeit, Ereignisbehandler zu definieren, die während der Service- oder Host-Ereignisse zur proaktiven Problemlösung ausgeführt werden sollen

### Benachrichtigung (Notification)

* Benachrichtigung von Ansprechpartnern, wenn Service- oder Host-Probleme auftreten und behoben werden (per E-Mail, Pager, Sofortnachricht oder benutzerdefinierte Methode)
* Eskalation von Alerts an andere Benutzer oder Kommunikationskanäle

### Visualisierung & Reporting

* Benutzeroberfläche (Icinga Web2) zur Visualisierung von Host- und Servicestatus, Netzwerkkarten, Reports, Logs etc.
* Templatebasierte Berichte (z. B. Top 10 problematische Hosts oder Dienste, Zusammenfassung der kompletten Überwachungsumgebung, Verfügbarkeitsberichte etc.)
* Report Repository mit unterschiedlichen Zugriffsebenen und automatischer Reportgenerierung und -verteilung
* Optionale Erweiterung basierend auf dem Icingaweb2 Reporting Module für das SLA-Reporting, das zwischen kritischen Ereignissen und geplanten und ungeplanten Ausfallzeiten und Bestätigungszeiträumen unterscheidet
* Kapazitätsauslastungsreporting
* Leistungsgrafik über Add-Ons wie PNP4Nagios, Graphite und Grafana

## Architektur

Der Icinga Core ist in C geschrieben und hat eine modulare Architektur mit eigenständigem Kern, Benutzeroberfläche und Datenbank, auf der Benutzer verschiedene Add-Ons und Plug-Ins integrieren können.
Letztere kommunizieren über Icingas Doctrine-Abstraction-Layer, REST- und Plug-In-APIs – die zwischen den externen Daten und internen Strukturen vermitteln. Diese Bündelung der Komponenten ermöglicht es den Anwendern, das System von Icinga zur redundanten Überwachung zu verteilen. Es bietet dem Benutzer auch die Freiheit, Icinga an seine Bedürfnisse anzupassen.

### Icinga-Core

Der Icinga Core verwaltet Überwachungsaufgaben und empfängt Prüfergebnisse von verschiedenen Plug-Ins. Diese Ergebnisse werden dann an die IDODB (Icinga Data Out Database) über die IDOMOD-Schnittstelle (Icinga Data Out Module) und den IDO2DB-Service-Daemon (Icinga Data Out to Database) über SSL verschlüsselte TCP-Sockets übermittelt. Obwohl beide zusammen mit dem Core geliefert werden (auch bekannt als IDOUtils), sind sie einzelne stehende Komponenten, die getrennt werden können, um die Daten und Prozesse auf mehrere Server zur Überwachung verteilter Systeme zu verteilen.
Die Icinga-Classic-Benutzeroberfläche wurde bis Version 2.7.2 ebenfalls mit Icinga Core ausgeliefert und konnte bis dahin als Ersatz für die PHP-basierte Icinga Weboberfläche verwendet werden.

### Icinga 2

Icinga 2 verwaltet Überwachungsaufgaben, führt Überprüfungen durch und sendet Alarmbenachrichtigungen. Die Funktionen von Icinga 2 können bei Bedarf aktiviert werden, seien es die Standardfunktionen wie die Komponente „checker“ oder „notification“ oder externe Schnittstellen, die mit Icinga 1.x und seinen Benutzeroberflächen kompatibel sind, zum Beispiel die IDODB (Icinga Data Out Database). Icinga 2 liefert einen eingebauten Cluster-Stack aus, der durch SSL-x509-Zertifikate gesichert ist und versucht, verteilte Überwachungs-Setups zu vereinfachen.
Die Konfigurationssyntax unterscheidet sich von Icinga Core 1.x und Nagios und erfordert eine Migration beim Upgrade.

### Icinga-Benutzeroberfläche

Die für Icinga2 vorgesehene GUI ist Icingaweb2, die Entwicklung findet auch hier stetig statt.
Icingaweb2 ist ein umfangreiches PHP-Framework für Web-Applikationen, welches auch die Entwicklung eigener Module zulässt. Die Icinga Classic UI wurde aus Icinga 2 entfernt, liegt jedoch noch als Quellcode oder in älteren Paketen vor, wird jedoch nicht mehr aktiv unterstützt.

#### Icinga-Web-2-Module
##### Monitoring-Modul

Dies ist das Haupt-Modul, welches mit dem Icinga-Web2-Paket mitgeliefert wird. Es stellt ein intuitives Benutzer-Interface dar für das Monitoring mit Icinga 2. Die sogenannten Views (Sichten) können sowohl sortiert als auch in eigenen Dashboards untergebracht werden. Eine integrierte Benutzerverwaltung mit möglicher MySQL- oder AD-Integration ist auch vorhanden und regelt die möglichen Zugriffe auf das Monitoring. Die Kommunikation zum Icinga 2 Core erfolgt über die Icinga-2-REST-API. Hierüber lassen sich auch alle möglichen Aktionen auf die Monitoring-Objekte anwenden.
Icinga Web2 ist barrierefrei und lässt sich somit auch mit Screenreadern bedienen. Die Farbschemata sind auch für Menschen mit Sehbehinderung entsprechend einstellbar.

##### Jira-Modul

Für das Ticketsystem Jira Service Desk wurde ein Modul entwickelt. Es ermöglicht Integration in die Oberfläche von Icingaweb2 sowie dem Modul Icingaweb2 Direktor.

##### Director-Modul

Eine datenbankgestützte GUI für die Administration und Automatisierung von Icinga 2. Die Kommunikation zu Icinga 2 erfolgt über die Icinga-2-API. Mittels sogenannter „Templates“ für Host- und Serviceobjekte besteht die Möglichkeit, das Monitoring zu vereinheitlichen.
Möglich ist außerdem eine Anbindung an externe Quellen (Datenbanken, CSV, XLS), diese ermöglichen den voll automatischen Import von Host- und Serviceobjekten.

##### Business-Process-Tools

Hiermit können Prozesse und deren Abhängigkeiten grafisch dargestellt werden. Eine Eskalation der Prozesszustände an Mail oder Trouble-Ticket-System sind möglich.

##### Cube

Visualisierung von Hosts und Services in einer eigenen Ansicht.

##### PNP

Visualisierung von Performancedaten mittels Graphen, RRDtool-basierend. Das Modul PNP integriert die Daten aus pnp4nagios, welches eine eigene Softwareentwicklung darstellt.

##### Elasticsearch

Anbindung an eine Elastic-Instanz zur Darstellung von Host-Daten (z. B. Eventlog), setzt einen funktionsfähigen Elasticsearch-Server voraus.

### Icinga-Data-Out-Datenbank

Die Icinga Data Out Database (IDODB) ist ein Speicherplatz für historische Überwachungsdaten für Add-ons oder das Icinga Webinterface. Im Gegensatz zu seinem Vorgänger Nagios unterstützt Icinga neben MySQL auch PostgreSQL- und Oracle-Datenbanken. Die GUI Icinga Web2 greift auf diese Datenbank zu und stellt die Host- und Servicezustände grafisch dar.

### Icinga-Reporting

Das Icinga-Projekt bietet ein optionales Icinga-Reporting-Modul an, es löst die bisherige Lösung Jasper-Reports ab.

### Erweiterte Funktionalität
#### Check-Plugins

Für Icinga können alle Check-Plugins genutzt werden, die auch für Nagios geschrieben wurden. Des Weiteren unterhält Icinga inzwischen, um unabhängig in der Entwicklung zu sein, auch eine eigene Webseite für Plugins und Erweiterungen. In der Community sind auch die Open Source Check-Plugins der Schweizer Firma Linuxfabrik weit verbreitet. Die Linuxfabrik Monitoring Plugins Collection ist eine Sammlung von Nagios-kompatiblen Check-Plugins, die in Python geschrieben sind und sich für Icinga, Naemon, Nagios, OP5, Shinken, Sensu und andere Monitoring-Anwendungen eignen. Die Check-Plugins werden auf GitHub zur Verfügung gestellt.

#### Performancedaten

So gut wie alle Checks können auch sogenannte Performancedaten schreiben. Diese müssten mit einem entsprechenden Programm verarbeitet werden. Icinga 2 arbeitet unter anderem mit folgenden Programmen zusammen, um die Performancedaten für einen längeren Zeitraum auswertbar zu machen:
* Graphite
* PNP4Nagios (Modul wird jedoch nicht aktiv weiter entwickelt)

#### Log-Dateien

* Für Elasticsearch existiert ein eigenes Icinga-2-Output-Plugin, welches ermöglicht, bestimmte Events an die Icinga-2-REST-API zu senden.
* Graylog