Am 29.6.2009 hat sich der Münchner Nagios Stammtisch getroffen, um einen Blick auf zwei AddOns der Firma OP5 zu werfen: Merlin, ein Datenbank-Backend für Nagios und Ninja, ein PHP-basiertes Webinterface. Nicht lange vor diesem Termin fand in Stockholm die „Nordic Nagios Conference“ statt. Dort machte Ethan Galstad während eines Vortrags über Ninja den Vorschlag, das alte CGI-basierte Interface künftig durch Ninja als Default-Interface für Nagios abzulösen. Grund genug, um sich das Tool anzuschauen. Sowohl Merlin als auch Ninja befinden sich in einer frühen Entwicklungsphase, daher dürfte dieses Posting schnell veralten.
Merlin ist der „Unterbau“ für Ninja. Im Gegensatz zur NDO soll es wesentlich besser skalieren. Dafür beinhaltet es aber keine historischen Daten. Merlin ist auch als Backend für Nagvis verwendbar.
Merlin benötigt während der Kompilierung die libdbi-Entwicklungsumgebung. Unter CentOS installiert man diese mit:
# yum install libdbi-devel
Von http://www.op5.org/community/projects/merlin besorgt man sich das Tar-Paket (aktuell merlin-0.5b) und entpackt es. Dann rein ins Verzeichnis merlin und gleich mit make weitermachen. Ein configure gibt's nicht.
# cd merlin # make CC module.o CC hooks.o CC control.o CC hash.o CC logging.o CC config.o ....
Die Kompilierung sollte ohne
Die Installation wird als root-Benutzer durchgeführt. In ihrem Verlauf wird ein Zielverzeichnis (im Beispiel: /usr/local/merlin) sowie eine Datenbank samt DB-User erzeugt. Allerdings wird erwartet, dass root sich ohne Angabe eines Passworts am MySQL-Server anmelden kann. Das ist nicht besonders schön, kann aber für die Dauer dieser Installation schnell eingerichtet werden:
mysql> set password for root@localhost='';
Dann ruft man folgendes Script auf:
# sh install-merlin.sh --dest-dir=/usr/local/merlin \
--nagios-cfg=/usr/local/nagios/etc/nagios.cfg \
--db-type=mysql --db-user=merlin --db-pass=merlin \
--db-name=merlin
Damit wurde folgendes erreicht: * /etc/init.d/merlind wurde angelegt * /usr/local/merlin/ wurde befüllt * Eine Merlin-Datenbank wurde angelegt * nagios.cfg wurde um den Eintrag broker_module=/usr/local/merlin/merlin.so /usr/local/merlin/merlin.conf ergänzt.
Hierzu ist anzumerken, dass alle Dateien in /usr/local/merlin dem root-User gehören und der Merlin-Daemon unter root laufen wird.
Nun muss noch /usr/local/merlin/merlin.conf angepasst werden. Diese Datei wird sowohl vom Merlin-Eventbroker-Modul als auch vom Daemon merlind benutzt. Die ipc_debug_*-Einträge zeigen noch auf irgendwelche OP5-Verzeichnisse. Die ändert man in /usr/local/merlin. (wurde in der aktuellen git-Version bereinigt)
Zuletzt started man mit /etc/init.d/merlind den Merlin-Daemon, der vom Eventbroker-Modul mit Informationen versorgt wird und diese in die Datenbank schreibt. Auch Nagios muss mit einem kill -HUP dazu gebracht werden, die neue nagios.cfg einzulesen und das Modul merlin.so zu laden. Danach tauchen in der Merlin-Datenbank die ersten Objekte auf. Jedesmal, wenn sich die Nagios-Konfiguration ändert, ruft der merlind das externe Script import.php auf. Es truncated alle Tabellen der Merlin-Datenbank, liest die Object-Cache-Datei von Nagios und erzeugt aktuelle Einträge in den Tabellen hosts, services, contacts,…. Leider ist import.php fehlerhaft. Als zweiten Schritt truncated es nämlich die Tabellen erneut und liest dann das Status-Log von Nagios ein. Dieses beinhaltet aber weniger Informationen als der Object-Cache, so dass z.b. keine Contact-Service-Beziehungen in der Datenbank stehen. (Ninja braucht diese aber). Man kann das korrigieren, indem man in import.php folgenden Code sucht:
if ($nagios_cfg && !$status_log) { $config = read_nagios_cfg($nagios_cfg);
und die Bedingung erweitert:
if ($nagios_cfg && !$status_log && !cache) { $config = read_nagios_cfg($nagios_cfg);
Nun hat man eine Merlin-Datenbank, die als Basis für das Ninja-Interface verwendet werden kann.
Ninja benötigt PHP >= 5.2 Unter CentOS gibt's das leider noch nicht offizielle. Man muss daher das Testing-Repository hinzuziehen:
# cat <<'EOEO' > /etc/yum.repos.d/CentOS-Testing.repo [c5-testing] name=CentOS-5 Testing baseurl=http://dev.centos.org/centos/$releasever/testing/$basearch/ enabled=0 gpgcheck=1 gpgkey=http://dev.centos.org/centos/RPM-GPG-KEY-CentOS-testing EOEO # yum --enablerepo=c5-testing update php
Ninja gibt es derzeit noch nicht einmal als tar.gz. Man muss es sich aus dem Git-Repository ziehen.
# cd /usr/local # git clone git://git.op5.org/nagios/ninja.git
Man erzeugt eine Datei /etc/httpd/conf.d/ninja.conf
ScriptAlias /ninja/index.php "/usr/local/ninja/index.php" <Directory "/usr/local/ninja"> #SSLRequireSSL Options ExecCGI AllowOverride None Order allow,deny Allow from all </Directory> Alias /ninja "/usr/local/ninja" <Directory "/usr/local/ninja"> #SSLRequireSSL AllowOverride None Order allow,deny Allow from all </Directory>
und startet den Apache durch. (In der Doku wird erwähnt, dass man eine example.htacesss nach .htaccess kopieren soll, die irgendwelche Rewrites vornimmt. Mit obiger Konfiguration ist das nicht nötig. Danach kann man bereits eine Diagnoseseite anschauen unter http:<server>/ninja/install_old.php Allerdings ist den Angaben zu System-, Application und Module-Verzeichnis nicht zu trauen. Die Verzeichnisse werden fälschlicherweise als fehlend bemängelt. Also…nicht so ernst nehmen. ==== Datenbank-Konfiguration ==== Im Verzeichnis /usr/local/ninja/install_scripts muss man das Script ninja_db_init.sh zunächst editieren. Es gibt da zwei Stellen im Code <code> run_sql_file $db_login_opts „$prefix/op5/ninja/install_script … /usr/bin/env php „$prefix/op5/ninja/install_scripts/auth_import.php“ </code> die so geändert werden muss: <code> run_sql_file $db_login_opts „$prefix/ninja/install_script … /usr/bin/env php „$prefix/ninja/install_scripts/auth_import.php“ </code> Am Beginn dieses Scripts muss man auch ein Passwort für den DB-User root angeben, falls man nach der Merlin-Installation wieder eins vergeben hat. Danach ruft man es auf mit <code> # sh ninja_db_init.sh /usr/local </code> Wichtig! Man muss es im Verzeichnis install_scripts aufrufen. Das Script legt einige Tabellen in der Merlin-Datenbank an. Danach kann man sich am Webinterface unter http:<server>/ninja/index.php mit monitor/monitor anmelden. Da Ninja auf die Contacts von Nagios zurückgreift um festzulegen, wer was sehen darf, muss man diese Contacts in der Benutzerdatenbank von Hand anlegen. Eine Userverwaltung von Ninja habe ich nicht gefunden. Damit sich also ein User nagiosadmin in Ninja einloggen kann, muss man folgenden Befehl in der Datenbank ausführen.
use merlin; insert into users (id, realname, email, username, password_algo, password, logins, last_login) values (2, 'nagios admin', 'nagios@localhost','nagiosadmin','b64_sha1','l5aAn32uSC0xI8FlhfK2D5dAd5Y=', 0, 0);
Das ist zwar brachial, aber immerhin kann man sich jetzt als nagiosadmin/monitor einloggen und sieht dann Hosts und Services. Allzu viel darf man sich aber nicht erwarten. Ninja sieht zwar ganz schick aus, ist aber sehr sehr alpha. Kommandos absetzen geht z.b. noch gar nicht, die Reporting Links zeigen ins Leere (bzw irgendwas mit op5-monitor), usw….