Erhalten Sie Zugang zu diesem und mehr als 300000 Büchern ab EUR 5,99 monatlich.
"Icinga 2" gibt eine umfassende Einfuhrung in das gleichnamige Monitoringprodukt, das als Fork einer etablierten Lösung für Verfügbarkeitsmonitoring entstanden ist, in Version 2 jedoch einen kompletten Rewrite mit vielen, meist massiven, Verbesserungen erhalten hat. Dabei zeigt es Umsteigern von anderen freien Monitoringlösungen genauso wie Monitoring-Neulingen, wie eine Umgebung aufgebaut und Schritt fur Schritt immer umfangreicher und umfassender gestaltet wird. Die Beispiele haben einen sehr starken Praxisbezug und sollen nicht nur Wege zeigen, wie übliche Probleme irgendwie gelöst werden können, sondern welcher Ansatz sich vielfach in unterschiedlichsten Setups bewährt hat. Dabei bekommt der Leser aber nicht nur ganz konkrete Losungen für immer wieder auftretende Aufgaben an die Hand, sondern erfährt auch, wie er sich selbst weiterhelfen kann, wenn eine Anforderung einmal nicht vom Buch abgedeckt ist. Gezeigt werden die Überwachung von Linux, Unix und MS Windows Hosts, Netzwerkgeraten, Virtualisierungsplattformen, Netzwerkdiensten wie Web- und Mailserver, Verzeichnisdiensten, Datenbanken etc. Für die Überwachung werden bewährte Plugins vorgestellt, darüber hinaus aber auch Losungen für Logmanagement und Perfomance-Graphing aufgezeigt. In der zweiten, umfassend erweiterten Ausgabe dieses Praxisbuchs wurde nicht nur der Inhalt komplett überarbeitet und an die seit dem Vorläufer erschienenen neuen Versionen der behandelten Programme angepasst, sondern es wurden auch neue Kapitel über den Icinga Director, die API von Icinga und Hochverfügbarkeit für Icinga-Setups hinzugefügt.
Sie lesen das E-Book in den Legimi-Apps auf:
Seitenzahl: 724
Das E-Book (TTS) können Sie hören im Abo „Legimi Premium” in Legimi-Apps auf:
Lennart Betz arbeitet als Consultant und Trainer bei der Nürnberger NETWAYS GmbH. Seine Hauptarbeitsgebiete sind Planung, Aufbau und Betreuung von Monitoringlösungen, Konfigurationsmanagement und weitere Automatisierungsthemen. Schon früh während seines Mathematikstudiums beschäftigte er sich mit Freier Software und verfolgt dies auch seit dem Abschluss in seiner beruflichen Tätigkeit konsequent weiter.
Thomas Widhalm hilft als Lead Support Engineer Kunden der Netways GmbH beim Beheben von Problemen mit Icinga-Installation. Außerdem unterstützt er als Consultant Kunden bei der Planung, Umsetzung und weiteren Betreuung von Projekten im Bereich Monitoring und Logmanagement. Als Trainer zeichnet er sich für die Schulungen im Bereich Logmanagement verantwortlich. Im Icinga-Team arbeitet er an der Online-Dokumentation mit. Er ist überzeugt, dass Freie Software proprietärer Software überlegen ist und ihre Konzepte auch außerhalb der IT mehr Anwendung finden sollten.
Zu diesem Buch – sowie zu vielen weiteren dpunkt.büchern – können Sie auch das entsprechende E-Book im PDF-Format herunterladen. Werden Sie dazu einfach Mitglied bei dpunkt.plus+:
www.dpunkt.plus
Lennart Betz · Thomas Widhalm
Ein praktischer Einstieg ins Monitoring
2., aktualisierte und erweiterte Auflage
Lennart Betz
Thomas Widhalm
Lektorat: Dr. Michael Barabas
Copy-Editing: Petra Kienle, Fürstenfeldbruck
Satz: Lennart Betz, Thomas Widhalm
Herstellung: Stefanie Weidner
Umschlaggestaltung: Helmut Kraus, www.exclam.de
Bibliografische Information der Deutschen Nationalbibliothek
Die Deutsche Nationalbibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie; detaillierte bibliografische Daten sind im Internet über http://dnb.d-nb.de abrufbar.
ISBN:
Print 978-3-86490-556-8
PDF 978-3-96088-425-5
ePub 978-3-96088-426-2
mobi 978-3-96088-427-9
2. Auflage 2018
Copyright © 2018 dpunkt.verlag GmbH
Wieblinger Weg 17
69123 Heidelberg
Die vorliegende Publikation ist urheberrechtlich geschützt. Alle Rechte vorbehalten. Die Verwendung der Texte und Abbildungen, auch auszugsweise, ist ohne die schriftliche Zustimmung des Verlags urheberrechtswidrig und daher strafbar. Dies gilt insbesondere für die Vervielfältigung, Übersetzung oder die Verwendung in elektronischen Systemen.
Es wird darauf hingewiesen, dass die im Buch verwendeten Soft- und Hardware-Bezeichnungen sowie Markennamen und Produktbezeichnungen der jeweiligen Firmen im Allgemeinen warenzeichen-, marken- oder patentrechtlichem Schutz unterliegen.
Alle Angaben und Programme in diesem Buch wurden mit größter Sorgfalt kontrolliert. Weder Autor noch Verlag können jedoch für Schäden haftbar gemacht werden, die in Zusammenhang mit der Verwendung dieses Buches stehen.
5 4 3 2 1 0
This Book is the Property of the Half-Blood Prince.
Als wir Icinga im April 2009 zum Leben erweckten, konnten wir nur erahnen, wohin uns das Projekt führen würde. Natürlich waren wir von dem Potenzial des Projekts und der beteiligten Menschen überzeugt. Die Frage war jedoch, ob wir auch die Open-Source-Community von Icinga überzeugen können.
Das Feedback war schlichtweg überwältigend. Bereits nach den ersten Versionen erreichten uns unglaublich viel positives Feedback und viele User Stories über den erfolgreichen Einsatz von Icinga. Ausschlaggebend für den Einsatz von Icinga waren in der Praxis meist nicht das ein oder andere neue Feature, sondern das Vertrauen unserer Anwender. Vertrauen der Anwender in das Projekt, die Menschen dahinter und die Überzeugung, eine zukunftssichere Technologie einzusetzen.
Dieses Vertrauen war und ist seitdem unser Antrieb und auch die Hauptmotivation hinter Icinga 2. Zu behaupten, die Neuentwicklung von Icinga war rein altruistischi, wäre sicherlich etwas übertrieben, aber gegenüber unseren bestehenden Anwendern haben wir immer die größte Verantwortung. Icinga 2 und Icinga Web 2 sind die Folge unzähliger Entwicklungsjahre, aber auch zweier Grundfesten unserer Arbeit: das Bestreben, die Stärken von Icinga beizubehalten und gleichzeitig auch die aktuellen Bedürfnisse hinsichtlich Performance und Skalierbarkeit zu befriedigen.
Das Ergebnis dieser Arbeit wird in dem Buch, das Sie in Ihren Händen halten, vortrefflich beschrieben und erläutert. Dabei ist es weit mehr als eine Erweiterung der bestehenden Dokumentation. Es dient Ihnen als Nachschlagewerk und als roter Faden beim Einsatz von Icinga 2 in Ihrer Organisation. Bereits nach einigen Zeilen Lektüre werden Sie als Leser bemerken, dass keine Theoretiker für dieses Buch verantwortlich sind. Lennart und Thomas arbeiten seit vielen Jahren in den unterschiedlichsten Einsatzgebieten mit Icinga und wissen, worum es geht. Die Community kann sich glücklich schätzen, dass sie ihr Wissen mit diesem Buch weitergeben. Ich wünsche Ihnen damit mindestens genauso viel Freude wie mit Icinga selbst.
Bernd Erk
Icinga Co-Founder
Als mich Lennart und Thomas bei der ersten Auflage dieses Buchs um ein Vorwort gebeten haben, bin ich dem natürlich sehr gerne nachgekommen. Dass ich bei der nun bereits zweiten Auflage wieder die Gelegenheit habe, freut mich ganz besonders und daher gilt mein Dank dafür den beiden Autoren. Sowohl für die Möglichkeit, aber vor allem für den hohen persönlichen Einsatz und die endlosen Abend- und Wochenendstunden für dieses Werk.
Dass der Untertitel »Ein praktischer Einstieg ins Monitoring« dem Inhalt des Buchs nicht gerecht wird, zeigt sich in der aktualisierten Ausgabe noch deutlicher als beim ersten Buch. Denn genau dieser Einstieg ist nach einem Drittel eigentlich erledigt und die Autoren gehen auf viele Spezialfälle, Anbindung externer Komponenten und erweiterte HA-Szenarien ein. Auch dem Icinga Director, der sich in den letzten Jahren quasi zum Standard für Konfiguration und Verwaltung der Monitoring-Umgebung entwickelt, wurden ebenso wie Graphing und der REST-API viel Zeit und Detailtiefe gewidmet.
Was das Buch jedoch wirklich besonders macht, ist die Tatsache, dass es sich nicht um eine erweiterte Dokumentation der Software handelt. Die Autoren haben neben dem Schreiben viel Zeit in Szenarien, Installation und praktische Ausarbeitung der Komponenten investiert. Das macht dieses Buch zu einem praktischen Nachschlagewerk für die Installation, aber auch die fortwährende Pflege und Erweiterung von Icinga 2 und seinen Komponenten.
Sollten Sie zu meiner großen Überraschung nicht bereits die erste Ausgabe dieses Buchs besitzen, wünsche ich Ihnen viel Freunde beim Erlernen und der praktischen Umsetzung des in diesem Buch erarbeiteten Wissens. Der Wiederholungstäter erhält jedoch nicht nur eine überarbeitete Version, sondern auch viele hundert Seiten, auf denen er Icinga 2 und seine Welt wieder oder neu entdecken kann. Dabei wünsche ich Ihnen ein glückliches Händchen und viel Freude!
Bernd Erk
CEO – Icinga
Das vorliegende Buch richtet sich vorwiegend an Administratoren, die Icinga 2 einsetzen, mit dem Gedanken spielen, dies zu tun, oder in absehbarer Zeit von Icinga in der ersten Version auf die aktuelle migrieren wollen. Aber wir hoffen, mit der zweiten Auflage auch erfahrene Monitorverantwortliche zu unterstützen und mit dem ein oder anderen Wissen zu bereichern.
Dieses Buch besteht aus vier Teilen, die sich wiederum in einzelne Kapitel gliedern. Der erste Teil gibt eine kleine Einführung in das Thema Monitoring und stellt die einzelnen Software-Komponenten vor, die Icinga 2 als Gesamtheit bilden. Von der Installation über die grundsätzliche Konfiguration und einen ersten Blick auf die Benutzeroberfläche Icinga Web 2 werden alle wichtigen Begrifflichkeiten erkärt.
Im zweiten Teil geht es um zu ermittelnde Daten auf unterschiedlichen Betriebsystemen, vor allem Linux und Windows. Es befasst sich überwiegend damit, wie diese Daten lokal auf dem zu überwachenden System ermittelt werden und dem Transport zum Icinga-Server. Dies sind grundlegende Werte wie die CPU-, Hauptspeicher- oder Festplattenauslastung. Hier unterstützt Icinga 2 unterschiedliche Transportverfahren wie den mit Icinga 2 eingeführten Icinga-Agenten, aber auch alte Methoden wie NRPE, SSH oder SNMP.
Der dritte Teil vertieft Wissen, z. B. was Icinga 2 betrifft, erweitert dies aber auch durch die Themenkomplexe Benachrichtigungen, Verteilte Überwachung und Hochverfügbarkeit. Einen großen Abschnitt nehmen Beispiele aus der Praxis ein. Dort wird an Beispielen erläutert, wie Dienste bzw. Services mittels unterschiedlicher Plugins überwacht werden können.
Integration ist das Thema des vierten Teils. Es werden einige Erweiterungen vorgestellt, sowie andere Software, die mit Icinga 2 zusammenarbeitet. Auch die REST-API von Icinga 2 als Schnittstelle zum Datenaustausch mit beliebigen anderen Komponenten wird eingehend vorgestellt. Das Kapitel stellt einige Projekte aus dem Bereich Graphing vor, die Icinga 2 mit Daten beliefern kann, und erklärt, wie diese wiederum in Icinga Web 2 visualisiert werden. In Logmanagement geht es um die Alarmierung bei Anomalien, die in Logfiles erscheinen und ausgewertet werden müssen. Der Director als grafisches Konfigurationswerkzeug wird ebenfalls in diesem Teil behandelt, da er in der Lage ist, Daten aus unterschiedlichen Datenquellen zu beziehen, um daraus eine Überwachungskonfiguration zu erzeugen.
Den Abschluss bildet der Anhang mit Tipps zum Troubleshooting, durchzuführenden Updates und wichtigen anzustellenden Überlegungen. Zusätzlich befinden sich hier viele Codebeispiele, die die vorangegangenen Kapitel unterstützen.
Alle Kapitel wurden überarbeitet und größenteils komplett neu geschrieben. Dies hatte massive Umstrukturierungsmaßnahmen zur Folge. So befindet sich der Themenkomplex rund um Icinga Web 2 nicht mehr in einem Kapitel, sondern er verteilt sich auf deren drei in unterschiedlichen Teilen dieses Buchs. Umfangreiche Erweiterungen erfuhren z. B. Icinga Web 2 und Graphing. Neu hinzugekommen sind die Themen Director, Hochverfügbarkeit und die REST-API. All diesem ist der Umstand geschuldet, dass die zweite Auflage den doppelten Umfang im Vergleich zum Vorgänger hat.
Dieses Buch behandelt hauptsächlich Icinga 2 in der Version 2.8 und Icinga Web 2 2.5. Alle Beispiele zu Installationen beziehen sich, wenn nicht anders angegeben, auf die Distributionen RHEL/CentOS 7 bzw. Debian 9. Dabei wird RHEL wie auch CentOS mit RedHat synonym verwendet.
Das in mehreren Kapiteln eingesetzte und in seiner Benutzung beschriebene MySQL wird ebenfalls als Synonym für MariaDB benutzt.
In diesem Buch werden folgende typografischen Konventionen verwendet:
Nichtproportionalschrift
Wird benutzt für Namen von Programmen, Befehlen sowie für Codebeispiele.
Kursivschrift
Kommt zum Einsatz bei spezifischen Wörtern in Konfigurationen wie Schlüsselwörtern, Objektnamen, deren Attribute oder Custom-Attribute.
Nichtproportionalschrift kursiv
Wird bei Datei- und Verzeichnisnamen verwendet.
Kommandos oder Codezeilen, die dem Format dieses Buchs geschuldet einem unnötigen oder falschen Zeilenumbruch unterworfen sind, haben am Ende der Zeilen einen Backslash »\«.
Ich möchte die Chance nutzen und folgenden Leuten danken: Dr. Michael Barabas, Stefanie Weidner und Miriam Metsch vom dpunkt.verlag für die Unterstützung beim Schaffen dieses Buchs. Sie ließen uns alle Freiheiten und waren doch da, wenn wir Hilfe brauchten. Das ging sogar so weit, dass sie oft vermittelnd eingriffen, wenn weitere Leute benötigt wurden, um das Projekt voranzutreiben. Daher kennen wir teilweise die guten Geister nicht namentlich, denen wir es verdanken, dass dieses Buch nun gedruckt vor uns liegt. Das betrifft insbesondere einige der Reviewer und Lektoren, denen ich gerne ganz besonders danken möchte. Es war sicher nicht immer leicht, dieselben missachteten Rechtschreibregeln immer und immer wieder ausbessern zu müssen. Vielen Dank für das Feedback und die Geduld.
Im Weiteren möchte ich mich bei der Firma NETWAYS GmbH bedanken, die es uns nicht nur ermöglicht, uns täglich mit Projekten rund um Icinga 2 und die anderen in diesem Buch erwähnten Tools zu beschäftigen, sondern uns auch sehr aktiv beim Schaffen dieses Buchs unterstützt hat, sei es durch Zeit zum Schreiben oder Hardware für Teststellungen. Aber die NETWAYS hat auch indirekt ihren Teil zum Buch beigetragen: Ohne einen Arbeitgeber und Kollegen, bei denen man sich derartig wohlfühlt, hätte zumindest ich nicht die Muße, noch Freizeit in ein Projekt dieser Größenordnung zu stecken. NETWAYS – just awesome.
Auch das Icinga-Team hat natürlich seinen Anteil an der Entstehung dieses Buchs. Ohne seine Arbeit gäbe es nichts, worüber wir schreiben könnten. Aber einige der Teammitglieder haben uns auch direkter unterstützt: mit Reviews und dem Beantworten einiger Fragen, die sich im Laufe des Schreibens ergeben haben. Ihren Teil beigetragen haben alle, aber namentlich nennen möchte ich vor allem Bernd, Michi, Gunnar, Eric und Tom, die besonders unter uns zu leiden hatten.
Bedanken möchte ich mich ebenfalls bei einigen meiner Kunden, mit denen ich mich ausgiebig über das Buch unterhalten habe und in deren Umgebung der eine oder andere Codeschnipsel seinen Ursprung hat. Ihr wisst hoffentlich, dass ich euch meine.
Nicht vergessen möchte ich meine Eltern. Sie haben immerhin viel dazu beigetragen, dass ich zu dem geworden bin, der ich heute bin. Ohne ihre Unterstützung hätte ich mich nicht dahin entwickeln können, wo ich jetzt stehe. Vielen Dank dafür, dass ihr mir geholfen habt, wo ich es brauchte, ohne mich daran zu hindern, meinen Weg zu gehen.
Ebenso danke ich meinen Freunden aus früherer und heutiger Zeit. Auch sie haben ihren Anteil daran, dass ich jetzt in der Lage bin, zu tun, was ich tue. Dankbar bin ich vielen, aber namentlich erwähnen möchte ich den Hias, Asi und Babsi, die mir gezeigt haben, wie schön es ist, enge Freunde zu haben. Andi danke ich dafür, dass er mir in einer sehr dunklen Zeit beigestanden hat und immer noch mein Freund ist. Max dafür, dass er so vieles nachvollziehen konnte. Und Benny »sleepless« dafür, dass er mir bewiesen hat, dass enge Freundschaften auch über das Internet möglich sind. Joe dafür, dass er ein lebendes Beispiel dafür ist, dass man verwandt und befreundet zugleich sein kann. Pazi dafür, dass sie einem immer das Gefühl gibt, willkommen und geschätzt zu sein, egal, wie lang man sich mal wieder nicht gesehen hat. Dem Plainer dafür, dass er die ritterlichste Person ist, die ich kenne. Daniel dafür, dass er mir gezeigt hat, dass man Gleichgesinnte in den unterschiedlichsten Menschen finden kann. Meinen Schwiegereltern dafür, dass sie mich so offen aufgenommen haben.
Danken möchte ich den »Drei ???« für endlose Stunden voller Hörspiele während Zugfahrten und beim Einschlafen, George Lucas für »Star Wars« und Extrema Ratio für die besten Messer der Welt.
Natürlich möchte ich auch Lennart dafür danken, dass wir gemeinsam dieses Projekt gestemmt haben. Es war sicher nicht immer leicht mit mir und ohne ihn wäre das Buch wohl nie Realität geworden. Danke dafür und beileibe nicht nur dafür! Unter anderem auch für viele erheiternde und erhellende Gespräche, gemeinsame Videoabende und Diskussionen über den Unterschied zwischen Deutsch und Österreichisch. Dafür, dass du Kollege und Freund bist.
Auch unserer Hündin Afra möchte ich danken. Sie hilft mir immer wieder, den Kopf bei einem Spaziergang freizubekommen oder mich aufzuheitern, wenn mich mal wieder was »anzipft«.
Zu guter Letzt möchte ich mich bei meiner Frau Ina bedanken. Für mehr, als ich hier aufzählen kann, aber vor allem auch dafür, dass sie meinen Job als Consultant akzeptiert und dabei so oft auf mich verzichtet. Dass sie immer da ist, wenn ich Unterstützung und ein offenes Ohr brauche, und nie gemurrt hat, wenn es wieder mal »ums Buch« ging. Aber auch für die vielen wunderbaren gemeinsamen Jahre, weshalb auch sie maßgeblich daran beteiligt ist, dass ich so ein Projekt überhaupt angehen konnte. Vielen, vielen Dank!
Danke euch allen, dass ihr euch meine endlosen »Ich schreib jetzt mein eigenes Buch!«- und »Ja, es ist eh bald fertig«-Vorträge angehört und ertragen habt. Und danke auch einigen von euch für die Kommentare, Meinungen und Reviews, die alle dieses Buch besser gemacht haben, als es ohne euch geworden wäre.
Für die zweite Auflage möchte ich noch mal all jenen danken, die unser erstes »Baby« so aufmerksam gelesen und uns unheimlich wertvolles Feedback gegeben haben. Ich hoffe, wir haben alles erwischt und berücksichtigt. Es ist immer wieder schön, mit Lesern zu reden und zu sehen, wenn es tatsächlich jemandem genützt hat.
Vielen Dank für alles.
Thomas Widhalm
Da hat mir der Thomas nicht viel übrig gelassen. Ich möchte all denen in meiner Familie und meinem Freundeskreis danken, die unter diesem Projekt gelitten haben.
Ein besonderen Dank an Bernd, Michael und Bodo. An Bernd, der das Vorwort auch zur zweiten Auflage verfasste, Michael Friedrich, der das Kapitel über Dashing beisteuerte, und Bodo Schulz, der sich mit einem Abschnitt über die von ihm geschriebene Ruby-Bibliothek beteiligte.
Servus
Lennart
Die Qualität jedes Fachbuchs misst sich am Nutzen, den es für seine Leser hat. Wir würden uns freuen, davon zu hören, was Sie als Leser nützlich im Buch fanden und wo wir uns noch verbessern können. So wie sich die beschriebene Software weiterentwickelt, soll es auch unser Buch tun und hiermit geben wir Ihnen die Chance, die Richtung zu beeinflussen, in die es geht.
Für Rückmeldungen zum Buch freuen wir uns über E-Mails an [email protected].
IEinführung
1Einleitung
1.1Es war einmal…
1.2Software-Komponenten
1.3Grundlagen
2Installation
2.1Repositories
2.2Sicherheits- und Zugriffskontrolle
2.3Icinga 2 und Plugins
2.4Icinga Data Output
2.5API einrichten
2.6Icinga Web 2
3Erste Schritte auf der Benutzeroberfläche
3.1Dashboards
3.2Navigation
3.3Detailansicht von Host- und Service-Checks
3.4Monitoring Health
3.5Aktionen auf Mehrfachauswahlen
3.6Benutzereinstellungen
4Grundkonfiguration von Icinga 2
4.1Konstanten
4.2Icinga Template Library
4.3Features
5Überwachen mit Icinga 2
5.1Kleine Sprachreferenz
5.2Check Commands
5.3Host und Hostgroups
5.4Service und Servicegroups
5.5Makros und deren Substitution
5.6Timeperiods
5.7Scheduled Downtimes
5.8Debugging der Konfiguration
5.9Funktionen
6Informationsabfrage mit SNMP
6.1Internet Standard Management Framework
6.2Die Management Information Base
6.3SNMP-Versionen
6.4Tools zur SNMP-Abfrage
IIBetriebssystemüberwachung
7Der Icinga-Agent
7.1Konfiguration des Masters
7.2Zertifikate beglaubigen
7.3Konfiguration des Icinga-Agenten auf Linux
7.4Konfiguration des Icinga-Agenten auf Windows
7.5Anbindung von Agenten an den Master
7.6Überwachen von Linux mittels Icinga-Agent
7.7Überwachen von Windows mittels Icinga-Agent
7.8Automatisierung der Installation
8Überwachung mittels Secure Shell
8.1Schlüsselpaar und Client-Konfiguration
8.2Unix-Überwachen mittels SSH am Beispiel von Solaris
9Überwachung mit NRPE
9.1Linux-Überwachung per NRPE
9.2Windows-Überwachung per NRPE
10SNMP
10.1NET-SNMP-Agent auf Unix-Systemen
10.2Plugins für SNMP-Abfragen
IIIFortgeschrittene Überwachung
11Icinga Web 2 einsetzen und anpassen
11.1Filter
11.2Dashboards
11.3Kommentare
11.4Acknowledgements – Bestätigen von Problemen
11.5Downtimes
12Benachrichtigungen
12.1Das Benachrichtigungssystem
12.2Flapping-Erkennung
12.3Abhängigkeiten
12.4Eskalationen
12.5Events
12.6Benachrichtigung über Telegram
13Verteilte Überwachung
13.1Zonen und Endpunkte
13.2Installation und Konfiguration eines Satelliten
13.3Konfiguration auf Zonen aufteilen
13.4Zertifikatsbeglaubigung in Verteilten Umgebungen
13.5Dezentrale Benachrichtigung
14Beispielumgebung aus der Praxis
14.1Analyse der Ausgangslage
14.2Planung der Monitorumgebung
14.3Implementation der Grundüberwachung
15Applikationen und Dienste überwachen
15.1Netzwerkdienste
15.2Datenbanken
15.3Application Server
15.4SAP
15.5Microsoft-Infrastrukturdienste
15.6Elastic Stack
15.7VMware vSphere
15.8Hardware
15.9Datensicherung
15.10Puppet
15.11Plugins entwickeln und veröffentlichen
15.12Bewerten von Plugins
16Hochverfügbarkeit
16.1Icinga 2 hochverfügbar
16.2IDO hochverfügbar
16.3Icinga Web 2 hochverfügbar
16.4Director hochverfügbar
16.5Grapher hochverfügbar
16.6Split Brain
16.7Externe Komponenten
IVIntegration
17Erweiterung der Funktionalität von Icinga Web 2
17.1Ressourcen
17.2Berechtigungen
17.3Icinga Web 2 auf der Kommandozeile
17.4Module
18Businessprozesse
18.1Einen ersten Businessprozess anlegen
18.2Benachrichtigungen einrichten
18.3Bearbeiten von Prozessen
18.4Simulation von Ausfällen
18.5Ein komplexes Beispiel
19Director
19.1Installation
19.2Deployment der Konfiguration
19.3Hosts und Host-Templates
19.4Services und deren Templates
19.5Servicesets
19.6Datenfelder und Listen
19.7Commands
19.8Kombination mit Konfigurationsdateien mittels Fileshipper
19.9Automatisierung und Synchronisation
19.10Benachrichtigungen
19.11Integration der Agenten-Installation mit Powershell
19.12Monitoring des Director
20Graphing
20.1Datenbanken für Zeitreihen
20.2PNP4Nagios
20.3Graphite
20.4InfluxDB
20.5Grafana
20.6Wachsende Zähler
21Icinga 2 REST-API
21.1ApiUser
21.2curl
21.3Einfache Abfragen
21.4Komplexe Abfragen
21.5Actions
21.6Verwalten von Objekten
21.7Abonnieren von Event Streams
21.8Browser-Output
21.9Ruby-Bibliothek
21.10Dashboards für Gesamtübersichten mit Dashing
22Logmanagement
22.1Elastic Stack
22.2Icinga 2 Logs
Anhang
ATroubleshooting
A.1Do it yourself
A.2Professionelle Hilfe
A.3Vorbereitung ist alles
A.4Ein Treffen mit Freunden
BErgänzungen zur Konfiguration
B.1Check Commands
B.2Templates für Exchange
CGoldene Bulle
C.1Benachrichtigungen
C.2Autarkes Monitoring
C.3Überwachung der Monitoring-Infrastruktur
C.4Aussagekraft der Überwachung
C.5Passive Checks nur in Kombination mit aktiven Checks
C.6Hinterfragen von bestehenden Systemen
C.7Vererbung
DDas, was du zurücklässt
D.1Updates
EAbkürzungsverzeichnis
Index
Mit dem Begriff »Monitoring« werden Systeme bezeichnet, die den Zustand von Geräten und Programmen überwachen und beim Abweichen vom gewünschten Zustand Alarmmeldungen verschicken.1
Ohne Monitoring können die Betreuer von IT-Systemen nur dann reagieren, wenn ein Anwender eine Störung meldet oder sie selbst durch sehr zeitaufwendige manuelle Kontrolle oder per Zufall ein Problem feststellen. Beim heute üblichen Zahlenverhältnis zwischen Systemen und Betreuern ist eine manuelle Kontrolle nicht mehr zu realisieren und wenn ein Anwender ein Problem feststellt, ist es eigentlich schon zu spät, da genau diese Probleme ja verhindert werden sollen.
Um diese Problematik zu lösen, werden Monitoring-Systeme benötigt, die versuchen, Schwierigkeiten frühzeitig zu bemerken, damit sie behoben werden können, bevor sie größeren Schaden anrichten können oder bevor Benutzer davon betroffen sind. Dafür gibt es verschiedene Ansätze:
Ermitteln von Ergebnissen einer eigenen Statusprüfung und Logs von Anwendungen oder Hardware.
Ende-zu-Ende-Checks wie das Versenden einer E-Mail und Prüfen, ob sie auch ankommt.
Simulieren einer Nutzung eines Dienstes wie das Aufrufen einer Website.
Prüfen von Eckdaten eines Systems wie das Abfragen der Festplattenauslastung mit Bordmitteln.
Icinga 2 bietet dabei die Möglichkeit, alle oben genannten Verfahren abzudecken, spezialisiert sich jedoch auf die letzten beiden Ansätze. Diese Flexibilität rührt daher, dass Icinga 2 selbst keine Funktionalität zur direkten Überwachung enthält, aber sehr gut darin ist, »Plugins«, also ausführbare Dateien, die ein paar Anforderungen erfüllen, laufen zu lassen und die Ausgabe zu interpretieren. Falls sich also eine Überwachungsmöglichkeit in einer ausführbaren Datei realisieren lässt, kann sie auch in Icinga integriert werden.
Icinga 2 ist ein sehr modernes Monitoring-System, das keinen Code von seinen geistigen Vorgängern enthält, aber fast alle bewährten Konzepte weiterverwendet. Diese Ähnlichkeit erleichtert vor allem Umsteigern die Arbeit mit Icinga 2 deutlich. Die folgenden Zeilen sollen einen kurzen Überblick über die bisherige Entwicklung geben.
Im April 2009 wurde das Icinga-Projekt gegründet, das einen Fork des Nagios-Monitoring-Systems entwickeln sollte, da viele Community-Mitglieder unglücklich über den Umgang mit eingereichten Patches und den Umgang von Nagios Enterprises mit der Nagios-Community waren. Bei einem Fork wird der aktuelle Stand des Quellcodes eines Programms von verschiedenen Entwicklerteams in unterschiedliche Richtungen weiterentwickelt. Häufig wird dabei das bisherige Team aufgespalten und je ein Teil entwickelt vom gleichen Ausgangspunkt aus in verschiedene Richtungen weiter. Üblicherweise behält dabei ein Team den Namen des Produkts bei und das andere sucht sich einen neuen. Beim Icinga-Team fiel die Wahl auf »Icinga«, das Zulu-Wort für »Ausschau halten«.
Der Fork, und damit auch die weiteren Schritte wie die Evolution von Icinga zu Icinga 2, war insbesondere auch möglich, da einige Firmen bereit waren, Entwicklern Zeit zu sponsern, um die Entwicklung von Icinga voranzutreiben. Dies geschah meist aus Eigeninteresse, da sie Monitoring auf Nagios-Basis bei sich oder ihren Kunden erfolgreich einsetzten und eine Lösung für die schleppende Entwicklung suchten. Der Fork war nötig, da zuvor zwar entwickelt wurde, die daraus resultierenden Patches jedoch nicht in Nagios einflossen. Das Icinga-Team bemüht sich, schneller auf Input aus der Community zu reagieren, und hat auch genug »Stammmitglieder«, um die Entwicklung voranzutreiben. Eine dieser Firmen ist die NETWAYS GmbH2 aus Nürnberg in Deutschland, die einige der Icinga-Kernentwickler angestellt hat, die entweder im Kundenauftrag oder als Dienst an der Community weiter an Icinga, Icinga 2 und anderen Tools aus diesem Ökosystem arbeiten. Auch die Autoren dieses Buchs haben von der NETWAYS GmbH Zeit gesponsert bekommen, um dieses Projekt zu verwirklichen.
Um einige sehr tief im Code verwurzelte Einschränkungen aufzulösen, hat sich das Icinga-Team entschlossen, mit dem Code bei null zu beginnen und alles komplett neu zu schreiben. Das Resultat ist das Release von Icinga 2 Version 2.0 vom 16. Juni 2014. Darin wurden die bekannten Konzepte in der Bedienung weitergeführt, aber auch einige sehr wichtige Neuerungen eingeführt.
Diese Neuerungen umfassen unter anderem:
eine Domain Specific Language (
DSL
) zur Konfigurationi,
den integrierten Cluster-Stack, zur Kommunikation von verschiedenen Icinga-Instanzen untereinander,
das Verteilen von Teilen der Konfiguration an beliebig viele andere Icinga 2 Instanzen,
besseres Ausnutzen der verfügbaren Ressourcen durch Multithreading,
der Einsatz als Agent,
die API, mit der u. a. zu überwachende Objekte zur Laufzeit hinzugefügt werden können.
Die neue regelbasierte Sprache erlaubt eine deutlich flexiblere Konfiguration. Viele Objekte, die früher einzeln definiert werden mussten, können nun automatisch durch Auswerten von Regeln und Funktionen angegeben werden. Das spart nicht nur sehr viel Tipparbeit, sondern schützt auch vor Fehlern, da einmal definierte Regeln natürlich auch für neue Objekte gelten.
Um Demilitarized Zones (DMZs) oder entfernte Netzwerke zu überwachen, wurden auch bei den Vorgängern von Icinga 2 schon mehrere Instanzen verwendet, die miteinander kommunizieren. Allerdings enthielten diese keinen nativen Weg, mehrere Instanzen miteinander zu verbinden, weshalb verschiedenste Lösungen dafür entwickelt wurden. Diese waren jedoch teilweise kompliziert zu konfigurieren und oft auch nicht performant genug, um die Zeit zwischen Auftreten einer Störung und der Alarmierung ausreichend kurz zu halten. Dieses Verbinden von Instanzen wurde auch genutzt, um die auftretende Last zwischen mehreren Hosts zu verteilen und in Verbindung mit Clustertools wie corosync3 und pacemaker4 Hochverfügbarkeit zu erreichen.
Durch die neue Clusterfunktionalität können nicht nur lastverteilte und hochverfügbare Cluster mit Icinga 2 Bordmitteln erreicht werden, auch untergeordnete Icinga 2 Instanzen in anderen Netzsegmenten können Ergebnisse von Checks, die sie ausführen, an zentrale Instanzen weiterschicken. Diese zeigen einen Gesamtüberblick an und alarmieren.
Über die Clusterverbindung kann auch von zentralen Systemen aus eine Konfiguration an untergeordnete Instanzen ausgebracht werden.
Die Vorgänger von Icinga 2 liefen als ein einziger Thread und konnten so auch nur einen CPU-Kern ausnutzen. Zwar waren die gestarteten Plugins immer schon eigene Threads, dennoch wurde dadurch einer Installation eine Obergrenze an zu überwachenden Systemen gesetzt. Icinga 2 ist nun multithreaded und kann die zur Verfügung stehenden Ressourcen tatsächlich ausnutzen.
Durch den geringen Ressourcenverbrauch des Icinga 2 Kerns, die Clusterverbindung und die Konfigurationsverteilung hat sich eine neue Anwendungsmöglichkeit als Agent ergeben. Dabei wird eine Icinga 2 Instanz auf einem zu überwachenden Host installiert, die nur eben diesen überwacht. Die Ergebnisse leitet sie über die Clusterverbindung an eine zentrale Instanz weiter, die die Checks aller angeschlossenen Icinga 2 Instanzen sammelt und eine Übersicht zur Verfügung stellt. Konfiguriert wird sie von der zentralen Instanz aus. Für einen Vergleich aus Anwendersicht bietet die Icinga 2 Onlinedokumentation5 einen umfassenden Überblick an.
Aktuell wird nur noch die Version 2.x weiterentwickelt. Dieses Buch behandelt ausschließlich den 2.x-Zweig der Entwicklung. Mit dem Versionssprung von 1.x auf 2.x geht aber auch eine Umbenennung einher, daher heißt das Tool nun tatsächlich »Icinga 2 Version 2.x«.
Gleiches gilt für das moderne Webinterface Icinga Web 2. Es ist übrigens zu beiden existierenden Icinga-Varianten kompatibel, weshalb man durchaus Icinga 2 2.8.1 wie auch Icinga 1.13.3 mit Icinga Web 2 2.5.1 betreiben kann.
Die hier genannten Versionen waren zum Zeitpunkt, als die zweite Auflage dieses Buchs entstand, die jeweils aktuellsten.
Ein Monitoring-System auf Basis von Icinga 2 besteht aus mehreren Teilkomponenten, so bildet der Core »Icinga 2« das Grundgerüst. Er regelt alle Abläufe, unter anderem z. B., wann was wie zu überwachen ist.
Die eigentliche Arbeit der Überwachung wird dann durch sogenannte Plugins erledigt, die vom Core aufgerufen werden und deren Ergebnisse dann verarbeitet werden. Plugins werden gesondert angeboten und nicht vom Icinga-Team betreut.
Die Komponente Icinga Web 2 ist ein in Hypertext Preprocessor (PHP) geschriebenes Framework zur Darstellung der ermittelten Ergebnisse der Überwachung mit Icinga 2. Als Schnittstelle zwischen Core und dem in einem Webserver laufenden Icinga Web 2 muss eine Datenbank verwendet werden. Unterstützt werden ausschließlich MariaDB respektive MySQL oder PostgreSQL. Das Beschicken dieser Datenbank ist über ein explizit einzuschaltendes Core-Feature zu aktivieren.
Icinga 2
Plugins, z. B. die Monitoring-Plugins
6
MariaDB-, MySQL- oder PostgreSQL-Datenbank
Icinga Web 2
Webserver mit
PHP
, standardmäßig Apache
Alle Komponenten werden in eigenen Projekten gepflegt und weiterentwickelt, somit wird auch jede unter einer eigenen Versionierung geführt. Darüber hinaus existieren viele weitere Komponenten, die über das bis hierher Erwähnte hinausgehen. So existiert mit dem Director eine Integration in Icinga Web 2 zur grafisch unterstützten Konfiguration oder diverse Projekte, die zeitliche Verläufe von Daten aus anderen Projekten wie Graphite oder InfluxDB einbinden.
Icinga 2 ist wie auch sein Vorgänger auf Verfügbarkeitsüberwachung ausgelegt. Hierbei wird primär mit aktiven Checks gearbeitet. Als ein Check wird der Test eines Hosts oder Services bezeichnet. Jedes Gerät mit einer IP-Adresse wird als Host-Objekt betrachtet. Ein Service ist immer einem Host zugeordnet, ist also z. B. ein auf einem Host laufender Dienst oder eine zu überwachende Hardwarekomponente. Die Logik, wie Tests zu erfolgen haben, ist in sogenannten Plugins implementiert. Plugins sind externe Programme, die für jeden aktiven Check aufgerufen werden und über ihren Returncode den ermittelten Status zurückgeben.
Plugins können somit auch durch den Benutzer zu Testzwecken aufgerufen werden. Zu beachten ist, dass dies durch den Benutzer erfolgen sollte, unter dem der Icinga 2 Prozess ausgeführt wird. Auf RedHat-Systemen ist das icinga, auf Debian hingegen historisch bedingt der Benutzer nagios.
$ sudo -u icinga /usr/lib64/nagios/plugins/check_procs
PROCS OK: 100 processes | procs=100;;;0;
So ermittelt z.B. das Plugin check_procs durch einen Aufruf ohne Parameter die momentan auf dem System lauffähigen Prozesse. Die Ausgabe informiert über den ermittelten Status und die Anzahl der Prozesse. Der Text nach dem senkrechten Strich (Pipe) enthält Metriken, die das Plugin ermittelt hat, die sogenannten Performance-Daten. Eine genaue Erläuterung erfolgt in Kapitel 20 ab Seite 470.
Plugins sollten auch immer eine Hilfsfunktion bieten, damit ein Anwender dessen Funktionsumfang kennenlernen kann.
$ cd /usr/lib64/nagios/plugins
$ sudo -u icinga ./check_procs --help
check_procs v2.1.4 (nagios-plugins 2.1.4)
Copyright (c) 1999 Ethan Galstad <[email protected]>
Copyright (c) 2000-2014 Nagios Plugin Development Team
Checks all processes and generates WARNING or CRITICAL
states if the specified metric is outside the required
threshold ranges. The metric defaults to number of
processes. Search filters can be applied to limit the
processes to check.
Usage:
check_procs -w <range> -c <range> [-m metric] [-s state]
[-p ppid] [-u user] [-r rss] [-z vsz] [-P %cpu]
[-a argument-array] [-C command] [-k] [-t timeout] [-v]
Options:
-h, --help
Print detailed help screen
-V, --version
Print version information
--extra-opts=[section][@file]
Read options from an ini file. See
https://www.nagios-plugins.org/doc/extra-opts.html
for usage and examples.
-w, --warning=RANGE
Generate warning state if metric is outside this range
-c, --critical=RANGE
Generate critical state if metric is outside this range
[...]
Plugins müssen vier Zustände zurückliefern können, OK, WARNING, CRITICAL und UNKNOWN. Diese werden als Returncode vom Plugin zurück gegeben. Kann ein Zustand nicht ermittelt werden, weil z. B. das Plugin nicht ausführbar ist oder eine gewisse Laufzeit überschreitet und damit in einen Timeout läuft, ist der Rückgabewert UNKNOWN. Wann die anderen drei Zustände eintreten, kann bei nahezu allen Plugins durch die Angabe von Schwellwerten7 beeinflusst werden.
Returncode
Servicestatus
Hoststatus
0
OK
UP
1
WARNING
UP
2
CRITICAL
DOWN
3
UNKNOWN
DOWN oder UNREACHABLE wird aus Abhängigkeiten berechnet
Tabelle 1-1: Plugin-Returncodes, Service- und Hoststatus
Diese Schwellwerte beziehen sich immer auf die ermittelten Metriken, bei check_procs ist das z. B. die Anzahl der lauffähigen Prozesse. So liefert das folgende Beispiel ein WARNING, da der entsprechende Schwellwert auf 90 gesetzt wurde und der Schwellwert für ein CRITICAL erst bei 120 liegt. Liefen also 120 Prozesse oder mehr, meldete das Plugin den Status CRITICAL.
$ sudo -u icinga ./check_procs -w 90 -c 120
PROCS WARNING: 100 processes | procs=100;90;120;0;
Der Returncode des letzten gelaufenen Prozesses kann mit echo ausgegeben werden:
$ sudo -u icinga ./check_procs -w 80 -c 90
PROCS CRITICAL: 100 processes | procs=100;80;90;0;
$ echo $?
2
Ein Host kann drei unterschiedliche Zustände annehmen, ein Service hingegen vier. Das Plugin erkennt jedoch nicht, ob ein Host oder ein Service zu überwachen ist. Es liefert immer Zustände zwischen 0 und 3 zurück, also vier wie für Services. Handelt es sich aber um einen Host, interpretiert Icinga 2 die Werte entsprechend. Die Werte OK und WARNING bedeuten, dass sich der Host im Status UP befindet. Die Unterscheidung zwischen DOWN und UNREACHABLE muss berechnet werden und setzt voraus, dass zwischen Hosts Abhängigkeiten definiert sind. Wie dies zu realisieren ist, wird in Abschnitt 12.3 ab Seite 184 erläutert.
Ruft Icinga 2 ein Plugin auf, wird von aktiven Checks gesprochen. Dies geschieht regelmäßig in einem anzugebenden Intervall und ist von Icinga 2 fortwährend zeitlich einzuplanen. Definiert man in der Konfiguration den zu überwachenden Host oder Service als passiv, wartet Icinga 2 auf Informationen über den Status, der von einer externen Quelle geliefert werden muss. Mehr Informationen zu passiven Checks finden sich unter Kapitel 21.5 ab Seite 549.
Abbildung 1-1: Aktive und passive Checks
Eine weitere wichtige Aufgabe des Monitorings ist die Benachrichtigung über erkannte Probleme. Hierbei ist es womöglich wünschenswert, über unterschiedliche Probleme verschiedene Personenkreise zu informieren. Diese Benachrichtigungen können je nach Grad der Wichtigkeit auf unterschiedlichen Wegen erfolgen; üblich sind Mails, Instant Messenger, SMS oder Voicecalls. Mehr Informationen zu Benachrichtigungen und wie sie konfiguriert werden, zeigt Kapitel 12 ab Seite 177.
Auch möchte man solche Benachrichtigungen gegebenenfalls unterdrücken, weil sie zeitlich in eine Downtime fallen und es sich damit um einen geplanten Ausfall handelt. Downtimes können bei Icinga 2 auf zwei Weisen angegeben werden: als wiederkehrendes Ereignis mit Scheduled Downtime bezeichnet, die in der Konfiguration hinterlegt werden muss, oder als einmaliges. Letzteres wird zur Laufzeit vom Benutzer erzeugt und Downtime genannt.
Icinga 2 ist modular aufgebaut und rüstet alle Funktionalität über sogenannte Features nach. So kümmert sich z. B. notification um die Benachrichtigung oder checker um den Aufruf von Plugins und damit um die Planung, wann aktive Checks auszuführen sind. Alle Features werden ausführlich in Abschnitt 4.3 ab Seite 49 vorgestellt.
Das Icinga-Projekt1 stellt auf seiner Website Installationspakete für Debian, SuSE, Red Hat und deren jeweilige Derivate zur Verfügung. Pakete bieten gegenüber einem selbst durchgeführten Übersetzen einige Vorteile:
Bei der Installation aus Paketen werden alle weiteren benötigten Pakete ebenfalls automatisch mit installiert.
Die Pflege, also das Einspielen neuer Versionen, wird erheblich erleichtert. Die Binärdateien werden aktualisiert, die Konfigurationsdateien bleiben jedoch aus der bisher laufenden Installation erhalten.
Auch auf starker Hardware benötigt das Übersetzen von Icinga 2 viel Zeit, die über das Kochen und den anschließenden Konsum von Kaffee weit hinaus geht.
Die einzelnen Komponenten, wie Core, die Anbindung einer Datenbank oder Icinga Web 2, sind aufeinander und auf die Besonderheiten der Betriebssysteme abgestimmt und so vorkonfiguriert, dass sie mit möglichst geringem Aufwand zusammenarbeiten.
Das Icinga-Team stellt neue Paketversionen immer zeitnah auf Servern zum Download zur Verfügung. Den aktuellen Entwicklungsstand kann man als »Nightly Snapshots« ebenfalls verfolgen, ohne auf die Vorteile einer paketbasierten Installation verzichten zu müssen.
Gegenüber den Repositories der Linux-Distributoren bieten die vom Icinga-Projekt angebotenen den Vorteil, dass hier andere Richtlinien zu Versionswechseln gelten können. Das verhindert, dass eine Installation auf einer bestimmten Version eingefroren wird, nur weil es der Richtlinie eines Distributors widerspricht, einen Versionswechsel zuzulassen. Bei einem sich so rasch entwickelnden Projekt wie Icinga 2 ist ein gelegentlicher Versionssprung durchaus sinnvoll.
»Tue es oder tue es nicht, es gibt kein versuchen.«
Meister Yoda, 1980
Um das Repository mit den Paketen der stabilen Releases einbinden zu können, importiert man zuerst den GPG-Schlüssel, der zur Überprüfung der Signaturen der Pakete dient. Danach werden die Repositories je nach Distribution eingebunden und die Indices neu aufgebaut. Eine Anleitung befindet sich zu jeder Distribution auf den Download-Sites2 des Icinga-Projekts.
RedHatFür RedHat basierte Systeme empfiehlt es sich, neben dem Icinga- auch gleich noch des EPEL3-Repository einzubinden, da sich z. B. nur dort die benötigten Monitoring-Plugins als Pakete befinden.
$ rpm --import https://packages.icinga.com/icinga.key
$ yum install -y https://packages.icinga.com \
/epel/icinga-rpm-release-7-latest.noarch.rpm
$ yum install -y https://dl.fedoraproject.org \
/pub/epel/epel-release-latest-7.noarch.rpm
$ yum makecache
DebianRepositories für Debian bieten in der Regel keine Pakete, um sich selbst einzubinden. Für das Icinga-Repository reicht jedoch ein Einzeiler an der richtigen Stelle. Sollen die Pakete via HTTPS bezogen werden, muss ein zusätzliches Paket apt-transport-https für den Paketmanager installiert sein.
$ apt-get install -y apt-transport-https
$ curl https://packages.icinga.com/icinga.key | apt-key add -
$ echo " \
deb https://packages.icinga.com/debian icinga-stretch main" \
> /etc/apt/sources.list.d/icinga.list
$ apt-get update
Zur Erhöhung der Sicherheit setzen Linux-Systeme auf klassische Paketfilter und kernelnahe Zugriffskontrollsysteme wie SELinux oder AppArmor. Paketfilter beschränken die IP-gestützte Kommunikation über das Netzwerk bzw. den lokalen IP-Stack. Die Zugriffskontrollsysteme erweitern die traditionelle Beschränkung von Benutzer (Owner) und Gruppenzugehörigkeit auf Unix um Rollen, Domänen und Abstufungen bei Sensibilität dieser.
Icinga 2 ist immer dann mit restart neu zu starten, wenn sich Einstellungen bezüglich des Benutzers oder der Gruppen ändern. Wird der Benutzer, unter dem Icinga ausgeführt wird, einer anderen Gruppe hinzugefügt, muss restart verwendet werden. In allen anderen Fällen reicht ein reload.
RedHatInstallationen unter RedHat kommen meistens mit aktiviertem SELinux4, das den erfolgreichen Zugriff auf installierte Komponenten wie Icinga Web 2 unterbindet, aber auch die Kommunikation mit der REST-API von Icinga 2.
Der aktuelle Zustand von SELinux wird mit getenforce ermittelt, Änderungen lassen sich zur Laufzeit mit setenforce vornehmen. Ist der ermittelte Wert Disabled oder Permissive, ist SELinux abgeschaltet bzw. protokolliert nur mehr, was es im Modus Enforcing blockieren würde, und erlaubt somit alle benötigten Zugänge. Läuft Icinga 2 zu diesem Zeitpunkt bereits, muss es neu gestartet werden.
$ getenforce
Enforcing
$ setenforce Permissive
$ systemctl restart icinga2.service
Im Gegensatz zu anderen Services muss SELinux für den Systemstart in /etc/sysconfig/selinux deaktiviert werden. Dort ist der Wert zu SELinux auf permissive zu setzen.
Über das öffentlich verfügbare Icinga-Repository werden Policies für Icinga 2 und Icinga Web 2 als Pakete zur Verfügung gestellt. Die Anwendung und Konfiguration werden in der zugehörigen Online-Dokumentation zu icinga2-selinux5 und icingaweb2-selinux6 beschrieben.
Zusätzlich blockt ein Paketfilter hereinkommende Anfragen auf TCP-Port 80. Dieser muss entsprechend konfiguriert werden oder aber komplett abgeschaltet werden. Letzteres zieht sicherlich sicherheitstechnische Bedenken nach sich, soll jedoch ebenfalls zum jetzigen Zeitpunkt genügen.
$ systemctl stop firewalld.service
$ systemctl disable firewalld.service
Debianinstalliert auf einem Server im Allgemeinen keine Zugriffskontrolle oder Firewall. Ist nach der Installation Icinga Web 2 nicht unter der Adresse des Servers mit der URI /icingaweb2 erreichbar, wird die Anfrage womöglich doch durch eine eingeschaltete Firewall geblockt. Bei folgendem iptables-Aufruf sind keine Filterregeln aktiv.
$ iptables -L -n
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Für Debian existieren eine Vielzahl von Firewall-Projekten7. Je nachdem, welches verwendet wird, ist die Konfiguration dahingehend anzupassen, dass eingehende Verbindungen auf TCP-Port 80 erlaubt sind. Alternativ kann die Firewall auch komplett deaktiviert werden.
Die Paketquellen für Icinga 2 sind bei RedHat und Debian gleich, das Repository des Icinga-Projekts. Bei den »Standard«-Plugins verhält sich dies anders. Das EPEL-Repository stellt für RedHat-Systeme die von Nagios Enterprise8 gepflegten nagios-plugins zur Verfügung. Bei Debian setzt man auf die vom Community-Projekt9 bereitgestellten monitoring-plugins. Bis vor einigen Jahren existierten lediglich die von der Community betreuten nagios-plugins, durch Querelen kam es zu den jetzt zwei »unabhängigen« Projekten.
RedHatIm EPEL-Repository ist jedes Plugin einzeln paketiert zu finden. Über das Meta-Paket nagios-plugins-all lassen sich alle dem Projekt zugehörigen Plugins installieren. Die Plugins befinden sich danach im Verzeichnis /usr/lin64/nagios/plugins.
$ yum install icinga2 nagios-plugins-all
$ systemctl start icinga2.service
$ systemctl enable icinga2.service
Wie bei Red Hat üblich, wird der gerade installierte Dienst nicht automatisch gestartet, dies muss per Hand ausgeführt werden. Zusätzlich muss der Service auch für den automatischen Start beim Bootvorgang aktiviert werden. Ab RHEL 7 funktioniert beides mittels systemd. Die älteren System-V-Mechanismen können aber in der 7er-Version auch noch weiterhin verwendet werden. Icinga 2 wird als Benutzer icinga ausgeführt.
DebianAuch bei Debian sind die »Standard«-Plugins in unterschiedliche Pakete aufgeteilt, monitoring-plugins-basic und -standard. Wobei standard als Abhängigkeit basic mit installiert. Das Meta-Paket monitoring-plugins fasst dann nochmals beide zusammen. Alle werden im Dateisystem unter /usr/lib/nagios/plugins abgelegt.
$ apt-get install -y icinga2 monitoring-plugins
Aus Gründen der Kompatibilität existiert zusätzlich zu jedem Monitoring-Plugin-Paket auch noch ein Dummy-Paket mit entsprechender Benennung mit nagios. So installiert das Paket nagios-plugins dennoch monitoring-plugins.
Im Gegensatz zu RedHat wird der Service icinga2 nach erfolgter Installation gestartet und läuft somit auch schon zum jetzigen Zeitpunkt. Der Systembenutzer, unter dem Icinga 2 auf Debian läuft, ist wie schon erwähnt nagios. Da Icinga 2009 als Ableger von Nagios (Fork) gestartet ist, wird vom Debian-Projekt als Grund angeführt, dass auch alle Zusatzsoftware auf Nagios zugeschnitten ist und den User nagios verwendet. Damit es mit diesen nicht zu Problemen in der Zusammenarbeit mit Icinga kommt, wurde der Benutzer damals beibehalten.
Icinga 2 kommt nach der Installation mit einer Beispielkonfiguration zur Überwachung des eigenen Hosts und einiger Services. Diese ist in /etc/icinga2/conf.d abgelegt und steht unter der Paketverwaltung der jeweiligen Distribution, das heißt, bei Änderungen an den mitgelieferten Dateien kann die eigene Konfiguration beschädigt werden, wenn sich dise im Verzeichnis conf.d befindet.
Da im Folgenden noch auf die Beispiele in conf.d eingegangen wird und diese abgeändert bzw. erweitert werden, dupliziert man am besten das Beispielverzeichnis.
$ cd /etc/icinga2
$ cp -rdp conf.d book.d
Nun muss das neue Verzeichnis noch von Icinga 2 berücksichtigt werden, gleichzeitig ist das alte aus der Konfiguration herauszuhalten, da sonst ja alle Definitionen doppelt vorhanden wären. Hierzu ist in der Datei /etc/icinga2/icinga2.conf in der letzten Zeile conf.d durch book.d zu ersetzen.
//include_recursive "conf.d"
include_recursive "book.d"
Codebeispiel 2.1: Icinga 2 Konfigurationsdatei /etc/icinga2/icinga2.conf
Nach durchgeführten Änderungen an der Konfiguration muss Icinga 2 diese neu laden:
$ systemctl reload icinga2
Voraussetzung für den Einsatz von Icinga Web 2 ist eine PostgreSQL- oder MySQL-Datenbank, die die von Icinga 2 und den Plugins ermittelten Werte mit Hilfe des Features ido in eine Datenbank schreibt. Icinga Web 2 liest dort die Informationen wieder aus, bereitet sie auf und zeigt sie an.
Somit ist zuerst die Entscheidung zu treffen, welches Database Management System (DBMS) zum Einsatz kommen soll. Dieses lässt sich auf einem dedizierten System, aber auch auf dem Icinga-Server selbst betreiben. Je größer die zu überwachende Umgebung, desto wichtiger ist ein schnelles Plattensubsystem mit geringen Latenzen. Direct Attached Storage (DAS), also lokal angebundene Festplatten, ist hierfür nach wie vor am besten geeignet.
Abbildung 2-1: Icinga 2 IDO Anbindung
Icinga 2 als Monitoring-Anwendung verursacht im Datenbank-Backend erhebliche Schreiblast. Jeder mit einem Plugin ermittelte Wert muss in die Datenbank geschrieben werden. Dies zieht eine Vielzahl von SQL-Inserts und Updates nach sich, die IO-Last verursachen. Verkleinert man die Check-Intervalle, steigt die Last linear an.
Das angesprochene Feature befindet sich zum jetzigen Zeitpunkt noch nicht auf dem System, es muss durch die Installation eines weiteren Pakets hinzugefügt werden. Hierbei wird zwischen den unterschiedlichen Datenbanken unterschieden, das heißt, je nachdem, ob PostgreSQL oder MySQL zum Einsatz kommen soll, sind unterschiedliche Pakete zu installieren.
Weiter Verbreitung im Icinga-Umfeld erfreut sich MySQL bzw. MariaDB. Auch auf dem Community-Portal10 erhält man schneller und leichter Unterstützung für MySQL als für PostgreSQL.
RedHatDie Pakete für das DBMS MariaDB kommen bei RedHat aus den eigenen Repositories, das Feature ido-mysql für die kompatible MariaDB stellt das Icinga-Team über ihren Download im Paket icinga2-ido-mysql zur Verfügung. Nach erfolgter Installation muss MariaDB gestartet werden und auch per Hand dafür Sorge getragen werden, dass der Start automatisch bei einem Systemstart erfolgt.
$ yum install -y icinga2-ido-mysql mariadb-server
$ systemctl start mariadb.service
$ systemctl enable mariadb.service
Danach sind die Datenbank und ein Account mit Zugriff auf diese anzulegen sowie das Datenbank-Schema für die IDO einzuspielen.
$ mysql
MariaDB [(none)]> CREATE DATABASE icinga2;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> GRANT SELECT, INSERT, UPDATE, DELETE, \
DROP, CREATE VIEW, INDEX, EXECUTE ON icinga2.* TO \
’icinga2’@’localhost’ IDENTIFIED BY ’XXX’;
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> exit
Bye
$ mysql icinga2 < /usr/share/icinga2-ido-mysql/schema/mysql.sql
Debianstellt ebenfalls über ihr Standard-Repository die Pakete für MariaDB bereit. Das Paket mit dem IDO-Feature kommt auch hier vom durch das Icinga-Team gehosteten Repository.
$ apt-get install -y icinga2-ido-mysql mariadb-server
Abbildung 2-2: Konfiguration der IDO-Datenbank mittels dbconfig auf Debian
Auf Debian-Systemen unterstützt dbconfig die Einrichtung des DBMS und der Datenbank für Icinga. Zusätzlich wird auch die Konfiguration des IDO-Features nach der Installation angeboten.
Bei den Pakten zur aktuellen Version 2.8 von Icinga 2 funktioniert die Aktivierung des Features jedoch nicht und muss nachträglich per Hand durchgeführt werden.
Zu PostgreSQL müssen die Autoren gestehen, nicht ausreichend praktische Erfahrungen zu besitzen. Erfahrungen fehlen hier vor allem für größere Umgebungen mit mehr als 20.000 Services. Probleme bestehen durch massive Insert- und Update-Queries im Zusammenhang mit dem Vacuum-Prozess von PostgreSQL. Das Freiräumen von nicht mehr genutztem Platz, der damit wieder freizugeben ist, kann dem angesprochenen Aufkommen zu einem gewissen Zeitpunkt nicht mehr nachkommen. Dies soll jedoch niemanden abhalten, PostgreSQL als Backend zu verwenden, da bestimmt Möglichkeiten zum Performance-Tuning bestehen.
RedHatbietet Pakete zu PostgreSQL in seinem Basis-Repository an. Das Paket icinga2-ido-pgsql zum IDO-Feature kommt wieder aus dem Repository des Icinga-Projekts. Bevor PostgreSQL erst mal gestartet werden kann, muss das DBMS initialisiert werden.
$ yum install -y icinga2-ido-pgsql postgresql-server
$ /usr/bin/postgresql-setup initdb
$ systemctl start postgresql.service
$ systemctl enable postgresql.service
Für PostgreSQL ist noch etwas mehr zu tun. Zuerst wird ebenfalls eine Datenbank angelegt. Dies ist dem Benutzer »root« nicht gestattet, es muss als Datenbankadministrator »postgres« geschehen.
$ cd ˜postgres
$ sudo -u postgres psql -c \
"CREATE ROLE icinga2 WITH LOGIN PASSWORD ’XXX’"
$ sudo -u postgres createdb -O icinga2 -E UTF8 icinga2
Das Berechtigungskonzept verlangt jedoch zusätzlich noch die Autorisierung, von wo aus zugegriffen werden darf, und diese wird nicht in einer Datenbank des DBMS hinterlegt, sondern in der Konfigurationsdatei pg_hba.conf. Für den lokalen Zugriff sind die folgenden, die Datenbank icinga2 betreffenden drei Zeilen einzufügen und dies vor den vordefinierten anderen lokalen Zugriffen.
$ icinga
local icinga2 icinga2 md5
host icinga2 icinga2 127.0.0.1/32 md5
host icinga2 icinga2 ::1/128 md5
$ "local" is for Unix domain socket connections only
local all all ident
$ IPv4 local connections:
host all all 127.0.0.1/32 ident
$ IPv6 local connections:
host all all ::1/128 ident
Codebeispiel 2.2:/var/lib/pgsql/data/pg_hba.conf
Nach Änderungen an der pg_hba.conf muss PostgreSQL neu gestartet werden. Danach kann das Einspielen des Datenbankschemas für die IDO als Datenbankbenutzer icinga2 erfolgen:
$ systemctl restart postgresql.service
$ psql -U icinga2 -d icinga2 \
< /usr/share/icinga2-ido-pgsql/schema/pgsql.sql
DebianIm Gegensatz zu RedHat läuft hier PostgreSQL schon nach der Installation und muss nicht per Hand initialisiert werden. Auch mit Hilfe des dbconfig-Systems wird im Anschluss interaktiv die nahezu komplette Konfiguration durchgeführt.
Abbildung 2-3: Aktivieren des IDO-Features auf Debian
$ apt-get install -y icinga2-ido-pgsql postgresql
Neben der generellen Frage, ob das IDO-Feature konfiguriert werden soll, folgen weitere Fragen zum Anlegen der Datenbank, eines Benutzers und zum Einspielen des IDO-Schemas.
Ob das IDO-Feature im Icinga eingeschaltet werden soll, ist jedoch genauso wie für MySQL defekt. Damit ist mit folgendem Abschnitt fortzufahren, um dies manuell durchzuführen.
Für das Schreiben in die Datenbank muss das entsprechende IDO-Feature eingeschaltet sein. Der momentane Zustand, welche Features aktiviert bzw. deaktiviert sind, wird mit icinga2 feature list ermittelt.
$ icinga2 feature list
Disabled features: api command compatlog debuglog gelf ...
Enabled features: checker ido-mysql mainlog notification
Ebenfalls mit icinga2 feature werden Features an- (enable) und abgeschaltet (disable). Die Distribution macht hierbei keinerlei Unterschied.
Die jeweiligen Konfigurationsdateien befinden sich im Verzeichnis /etc/icinga2/features-available. Mit der Aktivierung wird ein Link nach /etc/icinga2/features-enabled gesetzt. Die dortigen Konfigurationsdateien werden dann bei dem nötigen Neustart von Icinga 2 eingelesen.
MySQLerfordert das Feature ido-mysql. Die entsprechende Datei zur Konfiguration enthält die Zugangsdaten zur Datenbank und die Angabe, wo sich diese befindet.
Codebeispiel 2.3:/etc/icinga2/features-available/ido-mysql.conf
Nach gemachten Einstellungen kann das Feature wie folgt aktiviert werden. Auf RedHat sollte dies schon von der Paketinstallation erledigt worden sein. Bei Debian liegt hingegen oben beschriebener Bug vor, so dass hier der folgende Schritt auszuführen ist. Danach ist zwingend der Neustart von Icinga 2 erforderlich, auch bei RedHat.
$ icinga2 feature enable ido-mysql
Enabling feature ido-mysql. Make sure to restart Icinga 2 for...
$ systemctl reload icinga2
Ab sofort schreibt Icinga 2 zusätzlich zu Status- und Logdateien auch in die IDO-Datenbank. Verbindet man sich nun mit der Datenbank, kann durch SQL-Abfragen kontrolliert werden, ob die vorgenommene Konfiguration reibungslos funktioniert.
MariaDB [icinga2]> SELECT * FROM icinga_hosts\G
*************************** 1. row ***************************
host_id: 1
instance_id: 1
config_type: 1
host_object_id: 54
alias: fornax.icinga-book.local
display_name: fornax.icinga-book.local
address: 127.0.0.1
address6: ::1
[...]
1 row in set (0.00 sec)
So liegen in der Tabelle icinga_hosts die Informationen der konfigurierten Host-Objekte und in icinga_services die der Services.
MariaDB [icinga2]> SELECT count(*) FROM icinga_hosts;
+----------+
| count(*) |
+----------+
| 11 |
+----------+
1 row in set (0.00 sec)
Die Tabelle icinga_services enthält je nach Distribution bzw. mitkommender Beispielkonfiguration eine unterschiedliche Anzahl an Zeilen.
Neben diesen Tabellen gibt es noch eine Vielzahl weiterer Tabellen mit Informationen oder Relationen zwischen diesen. Das komplette Datenbankschema ist der Dokumentation11 zu entnehmen.
PostgresSQLbenötigt das Feature ido-pgsql. Die Datei für die Konfiguration, auf welche Datenbank mit welchem Benutzer und Passwort zugegriffen wird, befindet sich wie für Features üblich im Verzeichnis features-available im Icinga-Konfigurationsverzeichnis und heißt ido-pgsql.conf.
Codebeispiel 2.4:/etc/icinga2/features-available/ido-pgsql.conf
Nach gemachten Anpassungen ist das Feature einzuschalten. Auf Red-Hat ist dies schon durch die Paketinstallation erfolgt. Bei Debian besteht derselbe Bug wie für MySQL und das Feature muss noch per Hand aktiviert werden. Danach ist Icinga 2 neu zu starten.
$ icinga2 feature enable ido-pgsql
Enabling feature ido-pgsql. Make sure to restart Icinga 2 for...
$ systemctl reload icinga2.service
Ab diesem Zeitpunkt schreibt Icinga 2 in die PostgreSQL-Datenbank, sofern alles richtig konfiguriert ist. Überprüfen lässt sich dies durch einen Blick in die Datenbank. In der mitgelieferten Beispielkonfiguration wird zunächst nur der eigene Host überwacht. Die Anzahl der dortigen Services, in der Tabelle icinga_services, variiert je nach Distribution, muss aber größer als null sein. Das vollständige Datenbankschema ist der schon bei MySQL erwähnten Online-Dokumentation zu entnehmen.
$ cd ˜postgres
$ sudo -u postgres psql -U icinga2 -d icinga2 -c \
’select count(*) from icinga_services’
Password for user icinga2: XXX
count
-------
12
(1 row)
Mit Icinga Web 2 hat der Benutzer die Möglichkeit, verschiedene Aktionen auszuführen, die Icinga 2 übergeben werden müssen. Dies betrifft das Setzen von Downtimes ebenso wie Acknowledgments, Comments oder auch das Senden von sofortig auszuführenden Checks. Icinga Web 2 kennt zwei Wege, dieses Icinga mitzuteilen.
Die bisherige Methode, die Informationen über einen Unix-Socket zu senden, ist mit der in Icinga Web 2 Version 2.4 veraltet. Icinga Web 2 sendet dann alle Kommandos an den API-Port von Icinga 2, standardmäßig ist dies der TCP-Port 5665. Um jedoch die API nutzen zu können, ist sie zu aktivieren und ein Zertifikat ist erforderlich.
$ icinga2 api setup
information/cli: Generating new CA.
...
Enabling feature api. Make sure to restart Icinga 2 for...
Done.
Now restart your Icinga 2 daemon to finish the installation!
Abbildung 2-4: Icinga 2 API Anbindung
Was außerdem getan werden muss, ist das Anlegen eines API-Accounts per Hand. Das oben stehende Kommando schreibt das Objekt root mit einem zufällig erzeugten Passwort nach book.d/api-users.conf ins Konfigurationsverzeichnis von Icinga 2. Dieser Benutzer unterliegt keinen Einschränkungen in Bezug auf Berechtigungen für den Zugang. Icinga Web 2 benötigt jedoch keinen Vollzugriff und deshalb sollte unbedingt ein eigener Benutzer icingaweb2 mit Einschränkungen angelegt werden.
Codebeispiel 2.5:/etc/icinga2/book.d/api-users.conf
Die Berechtigungen werden später im Kapitel 21 ab Seite 537 eingehend erklärt. Abschließend muss auf jeden Fall die Konfiguration neu eingelesen werden.
$ systemctl reload icinga2
Bei Icinga Web 2 handelt es sich um ein in PHP implementiertes Framework, in dem Monitoring ein Modul ist. Weitere mitgelieferte Module sind die Icinga Dokumentation und Translation, das den Übersetzern der Oberfläche bei der Arbeit hilft. Es handelt sich also bisher ausschließlich um Module aus dem Bereich Monitoring oder für die Arbeit mit Icinga Web 2 selbst. Mehr Module können bei Bedarf dazuinstalliert werden, wie später gezeigt wird. Die hier beschriebene Installation und Konfiguration beziehen sich auf die 2.5er Version von Icinga Web 2.
Abbildung 2-5: Icinga Web 2, Auswahl der installierbaren Module
Ab dieser Version setzen Pakete von Icinga Web 2 ein PHP in der Version 5.6 oder neuer voraus. Als zusätzliche Abhängigkeiten von Icinga Web 2 werden etliche PHP-Pakete installiert. Für PHP fordert Icinga Web 2 eine gesetzte Zeitzone, die in der php.ini unter der Sektion Date einzutragen ist.
Codebeispiel 2.6: Zeitzonen-Einstellung in PHP
RedHatUm auch andere Webserver als nur den Apache unterstützen zu können, hat das Icinga-Team entschieden, die Pakete für RedHat-basierte Plattformen auf die ausschließliche Unterstützung des PHP FastCGI Process Manager (FPM) auszurichten. Damit ist nun auch die einfache Benutzung z. B. eines Nginx als Webserver möglich. Entfallen ist damit jedoch die abhängige Installation vom Apache und der favorisierte Webserver muss selbst installiert werden.
Als Voraussetzung für die Installation von Icinga Web 2 muss neben dem EPEL-Repository auch noch zusätzlich das SCL-Repository (Software Collection for Linux) eingebunden werden, wo PHP in der aktuellen Version 7 und viele benötigte PHP-Pakete zu dieser Version zum Download angeboten werden.
Für ein aktuelles CentOS 7 befindet sich ein Paket im CentOS Extra Repository:
$ yum install -y centos-release-scl
Bei RHEL 7 wird das SCL-Repository ebenfalls als Paket über den Subscribtion-Manager aktiviert:
$ subscription-manager repos --enable rhel-7-server-optional-rpms
$ subscription-manager repos --enable rhel-server-rhscl-7-rpms
Für RHEL/CentOS 6 steht zurzeit nur PHP 7.0 zur Verfügung, detailliert wird hierfür das Vorgehen in der Online-Dokumentation12 zur Installation beschrieben.
Neben dem Paket icingaweb2 wird zur Konfiguration noch das Paket icingacli benötigt. Als Beispiel wird hier ein Apache-Webserver verwendet. Das FPM wird als Dienst unabhängig vom Webserver angeboten und muss ebenfalls wie dieser beim Systemstart gestartet werden.
$ yum install -y httpd icingaweb2 icingacli
$ systemctl enable httpd.service
$ systemctl enable rh-php71-php-fpm.service
Je nachdem, welches DBMS zur Anwendung kommt, ist entweder rh-php71-php-mysqlnd für MySQL-DBs oder rh-php71-php-pgsql bei PostgreSQL zusätzlich zu installieren. Die PHP-Konfiguration wird aus /etc/opt/rh/rh-php71/php.ini gelesen und muss mit der gewünschten Zeitzone wie in Beispiel 2.6 angepasst werden.
Debianbezieht alle erforderlichen Pakete aus seinem Standard-Repository wie auch aus dem vom Icinga-Projekt. Im Gegensatz zu RedHat basieren die Pakete bei Debian nach wie vor auf einer Abhängigkeit zum PHP-Modul des Apache-Webservers.
$ apt-get install -y icingaweb2 icingacli
Die Datei php.ini befindet sich für den Apache bei »jessie« (Debian 8) im Verzeichnis /etc/php5/apache2. Im aktuellen Release »stretch« (Debian 9) kommt PHP in der Version 7.0 zum Einsatz und liegt unterhalb von /etc/php/7.0/apache2.
Bevor mit der Konfiguration fortgefahren werden kann, muss der Webserver gestartet bzw. neu gestartet werden.
Das ist immer erforderlich, wenn an der PHP-Konfiguration Änderungen erfolgt sind. Beim Einsatz von FPM auf RedHat muss bei Anpassungen an PHP entsprechend der Dienst hierzu neu gestartet werden. Nicht nur Anpassungen an der php.ini betrifft das, sondern auch wenn neue PHP-Module installiert wurden, die nun verwendet werden sollen.
Bei direkten Konfigurationsarbeiten am Webserver gilt die Erfordernis, diesen einem Neustart zu unterziehen, natürlich auch.
Abbildung 2-6: Anmeldemaske von Icinga Web 2 direkt nach der Installation
Wird nun der Webserver, auf dem Icinga Web 2 läuft, mit /icingaweb2 als URI aufgerufen, erhält man den Anmeldebildschirm aus Abbildung 2-6 mit dem Hinweis, die noch nötige Konfiguration wie in der Dokumentation beschrieben oder mit dem Assistenten durchzuführen. Hier folgt die Beschreibung, wie bei der Benutzung des Assistenten zu verfahren ist.
Da dieses Setup in der Regel ohne Authentifizierung für jeden erreichbar ist, muss als Erstes festgestellt werden, dass der Benutzer der Session autorisiert ist, eine Konfiguration vorzunehmen. Dies geschieht anhand eines einzugebenden Tokens.
Das erforderliche Token muss mit icingacli auf der Konsole des Webservers erzeugt werden:
$ icingacli setup token create;
The newly generated setup token is: 9a1df41ea92bcf9b
Abbildung 2-7: Icinga Web 2, Setup Authentifizierung mit Token
Weiter geht es mit der Auswahl der zu aktivierenden Module aus Abbildung 2-5 auf Seite 24. Nachdem zumindest Monitoring ausgewählt wurde, gelangt man zur Seite, auf der die Voraussetzungen für die Konfiguration geprüft werden, zu sehen in Abbildung 2-8 auf Seite 28.
Unbedingt erforderliche Voraussetzungen werden Rot angezeigt, optionale in Gelb und schon erfüllte in Grün. In Abbildung 2-8 fehlt entweder die zu setzende Zeitzone in der php.ini oder der nach deren Änderung notwendige Neustart des Webservers bzw. des PHP-FPM-Services wurde nicht ausgeführt.
Das fehlende PHP-Modul für die Kommunikation via Lightweight Directory Access Protocol (LDAP) ist hingegen nur optional und muss nur installiert werden, wenn in irgendeiner Form das LDAP-Protokoll verwendet werden soll, z. B. zur Authentifizierung gegen ein Microsoft Active Directory (AD).
Etwas anders verhält es sich mit den PHP-Modulen für MySQL und PostgreSQL, hier ist zur Konfiguration des Monitoring-Moduls von Icinga Web 2 eines von beiden erforderlich. Es wird hier jedoch nicht in Rot angezeigt, sondern bei Abwesenheit immer nur in Gelb. Das folgt daraus, dass die Konfiguration zweigeteilt verläuft. Zuerst wird das Framework Icinga Web 2 konfiguriert und im Anschluss das Modul Monitoring, bei dem die Datenbankanbindung erst endgültig relevant wird.
Abbildung 2-8: Icinga Web 2, Test auf erfüllte Voraussetzungen
Wird auf der darauffolgenden Seite jedoch »Datenbank« als Authentifizierungsquelle gewählt, ist auch schon für das Framework das entsprechende PHP-Modul Voraussetzung. Die externe Quelle bezeichnet z. B. die Authentifizierung über ein Apache-Auth-Modul.
Abbildung 2-9: Icinga Web 2, Konfiguration der Authentifizierung
Hat man sich für Datenbank entschieden, werden als Nächstes deren Zugangsdaten erfragt. Als Erstes ist ein Ressourcenname erforderlich, standardmäßig schlägt der Assistent icingaweb_db vor. Diese Bezeichnung ist lediglich zur internen Verwendung und dient später zur Identifizierung dieser Quelle und der dort enthaltenen Authentifizierungsdaten.
Welcher Datenbanktyp ausgewählt werden kann, richtet sich nach den schon oben erwähnten PHP-Modulen, die installiert sein müssen. Darauf folgen dann die üblichen Daten wie Host und Port, um eine Datenbank zu erreichen. Die Angabe eines Ports ist optional, wird keiner eingetragen, findet der jeweilige Standardport Verwendung.
Abbildung 2-10: Icinga Web 2, Authentifizierung mit Datenbank-Backend
Fehlen noch Datenbank-, Benutzername und Passwort, zusätzlich kann auch der Aufbau einer persistenten Verbindung zur Datenbank bestimmt werden. Dabei wird die Verbindung nach erfolgten Anfragen an die Webseite nicht wieder abgebaut, sondern bleibt für die nächsten Anfragen bestehen.
Wird kein Zeichensatz angegeben, wird der jeweilige Default-Wert des DBMS benutzt. Zu beachten ist, dass dies im Nachhinein nicht mehr ohne Weiteres geändert werden kann.
Da die gerade angegebene Datenbank noch nicht existiert, wird der Assistent versuchen, diese anzulegen. Hierbei unterscheidet sich das Verhalten des Assistenten nicht nur nach gewähltem Datenbanktyp und eingesetzter Linux-Distribution, sondern auch je nach Release.
MySQLerlaubt es, dass man sich als administrativer Benutzer root anmelden darf und damit die Berechtigung erhält, eine Datenbank zu erstellen. Ausnahme ist allerdings Debian 9 alias »stretch«. Hierfür muss die Datenbank per Hand angelegt werden. Gleiches gilt für den Fall, dass die Datenbank auf einem entfernten Server liegen soll.
MariaDB [(none)]> CREATE DATABASE icingaweb2;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> GRANT ALL ON icingaweb2.* \
TO ’icingaweb2’@’localhost’ IDENTIFIED BY ’XXX’;
Query OK, 0 rows affected (0.00 sec)
Ist die Datenbank bereits angelegt, wird die folgende Maske, die den Benutzernamen und das zugehörige Passwort für einen Admin-Account abfragt, übersprungen und damit nicht angezeigt. Wie bereits oben erwähnt, kann hier für RedHat und Debian »jessie« ein solcher Account erfolgreich benutzt werden.
Gerät man unter Debian 9 dennoch in diese Maske, gibt es zwei Möglichkeiten, nachdem dann die Datenbank angelegt wurde. Die einfache ist, über Back in den vorherigen Bildschirm zurückzuwechseln und von dort nochmals Next auszuwählen.
Alternativ kann auch ein beliebiger Username eingetragen werden. Nach fehlgeschlagenem Versuch, die Datenbank anzulegen, erscheint eine Checkbox Skip Validation, die aktiviert werden muss. Danach verifiziert der Assistent den angegebenen Benutzer nicht mehr und das DB-Schema für Icinga Web 2 wird als Benutzer icingaweb2 eingespielt.
Abbildung 2-11: Icinga Web 2, Konfiguration des administrativen Zugangs zum DBMS
Bei RedHat oder Debian 8 hingegen ist der lokale Zugriff als root erlaubt. Womöglich sogar ohne Passwort, wie es bei beiden der Standardinstallation entspricht.
PostgeSQLerlaubt generell keinen Admin-Zugriff, der nicht als Systembenutzer postgres ausgeführt wird. Hier müssen die Datenbank und der Account selbst von der Konsole aus angelegt werden. Soll der Zugriff nicht vom lokalen Server selbst erfolgen, muss darüberhinaus auch die Datei pg_hba.conf angepasst werden.
$ cd~postgres
$ sudo -u postgres psql -c \
"CREATE ROLE icingaweb2 WITH LOGIN PASSWORD ’XXX’"
$ sudo -u postgres createdb -O icingaweb2 -E UTF8 icingaweb2
Abbildung 2-12: Backendnamen für die Authentifizierung festlegen
Als Nächstes wird der zu vergebende Name des Backends abgefragt. Dieser wird wie schon der Name der Ressource intern verwendet. Es handelt sich hierbei um das Backend zur Authentifizierung des Benutzers und der Gruppenzugehörigkeit. Icinga Web 2 unterstützt mehrere Backends gleichzeitig, über diese Namen wird auf die unterschiedlichen Backends zugegriffen.
Abbildung 2-13: Icinga Web 2, Administrator Account anlegen
Bevor die abschließende Konfiguration vom Framework erfolgt, muss noch der Administrator-Zugang zum Icinga Web 2 erstellt werden. Dann sind Einstellungen bezüglich des Loggings zu treffen.
Logging erfolgt via Syslog, bei dem dann zusätzlich die Facility, das Prefix und das zu protokollierende Loglevel angegeben werden müssen. Alternativ kann in eine dedizierte Datei geschrieben werden. Interessant ist noch, wie Benutzerdaten gespeichert werden, die über die Authentifizierung via Namen und Passwort hinausgehen. Damit sind Eigenschaften wie z. B. Spracheinstellungen oder das Thema der Anzeigeoptik gemeint. Da in diesem Beispiel schon eine Datenbank für die Authentifizierungsdaten verwendet wird, bietet es sich an, auch hier Database auszuwählen, zumal in diesem Fall dieselbe DB benutzt wird.
Abbildung 2-14: Icinga Web 2, Logging und Anwenderdaten
Damit ist die Konfiguration des Frameworks abgeschlossen und auf der folgenden Seite sind nochmals alle gemachten Angaben aufgelistet. Nun startet mit der kommenden Seite die Konfiguration des Monitoring-Moduls. Zuerst bestimmt man den Namen des Backends, als Typ wird zurzeit nur IDO unterstützt.
Abbildung 2-15: Icinga Web 2, Auswahl des Backends
Als Zweites werden dann die Zugangsdaten zur IDO eingetragen, aus der Icinga Web 2 alle Informationen zum aktuellen Status der einzelnen Host- und Service-Checks bezieht sowie auch alle zusätzlichen historischen Daten wie z. B., wann Statuswechsel erfolgten. In Abbildung 2-16 wird als Beispiel eine MySQL-Datenbank auf dem lokalen Host als anzusprechen konfiguriert.
Abbildung 2-16: Icinga Web 2, Auswahl des Backends
Mit Anwahl des Buttons Validate Configuration können die vorgenommenen Angaben auf Korrektheit geprüft werden und somit, ob die Datenbank erreichbar ist.