1. Einleitung
Neben dem klassischen Monitoring — also dem Überwachen von Status-, Log- und Messdaten — bringt Checkmk noch eine ganz andere Funktion quasi kostenlos mit: die Hardware-/Software-Inventur (oder kurz HW/SW-Inventur). Diese kann auf Ihren Hosts z.B. folgende Informationen automatisch ermitteln:
Welche Softwarepakete sind in welchen Versionen auf einem Server installiert?
Welchen Ausbau an RAM-Bausteinen hat ein Server?
Welche BIOS-Version ist auf dem Mainboard installiert?
Welche Seriennummern haben die verbauten Festplatten?
Welche Ports auf einem Switch sind länger nicht genutzt worden (also wahrscheinlich frei)?
… und vieles mehr
Die so ermittelten Daten werden pro Host in einem strukturierten Baum und in verschiedenen anderen Ansichten dargestellt und sind auch über eine API verfügbar. Hier ein Beispiel mit Daten zum Prozessor:
hardware.cpu
Mit der HW/SW-Inventur können Sie zum Beispiel:
Daten über installierte Software für ein Lizenz-Management-System bereitstellen,
Typenbezeichnungen für Ersatzteilbestellungen (RAM, Festplatten, Lüfter) ermitteln,
generelle Daten über Hardware- und Softwareausstattung für den regelmäßigen Import in CMDBs liefern,
Änderungen an Hardware oder Software zurückverfolgen, z.B. um festzustellen, wann ein bestimmtes BIOS-Update durchgeführt wurde,
informiert werden, wenn sich etwas an der Hardware oder Software geändert hat,
gezielt Server finden, die ein bestimmtes Service Pack noch nicht installiert haben.
Der wichtigste Vorteil gegenüber vergleichbaren anderen Systemen liegt auf der Hand: Sie können dafür einfach die vorhandene Infrastruktur von Checkmk verwenden und sparen sich das Einrichten und Administrieren einer weiteren Software-Umgebung. Sie rollen lediglich ein einziges zusätzliches Agentenplugin aus. Bei SNMP-Geräten ist nicht einmal das notwendig, da der Inventurscanner auch SNMP unterstützt und sich die Daten einfach auf diesem Weg holt.
Außerdem braucht sich Checkmk hinter anderen Inventurscannern nicht zu verstecken. Wie auch bei unseren Check-Plugins arbeiten wir ständig an einer Erweiterung der gescannten Daten. Jede Checkmk-Version bringt neue Plugins für den Inventurscanner mit, und die eingesammelten Informationen werden immer detaillierter und umfangreicher.
2. Einrichtung
Das Einrichten der HW/SW-Inventur geht in zwei Schritten. Voraussetzung ist, dass auf den Hosts bereits der Checkmk-Agent installiert ist (falls diese nicht per SNMP überwacht werden):
Die Inventur für die gewünschten Hosts einschalten.
Das Inventory-Agentenplugin auf diesen Hosts ausrollen.
2.1. Die Inventur für die gewünschten Hosts einschalten
Regel erstellen
Wie immer, wenn Sie etwas für bestimmte Hosts konfigurieren wollen, geht das auch hier mithilfe einer Regel.
Den Regelsatz finden Sie unter Setup > Hosts > HW/SW inventory rules > Do hardware/software inventory oder noch einfacher mit der Suche nach inventory
.
Verwechseln Sie diesen nicht mit dem Regelsatz Hardware/Software-Inventory (Linux, Windows, Solaris, AIX).
Dieser wird für das Agentenplugin verwendet, wie Sie später sehen werden.
Im Regelsatz Do hardware/software inventory sind bereits einige Regeln standardmäßig aktiv, die sich auf Host-Labels beziehen. Wenn die von Ihnen gewünschten Hosts ein solches Label haben, ist der Service für die HW/SW-Inventur bereits eingerichtet. Wenn nicht, müssen Sie eine neue Regel erstellen.
Legen Sie also hier mit Add rule eine neue Regel für die Hosts an, für die Sie die Inventur aktivieren möchten. Dort finden Sie etliche Einstellungen:
Fürs Erste übernehmen Sie die Voreinstellungen. Die anderen Möglichkeiten erklären wir im Verlauf dieses Artikels.
Die Regel, die Sie gerade angelegt haben, erzeugt bei der nächsten Aktivierung der Änderungen einen aktiven Check pro Host, der alle Inventurdaten zu diesem einsammelt, darunter Daten von einem normalen Checkmk-Agenten, aber auch solche, die über SNMP-Abfragen hereinkommen. Den neuen Service Check_MK HW/SW Inventory finden Sie in der Serviceliste bei den Hosts, und er sieht etwa so aus:
Lassen Sie sich nicht verunsichern, weil der Check nur wenige Einträge gefunden hat. Das liegt daran, dass Sie das Plugin noch nicht ausgerollt haben.
Intervall festlegen
Inventurdaten ändern sich nur selten. Und das Erkennen einer Änderung ist in der Regel auch nicht zeitkritisch. Deswegen ist es sehr sinnvoll, das Intervall, in dem der Inventurcheck ausgeführt wird, anzupassen und nicht einfach den Standard (1 Minute) zu verwenden — vor allem, weil das Verarbeiten der Inventurdaten in dem aktiven Check deutlich mehr Rechenzeit benötigt als für einen normalen Service.
Checkmk-Instanzen haben dazu automatisch eine Regel im Regelsatz Setup > Service monitoring rules > Service Checks > Normal check interval for service checks, die für alle Services mit dem Namen Check_MK HW/SW Inventory das Intervall auf einen Tag festlegt:
Falls Ihnen einmal am Tag zu selten ist, können Sie diese Regel natürlich auch anpassen — z.B. auf Prüfintervalle von vier oder acht Stunden. Und natürlich besteht immer die Möglichkeit, dass Sie das mithilfe mehrerer Regeln für unterschiedliche Hosts anders einstellen.
2.2. Das Inventory-Agentenplugin auf diesen Hosts ausrollen
Der wichtigste Schritt ist das Installieren des Agentenplugins für die Inventur auf den entsprechenden Hosts. Das können Sie entweder manuell oder mit der Agentenbäckerei (nur kommerzielle Editionen) machen.
Installation von Hand
Für eine manuelle Installation benötigen Sie zunächst das Plugin. Das finden Sie in den kommerziellen Editionen unter Setup > Agents > Windows, Linux, Solaris, AIX > Related und in Checkmk Raw unter Setup > Agents. In allen Editionen finden Sie dort Menüeinträge für die unterschiedlichen Betriebssysteme. Verwenden Sie je nach Betriebssystem folgendes Plugin im Kasten Plugins:
Betriebssystem | Plugin |
---|---|
Windows |
|
Linux |
|
AIX |
|
Solaris |
|
Sie finden diese Dateien auch auf der Kommandozeile in der Checkmk-Instanz im Unterverzeichnis
share/check_mk/agents/plugins
(Linux/Unix) bzw. share/check_mk/agents/windows/plugins
(Windows).
Kopieren Sie das Plugin auf die Ziel-Hosts in das korrekte Verzeichnis für Plugins.
Beim Windows-Agenten ist das C:\ProgramData\checkmk\agent\plugins
.
Einzelheiten finden Sie im Artikel zum Windows-Agenten.
Bei Linux und Unix lautet das Verzeichnis /usr/lib/check_mk_agent/plugins
.
Achten Sie darauf, dass die Datei ausführbar ist (chmod +x
).
Einzelheiten erfahren Sie im Artikel zum Linux-Agenten.
Wichtig ist nun Folgendes: Der Agent wird ja von Checkmk in der Regel einmal pro Minute abgerufen. Das Inventory-Agentenplugin benötigt aber mehr Rechenzeit als normale Plugins, weil es z.B. in vielen Verzeichnissen nach installierter Software suchen muss. Es erzeugt darüber hinaus deutlich größere Datenmengen. Deswegen ist es so entwickelt, dass es nur alle vier Stunden (14400 Sekunden) neue Daten erzeugt und ausliefert.
Falls Sie also für Ihren Inventurcheck aus irgendeinem Grund ein kürzeres Intervall als vier Stunden eingestellt haben, werden Sie trotzdem nur alle vier Stunden wirklich neue Daten bekommen. Falls Sie wirklich häufiger Daten ermitteln möchten, müssen Sie das voreingestellte Berechnungsintervall anpassen.
Bei Windows ersetzen Sie die Zahl direkt in der Plugin-Datei.
Suchen Sie nach 14400
und ersetzen Sie diese durch eine andere Anzahl von Sekunden.
Die Stelle in der Datei sieht so aus (Ausschnitt):
Dim delay
Dim exePaths
Dim regPaths
'These three lines are set in the agent bakery
delay = 14400
exePaths = Array("")
regPaths = Array("Software\Microsoft\Windows\CurrentVersion\Uninstall","Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall")
Bei Linux und Unix geht das etwas anders.
Dort legen Sie zu diesem Zweck eine Konfigurationsdatei /etc/check_mk/mk_inventory.cfg
an mit folgender Zeile (hier im Beispiel mit 7200 Sekunden):
INVENTORY_INTERVAL=7200
Noch ein Hinweis: Das Inventory-Agentenplugin kümmert sich selbst darum, dass es nur alle vier Stunden ausgeführt wird. Verwenden Sie daher nicht den Mechanismus vom Agenten für eine asynchrone Ausführung von Plugins mit größeren Intervallen. Installieren Sie das Plugin auf die normale Art zur direkten Ausführung.
Konfiguration über die Agentenbäckerei
Falls Sie in den kommerziellen Editionen für die Konfiguration Ihrer Agenten die Agentenbäckerei verwenden, ist die Sache natürlich viel komfortabler. Hier gibt es unabhängig vom Betriebssystem nur einen einzigen Regelsatz mit dem Namen Hardware/Software-Inventory (Linux, Windows, Solaris, AIX). Dieser steuert das Ausrollen des nötigen Plugins sowie dessen Konfiguration. Sie finden ihn unter Setup > Agents > Windows, Linux, Solaris, AIX > Agents > Agent rules:
Hier können Sie neben dem Intervall auch noch für Windows Pfade angeben, in denen nach ausführbaren .EXE
-Dateien gesucht werden soll, wenn
es darum geht, die auf dem System installierte Software zu finden.
Auch die Pfade in der Windows-Registry, die als Indikator für installierte Software berücksichtigt werden sollen, können Sie hier konfigurieren.
2.3. Test
Wenn Sie das Plugin korrekt ausgerollt haben, dann finden Sie bei der nächsten Ausführung des Inventurchecks eines Hosts deutlich mehr Datensätze. Das sieht dann z.B. so aus:
3. Mit den Inventurdaten arbeiten
Inventurdaten gibt es natürlich insbesondere für jeden einzelnen Host, teils als Baum-, teils als Tabellendarstellung. Wie genau diese funktionieren und wie Sie darauf zugreifen können, sehen Sie unten. Es gibt aber freilich auch Ansichten, insbesondere Suchen, die Ihre gesamte Host-Landschaft betreffen. Diese erreichen Sie über den Eintrag Inventory im Monitor-Menü:
3.1. Darstellung als Baum
Im Monitoring werden die Inventurdaten der Hosts einmal in einem Baum pro Host und noch einmal in Tabellen dargestellt. Den Baum erreichen Sie beispielsweise in einer Host-Ansicht über den Menüeintrag Host > Inventory > Inventory of host.
Alternativ können Sie in Ansichten, die Hosts auflisten, das Menü eines Hosts aufrufen und darüber wiederum das Inventar:
In beiden Fällen landen Sie bei der Baumdarstellung der Inventurdaten des Hosts. Ausgehend von den drei Basiskategorien Hardware, Networking und Software können Sie Unteräste auf- und zuklappen:
Hinter den einzelnen Einträgen sehen Sie oben im Bild in Klammern die internen Inventurpfade, die Sie sich über Display > Modify display options und die Option Show internal tree paths einblenden lassen können:
Im Inventar sehen Sie dann die internen Bezeichnungen.
So heißt der interne Pfad für den Bereich Processor
beispielsweise hardware.cpu
.
Die Bezeichnungen für CPU-Modell und -Architektur, model
und arch
, finden Sie darunter in den CPU-Daten.
Sie können diese internen Bezeichnungen nutzen, um nur einzelne Pfade für Kontaktgruppen freizuschalten.
Benutzer einer Kontaktgruppe, denen nur die oben gezeigten Einträge hardware.cpu
, model und arch zugewiesen sind, sehen dann nur noch ein abgespecktes Inventar:
3.2. Darstellung als Tabelle
Viele der Inventurdaten sind Einzelwerte unter ganz konkreten Pfaden im Baum, z.B. der Eintrag Hardware > System > Manufacturer > Apple Inc.. Es gibt aber auch Stellen im Baum mit Tabellen gleichartiger Objekte. Eine sehr wichtige ist z.B. die Tabelle Software > Packages:
Das Besondere an diesem Teil der Inventurdaten: Sie können die Pakete über Host > Inventory > Software packages in einer separaten Ansicht aufrufen. Dort finden Sie dann Filter speziell für die Suche in Paketen (im Bild stark gekürzt):
Sie können auch in Softwarepaketen auf mehreren Hosts suchen. Die entsprechende Ansicht finden Sie im Monitor-Menü unter Monitor > Inventory > Search Software packages oder im Snapin Views der Seitenleiste im Bereich Inventory. Dort sind auch alle weiteren Tabellenansichten für die Inventur aufgeführt, darunter weitere Suchen, etwa für bestimmte Oracle-Daten.
Beachten Sie, dass in der Voreinstellung viele allgemeine Filter zu den Hosts nicht in diesen Ansichten verfügbar sind. Sie können die Voreinstellungen aber bearbeiten und weitere Filter hinzufügen.
Weitere Dinge, die Sie mit diesen Ansichten machen können:
In Berichte einbinden
Als PDF- oder CSV-Datei exportieren
In Dashboards integrieren
Übrigens können Sie auch solche Inventurdaten in Ansichten aufnehmen, die nicht tabellarisch sind. Dazu gibt es für jeden bekannten Pfad im Inventurbaum einen Spaltentyp, den Sie in Ansichten von Hosts hinzufügen können. Ein Beispiel dafür ist die vordefinierte Beispielansicht CPU inventory of all hosts. Das ist eine Tabelle der Hosts, die jeweils zusätzliche Daten aus der Inventur anzeigt. Hier ist beispielhaft eine der Spaltendefinitionen, die eine Spalte mit der Anzahl der physikalischen CPUs des Hosts hinzufügt:
4. Historischer Verlauf der Inventurdaten
Sobald Sie die HW/SW-Inventur für einen Host eingerichtet haben, wird Checkmk jede Änderung in den Inventurdaten erfassen und die Historie aufzeichnen. Sie finden diese in Ansichten mit Inventurdaten über Host > Inventory > Inventory history of host.
Hier ist ein Ausschnitt aus der Historie mit einer Reihe von IP-Daten, die sich seit dem letzten Durchlauf geändert haben:
Wenn Sie möchten, können Sie sich informieren lassen, wann immer eine Änderung in der Software oder Hardware auftritt. Das geschieht über den Status des Services Check_MK HW/SW Inventory. Dazu bearbeiten Sie die Regel, die Sie ganz am Anfang dieses Artikels angelegt haben (im Regelsatz Do hardware/software inventory). Dort finden Sie im Wert der Regel etliche Einstellungen, welche die Historie betreffen. Folgendes Beispiel setzt den Service auf WARN, wenn sich Änderungen in Software oder Hardware ergeben:
Sobald der Inventurcheck das nächste Mal Änderungen feststellt, wird er auf WARN gehen. Das sieht dann z.B. so aus:
Bei der nächsten Ausführung des Checks geht dieser wieder automatisch auf OK, wenn sich nichts geändert hat. Das heißt, dass Sie den Check von Hand ausführen können, um den Service wieder auf OK zu setzen, wenn Sie nicht bis zum nächsten regelmäßigen Lauf warten möchten.
5. Statusdaten
Der Baum der Inventurdaten kann automatisch um aktuelle, passende Statusdaten ergänzt werden. Das ist in einigen Fällen sehr nützlich. Ein Beispiel dafür sind Oracle Tablespaces. In den eigentlichen Inventurdaten sind lediglich relativ statische Dinge wie die SID, der Name und der Typ enthalten. Aktuelle Statusdaten können dies um Angaben zur aktuellen Größe, zu freiem Platz usw. ergänzen.
Wenn Sie Statusdaten in Ihrem Baum sehen möchten (und da spricht eigentlich nichts dagegen), müssen Sie lediglich die entsprechende Option aktivieren in der Regel, die Sie am Anfang unter Do hardware/software inventory angelegt haben:
Änderungen in Statusdaten finden übrigens keinen Niederschlag in der Historie! Dies würde quasi zu ständigen Änderungen führen und die Funktion nutzlos machen. Statusdaten werden auch nicht in Dateien abgelegt, sondern wie die Resultate von Checks direkt im Hauptspeicher vom Monitoring-Kern gehalten.
6. Externer Zugriff auf die Daten
6.1. Zugriff via eigener Web-API
Sie können die HW/SW-Inventurdaten eines Hosts über eine Inventur-eigene Web-API exportieren.
Hinweis: Die hier erwähnte, Inventur-eigene Web-API ist nicht die Web-API, die in der Version 2.2.0 aus Checkmk entfernt wurde.
Die URL dazu lautet
http://myserver/mysite/check_mk/host_inv_api.py?host=myhost
Das Ausgabeformat in diesem Fall ist Python-Quellcode.
Wenn Sie JSON bevorzugen, dann hängen Sie einfach ein &output_format=json
an die URL an:
http://myserver/mysite/check_mk/host_inv_api.py?host=myhost&output_format=json
Das Ergebnis sieht in gekürzter Form etwa so aus:
result:
Attributes: {}
Nodes:
hardware:
Attributes: {}
Nodes:
memory:
Attributes:
Pairs:
total_ram_usable: 16495783936
total_swap: 1027600384
total_vmalloc: 35184372087808
Nodes: {}
Table: {}
Table: {}
... usw. ...
result_code: 0
Analog können Sie die Ausgabe auch in XML anfordern:
http://myserver/mysite/check_mk/host_inv_api.py?host=myhost&output_format=xml
Geben Sie die jeweilige URL in die Adressleiste Ihres Browsers ein, sehen Sie sofort ein Ergebnis, weil Sie bereits bei Checkmk angemeldet sind. Die HW/SW-Inventurdaten finden Sie in der Ausgabedatei im Abschnitt nach dem Schlüssel result. Von einem Skript aus authentifizieren Sie sich am besten als Automationsbenutzer.
Im Fehlerfall, z.B. wenn der angegebene Host nicht gefunden wurde, wird der result code auf 1 gesetzt und eine entsprechende Fehlermeldung ausgegeben:
{"result": "Found no inventory data for this host.", "result_code": 1}
Mehrere Hosts abfragen
Sie können auch die HW/SW-Inventurdaten mehrerer Hosts in einer Ausgabe abfragen. Erweitern Sie dafür die Abfrage auf alle gewünschten Hosts:
http://myserver/mysite/check_mk/host_inv_api.py?request={"hosts":["myhost","myhost2"]}&output_format=json
Das Ergebnis dieser Abfrage sieht dann fast genauso aus wie die obige Ausgabe. Auf der obersten Ebene werden jedoch die Namen der Hosts als Schlüssel verwendet. Die Angaben zu den Hosts folgen dann darunter in den Verzeichnisbäumen:
result:
myhost:
Attributes: {}
Nodes:
hardware:
Attributes: {}
Nodes:
memory:
Attributes:
Pairs:
total_ram_usable: 16495783936
total_swap: 1027600384
total_vmalloc: 35184372087808
Nodes: {}
Table: {}
Table:
networking:
Attributes:
Pairs:
available_ethernet_ports: 1
hostname: "MyServer"
total_ethernet_ports: 3
total_interfaces: 4
... etc. ...
myhost2:
Attributes: {}
Nodes: {}
Table: {}
result_code: 0
Werden zu einem Host keine Inventurdaten gefunden, dann hat der Host einen leeren Inventureintrag anstelle der Fehlermeldung.
Abfrage auf spezifische Daten einschränken
Nun wollen Sie aber vielleicht nicht alle Inventurdaten abfragen, sondern suchen nur gezielt nach einzelnen Informationen. Dann geben Sie sogenannte Inventurpfade an, um die gewünschten Angaben zu definieren. Sie bekommen dann nur von denjenigen Hosts Informationen angezeigt, die diese Pfade / Informationen haben.
Um zum Beispiel für den Host myhost
nur die Angaben zu Gesamtspeicher und Auslagerungsspeicher zu sehen, verwenden Sie diese URL:
http://myserver/mysite/check_mk/host_inv_api.py?host=myhost&request={"paths":[".hardware.memory.total_ram_usable",".hardware.memory.total_swap"]}&output_format=json
Sie bekommen die gewünschten Angaben zurück:
result:
Attributes: {}
Nodes:
hardware:
Attributes: {}
Nodes:
memory:
Attributes:
Pairs:
total_ram_usable: 16495783936
total_swap: 1027600384
Nodes: {}
Table: {}
Table: {}
Table: {}
result_code: 0
6.2. Zugriff via Datei
Alternativ können Sie auch einfach die Dateien auslesen, die Checkmk selbst erzeugt.
Diese liegen im Python-Format im Verzeichnis ~/var/check_mk/inventory
vor.
Für jeden Host gibt es dort eine Datei in unkomprimierter (z.B. myhost
) und eine in komprimierter Variante (z.B. myhost.gz
).
7. Inventur in verteilten Umgebungen
In den kommerziellen Editionen funktioniert die HW/SW-Inventur auch in verteilten Umgebungen.
Hier werden die Inventurdaten zunächst durch die lokalen Instanzen ermittelt und dort unterhalb von ~/var/check_mk/inventory
abgelegt.
Der Livestatus-Proxy-Daemon überträgt turnusmäßig alle aktualisierten Inventurdaten von der Remote-Instanz in die Zentralinstanz und legt sie dort ebenfalls unter ~/var/check_mk/inventory
ab.
Das ist wichtig, da diese Daten zu umfangreich sind, um sie bei einer Abfrage in diesem Augenblick live abzuholen.
Sobald über die Zentralinstanz Abfragen zu Inventurdaten kommen, werden diese Dateien gelesen und dann noch mit aktuellen Statusdaten zusammengeführt, welche per Livestatus von den Remote-Instanzen geholt werden.
Kurz zusammengefasst: Sie müssen sich um nichts kümmern.
In Checkmk Raw gibt es keinen Livestatus-Proxy.
Daher ist auch die HW/SW-Inventur in der GUI der Zentralinstanz unvollständig und zeigt nur die Statusdaten.
Sie können sich behelfen und die Dateien im Verzeichnis ~/var/check_mk/inventory
regelmäßig mit einem Skript o.Ä. an die Zentralinstanz übertragen.
Dabei genügt es, die Dateien ohne die Endung .gz
zu kopieren.
Für eine effiziente Übertragung eignet sich z.B. rsync
.
8. Dateien und Verzeichnisse
8.1. Verzeichnisse auf dem Checkmk-Server
Pfad | Bedeutung |
---|---|
|
Agentenplugins für Linux und Unix |
|
Agentenplugins für Windows |
|
Inventurdaten der einzelnen Hosts als Python-Dateien (komprimiert und unkomprimiert) |
8.2. Verzeichnisse auf den überwachten Hosts
Pfad | Bedeutung |
---|---|
|
Ablageort für das Inventory-Agentenplugin beim Windows-Agenten |
|
Ablageort für das Inventory-Agentenplugin beim Linux-/Unix-Agenten |
|
Konfiguration für das Inventory-Agentenplugin beim Linux-/Unix-Agenten |