Simpler CMDB-Import mit Icinga Director
In diesem Artikel wird dem Icinga Director beigebracht, Daten automatisiert aus der Datenbank eines Konfigurationsverwaltungssystems zu übernehmen.
Mein letzter Artikel widmete sich Icinga 2 und der neuen Konfigurationsoberfläche Icinga Director. Ich habe beiläufig erwähnt, dass sich der Director auch an bestehende Configuration Management Database-Systeme (CMDB) anbinden lässt, um den Datenimport zu erleichtern. In diesem Artikel werden wir beispielhaft eine kleine MySQL-Datenbank als »Dummy-CMDB« definieren und automatisiert Host-Informationen einlesen und umsetzen.
Mithilfe des Directors können wir folgende Informationen automatisiert einlesen und umsetzen:
- Hosts und Hostgruppen
- Services und Servicegruppen
- Benutzer und Benutzergruppen
- Endpunkte und Zonen
- Kommandos
Datenbank-Vorbereitung
Als Beispiel dient eine simple Tabelle mit Host-Informationen. Essentiell sind hier für Icinga der Hostname sowie eine dazugehörige IP-Adresse - ohne diese Informationen lässt sich ein System nicht überwachen. Aus bestehenden CMDB-Systemen lassen sich diese Informationen in aller Regel ebenso gewinnen - nur ist vermutlich mit bedeutend komplexeren Datenbank-Abfragen zu rechnen (z.B. Abfragen über mehrere Tabellen, etc.). Benötigt wird in jedem Fall ein entsprechender Zugang zur Datenbank - lesender Zugriff reicht hier vollkommen aus. Dieser Punkt ist je nach CMDB-Produkt nicht ganz trivial - macht euch also auf stundenlanges Konsultieren der Datenbank-Dokumentation (sofern vorhanden) und Testen unter Koffein-Einfluss gefasst.
Als Beispiel wurde hier eine Tabelle mit folgenden Einträgen erstellt:
hosts | |||
host_id | host_name | host_ip | host_desc |
1 | dummyhost | 127.0.0.1 | |
2 | dummyhost2 | 127.0.0.2 | Test host |
3 | dummyhost3 | 127.0.0.3 | Test host 2 |
Die einzelnen Spalten sind selbsterklärend: neben einer fortlaufenden Nummer werden Hostnamen, IP-Adressen und eine optionale Beschreibungen definiert. In MySQL lässt sich eine solche Tabelle samt Datenbank und Benutzer wie folgt definieren:
mysql> CREATE DATABASE cmdb CHARACTER SET 'utf8'; mysql> GRANT ALL ON cmdb.* TO 'cmdb'@'localhost' IDENTIFIED BY '...'; mysql> FLUSH PRIVILEGES; $ mysql -u cmdb cmdb -p mysql> CREATE TABLE hosts( host_id INTEGER PRIMARY KEY AUTO_INCREMENT, host_name TEXT NOT NULL, host_ip TEXT NOT NULL, host_desc TEXT NULL ); mysql> INSERT INTO hosts (host_name, host_ip) VALUES ("dummyhost", "127.0.0.1"); mysql> INSERT INTO hosts (host_name, host_ip, host_desc) VALUES ("dummyhost2", "127.0.0.2", "Test host"); mysql> INSERT INTO hosts (host_name, host_ip, host_desc) VALUES ("dummyhost2", "127.0.0.2", "Test host 2");
Die Abfrage der relevanten Informationen wird über das folgende SQL-Statement erreicht:
SELECT host_name, host_ip, host_desc from hosts;
Ziel ist es nun, Icinga Director dazu zu bringen, diese Informationen auszulesen und in valide Host-Objekte zu verwandeln - und das natürlich vollautomatisiert.