04.05.2015 Views

Merlin - Nagios-Wiki

Merlin - Nagios-Wiki

Merlin - Nagios-Wiki

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!