Merlin - Nagios-Wiki
Merlin - Nagios-Wiki
Merlin - Nagios-Wiki
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
<strong>Merlin</strong><br />
Nürnberg, 01.06.2010<br />
<strong>Nagios</strong>-Workshop Nürnberg 31.05-01.06.2010 © Wolfgang Barth 1
Urgeschichtliches<br />
„<strong>Merlin</strong> war ursprünglich für<br />
verteiltes Monitoring gedacht<br />
– als Ersatz für NSCA –<br />
und nicht als Alternative<br />
zu NDOutils“<br />
<strong>Nagios</strong>-Workshop Nürnberg 31.05-01.06.2010 © Wolfgang Barth 2
Aufgedröselt:<br />
●<br />
●<br />
Verteiltes Monitoring (a la op5)<br />
<br />
<br />
<br />
redundant<br />
distributed<br />
redundant + distributed<br />
NDOutils:<br />
<br />
<br />
<br />
Eventbroker-Modul<br />
Daemon<br />
Datenbank, Datenbank-Layout<br />
<strong>Nagios</strong>-Workshop Nürnberg 31.05-01.06.2010 © Wolfgang Barth 3
Verteiltes Monitoring<br />
chief<br />
view<br />
collect<br />
view<br />
nagios1<br />
exchange<br />
nagios2<br />
<strong>Nagios</strong>-Workshop Nürnberg 31.05-01.06.2010 © Wolfgang Barth 4
Verteiltes Monitoring<br />
●<br />
●<br />
●<br />
„view“:<br />
<br />
<br />
zentrale Sicht auf verteilte Installationen<br />
Thruk, Multisite, aber auch NagVis<br />
„collect“:<br />
<br />
<br />
zentrale Instanz sammelt alle Daten<br />
„obsessive compulsory service processor“,<br />
<strong>Merlin</strong><br />
„exchange“:<br />
<br />
<br />
zwei gleichrangige Installationen tauschen<br />
Informationen aus<br />
<strong>Merlin</strong><br />
<strong>Nagios</strong>-Workshop Nürnberg 31.05-01.06.2010 © Wolfgang Barth 5
Redundantes Monitoring<br />
●<br />
●<br />
... ist ein Sonderfall von verteiltem<br />
Monitoring: zwei (oder mehr) <strong>Nagios</strong>-<br />
Instanzen überwachen die gleichen<br />
Hosts/Services<br />
Varianten:<br />
<br />
<br />
<br />
einfach: parallele Checkausführung<br />
fortgeschritten: Informationsaustausch,<br />
dadurch Arbeitsteilung<br />
Clusterlösungen<br />
<strong>Nagios</strong>-Workshop Nürnberg 31.05-01.06.2010 © Wolfgang Barth 6
Verteiltes Einsammeln<br />
!= verteiltes <strong>Nagios</strong><br />
●<br />
Eine einzelne <strong>Nagios</strong>-Installation kann<br />
ebenfalls verteilte Information<br />
einsammeln:<br />
<br />
<br />
<br />
<br />
check_multi<br />
check_mk<br />
NSCA + Addons (z.B. Cron)<br />
DNX (Distributed <strong>Nagios</strong> eXecutor)<br />
<strong>Nagios</strong>-Workshop Nürnberg 31.05-01.06.2010 © Wolfgang Barth 7
<strong>Merlin</strong>: Status<br />
●<br />
Focus in Branch „master“<br />
<br />
Datenbank für Standalone-Host<br />
●<br />
Full featured: Branch „next“<br />
<br />
Geplantes Release: August 2010<br />
●<br />
Die nachfolgend gezeigten verteilten<br />
Szenarien sind derzeit noch nicht<br />
(stabil) verfügbar und basieren auf den<br />
Spezifikationen von op5!<br />
<strong>Nagios</strong>-Workshop Nürnberg 31.05-01.06.2010 © Wolfgang Barth 8
<strong>Merlin</strong> redundant<br />
●<br />
●<br />
<strong>Merlin</strong>:<br />
(fast) alle Informationen werden an die<br />
anderen Instanzen übermittelt<br />
Arbeitsteilung:<br />
den Check führt aus, wer diesen zuerst<br />
eingeplant hat.<br />
nagios1<br />
+ merlin<br />
peer<br />
exchange<br />
nagios2<br />
+ merlin<br />
peer<br />
<strong>Nagios</strong>-Workshop Nürnberg 31.05-01.06.2010 © Wolfgang Barth 9
<strong>Merlin</strong> verteilt<br />
●<br />
●<br />
●<br />
●<br />
Einer für Alle: NOC (Zentrale)<br />
Alle für Einen: Poller (Sender)<br />
Ein <strong>Nagios</strong>-Host kann<br />
gleichzeitig NOC und<br />
Poller sein!<br />
Multi-Tier<br />
noc<br />
chief<br />
collect<br />
nagios1<br />
poller<br />
nagios2<br />
poller<br />
<strong>Nagios</strong>-Workshop Nürnberg 31.05-01.06.2010 © Wolfgang Barth 10
<strong>Merlin</strong>: Big Picture<br />
peer to peer<br />
noc<br />
noc<br />
noc<br />
noc<br />
noc<br />
noc<br />
noc<br />
poller<br />
poller<br />
poller<br />
poller<br />
poller<br />
poller<br />
<strong>Nagios</strong>-Workshop Nürnberg 31.05-01.06.2010 © Wolfgang Barth 11
Houston, wir haben ein ...<br />
commands<br />
noc<br />
check_results<br />
Konfiguration:<br />
–<br />
1:1 ?<br />
–<br />
manuell<br />
poller<br />
peer<br />
peer<br />
Konfiguration:<br />
–<br />
1:1<br />
–<br />
manuell<br />
check_results<br />
<strong>Nagios</strong>-Workshop Nürnberg 31.05-01.06.2010 © Wolfgang Barth 12
Dämonisches ...<br />
nagios1<br />
mod<br />
/*<br />
Both of these conversions<br />
involve a fair deal of Black<br />
Magic. If you don't<br />
understand what's<br />
happening, please don't<br />
fiddle.<br />
*/<br />
proprietäres<br />
Protokoll<br />
nagios2<br />
mod<br />
backlog<br />
merlind<br />
merlind<br />
backlog<br />
DB<br />
DB<br />
<strong>Nagios</strong>-Workshop Nürnberg 31.05-01.06.2010 © Wolfgang Barth 13
<strong>Nagios</strong> Event Broker<br />
●<br />
●<br />
●<br />
Module abonnieren Channels<br />
<br />
einklinken von Callback-Routinen<br />
Callbacks blockieren <strong>Nagios</strong><br />
<br />
<br />
so schnell wie möglich wieder zu <strong>Nagios</strong><br />
zurückgeben<br />
Daemon statt direktes Schreiben in die<br />
Datenbank<br />
Callbacks = ReadOnly<br />
<br />
<br />
One-Way: Information aus <strong>Nagios</strong><br />
Schreiben: globale <strong>Nagios</strong>-<br />
Datenstrukturen modifizieren<br />
<strong>Nagios</strong>-Workshop Nürnberg 31.05-01.06.2010 © Wolfgang Barth 14
Installation (1)<br />
●<br />
Git verwenden:<br />
<br />
<br />
<br />
git clone git://git.op5.org/nagios/merlin.git<br />
Tar auf www.op5.org ist selten aktuell!<br />
git checkout master|next<br />
<br />
git tag -l<br />
● Aktuell: v0.6.8 (2010-05-07)<br />
●<br />
Webseite: v0.6.7 - hinkt ständig hinter<br />
<strong>Nagios</strong>-Workshop Nürnberg 31.05-01.06.2010 © Wolfgang Barth 15
Installation (2)<br />
●<br />
●<br />
Kompilieren: benötigt libdbi!<br />
<br />
make<br />
<br />
Debian:<br />
aptitude install libdbd-mysql \<br />
libdbi0-dev php5-cli php5-mysql<br />
... aber nicht: make install!<br />
<strong>Nagios</strong>-Workshop Nürnberg 31.05-01.06.2010 © Wolfgang Barth 16
Installation (3)<br />
●<br />
Installskript benötigt passwortlosen Zugriff<br />
als root zu MySQL:<br />
<br />
<br />
~/.my.cnf verwenden<br />
Test: „mysql“ als root<br />
bash install-merlin.sh \<br />
--nagios-cfg=/etc/nagios3/nagios.cfg \<br />
--dest-dir=/usr/local/nagios/addons/merlin \<br />
--db-type=mysql --db-user=merlin \<br />
--db-pass=merlin --db-name=merlin<br />
<strong>Nagios</strong>-Workshop Nürnberg 31.05-01.06.2010 © Wolfgang Barth 17
Konfiguration: merlin.conf<br />
ipc_socket = /var/run/merlin/ipc.sock;<br />
module {<br />
log_file = /var/log/merlin/neb.log;<br />
log_level = warn;<br />
}<br />
daemon {<br />
pidfile = /var/run/merlin/merlin.pid;<br />
log_level = warn;<br />
log_file = /var/log/merlin/daemon.log;<br />
import_program = php /usr/lib/merlin/import.php;<br />
port = 15551;<br />
database {<br />
name = merlin;<br />
user = merlin;<br />
pass = mostlysecret;<br />
host = localhost;<br />
type = mysql;<br />
}<br />
}<br />
<strong>Nagios</strong>-Workshop Nürnberg 31.05-01.06.2010 © Wolfgang Barth 18
Konfiguration: noc-poller<br />
●<br />
chief (=noc):<br />
poller slave {<br />
address = 192.168.1.1;<br />
port = 15551;<br />
hostgroup = SLAVE_SHOULD_WATCH_ON;<br />
●<br />
}<br />
slave (=poller):<br />
noc chief {<br />
address = 192.168.1.2;<br />
port = 15551;<br />
}<br />
<strong>Nagios</strong>-Workshop Nürnberg 31.05-01.06.2010 © Wolfgang Barth 19
Konfiguration: peer<br />
●<br />
peer:<br />
peer other {<br />
address = 192.168.1.3;<br />
port = 15551;<br />
●<br />
●<br />
}<br />
jeder Host kann gleichzeitig peer, noc<br />
und poller sein<br />
maximal 65534 neighbours haben<br />
neighbour = poller | noc | peer<br />
<strong>Nagios</strong>-Workshop Nürnberg 31.05-01.06.2010 © Wolfgang Barth 20
merlin.conf - backlog<br />
ipc_socket = /var/run/merlin/ipc.sock;<br />
ipc_binlog_dir = /var/spool/merlin/backlogs;<br />
module {<br />
...<br />
}<br />
daemon {<br />
...<br />
}<br />
●<br />
Die Backlog-Logik wird im Augenblick<br />
überarbeitet<br />
<strong>Nagios</strong>-Workshop Nürnberg 31.05-01.06.2010 © Wolfgang Barth 21
<strong>Merlin</strong>s Datenbank<br />
●<br />
●<br />
Warum überhaupt eine Datenbank?<br />
<br />
<br />
<br />
Weil's einfach ist<br />
Weil die NDOutils ein furchtbares<br />
Datenbanklayout haben<br />
anständiges GUI<br />
Prinzip:<br />
<br />
<br />
<br />
ein Objekt, eine Tabelle<br />
keine historischen Daten (außer: statechanges,<br />
program start/stop, downtimes)<br />
M:N-Relationen in eigener Tabelle, z.B.<br />
host_hostgroups<br />
<strong>Nagios</strong>-Workshop Nürnberg 31.05-01.06.2010 © Wolfgang Barth 22
SELECT Service Status<br />
●<br />
NDOutils:<br />
SELECT nagios_instances.instance_id, nagios_instances.instance_name,<br />
nagios_services.host_object_id, obj1.name1 AS host_name,<br />
nagios_services.service_object_id, obj1.name2 AS service_description,<br />
nagios_servicestatus.* FROM `nagios_servicestatus`<br />
LEFT JOIN nagios_objects as obj1 ON<br />
nagios_servicestatus.service_object_id = obj1.object_id<br />
LEFT JOIN nagios_services ON nagios_servicestatus.service_object_id =<br />
nagios_services.service_object_id LEFT JOIN nagios_instances ON<br />
nagios_services.instance_id = nagios_instances.instance_id<br />
WHERE nagios_services.config_type = '1'<br />
ORDER BY instance_name ASC, host_name ASC, service_description ASC<br />
●<br />
<strong>Merlin</strong>:<br />
SELECT * FROM service ORDER by host_name, service_description ASC<br />
<strong>Nagios</strong>-Workshop Nürnberg 31.05-01.06.2010 © Wolfgang Barth 23
<strong>Merlin</strong>DB (1): Tabellen<br />
command, comment,<br />
contact, contact_access, contact_contactgroup, contactgroup,<br />
custom_vars, db_version, downtime,<br />
gui_access, gui_action_log,<br />
host, host_contact, host_contactgroup, host_hostgroup<br />
host_parents, hostdependency, hostescalation,<br />
hostescalation_contact, hostescalation_contactgroup,<br />
hostgroup,<br />
notification, program_status,<br />
report_data,<br />
scheduled_downtime,<br />
service, service_contact, service_contactgroup,<br />
service_servicegroup, servicedependency, serviceescalation,<br />
serviceescalation_contact, serviceescalation_contactgroup,<br />
servicegroup,<br />
timeperiod, timeperiod_exclude<br />
<strong>Nagios</strong>-Workshop Nürnberg 31.05-01.06.2010 © Wolfgang Barth 24
<strong>Merlin</strong>DB (2)<br />
●<br />
●<br />
Verknüpfung von Tabellen:<br />
... where hosts.host_name =<br />
comments.host_name ...<br />
keine Objekt-IDs<br />
<strong>Nagios</strong>-Workshop Nürnberg 31.05-01.06.2010 © Wolfgang Barth 25
<strong>Merlin</strong> als NDO-Ersatz<br />
●<br />
●<br />
Support durch NagVis<br />
<br />
backendtype = „merlinmy“<br />
DB- Performance<br />
ndo<br />
+merlin<br />
merlin<br />
<strong>Nagios</strong>-Workshop Nürnberg 31.05-01.06.2010 © Wolfgang Barth 26
das wars ...<br />
Vielen Dank<br />
für Ihre Aufmerksamkeit.<br />
Fragen?<br />
<strong>Nagios</strong>-Workshop Nürnberg 31.05-01.06.2010 © Wolfgang Barth 27