Graphisches Systemmonitoring mit Munin Michael Renner (michael.renner@gmx.de) Gabriele Pohl (contact@dipohl.de) Folien auf http://munin.dipohl.de/
Überblick Einführung Ein Besuch im Zoo Vorstellung der Munin-Architektur Backend: die Round-Robin-Database RRD Gespräch mit einem Munin-Node Munin in der Praxis Installation Munin-Konfiguration (Master, Node, Plugin) Pluginentwicklung Zeit für Fragen und Diskussion Nagios anbinden Munin-Kommunikation in DMZen
Ein Dienst, der nicht überwacht wird, ist keiner! Wirklichkeit Anspruch: Einhaltung des Service Level Agreement (SLA) Nachfrage ändert sich Material verschleißt Fehler und Defekte kommen vor Methoden 1 Automatisierte Überwachung Früherkennung (Warnschwellen) Benachrichtigung des zuständigen Personals Fehleranalyse Trend-Analyse 1 Natürlich auch Redundanz, Load-Balancing, Schichtbetrieb,..
Monitoringtools 2 Signalisierung Nagios (www.nagios.org) ZABBIX (www.zabbix.com/) Langzeitbeobachtung Munin (munin.sourceforge.net) Cacti (www.cacti.net) MRTG - Multi Router Traffic Grapher (www.mrtg.org) 2 Beschränkung auf Open-Source-Software. Kein Anspruch auf Vollständigkeit.
Gemeinsamkeiten von Munin und Nagios Open-Source-Software und aktive Community Master-Node Architektur Parallele Abfrage der Nodes Vielfältige Plugins verfügbar, beide auch SNMP-Plugins Leicht um eigene Checks erweiterbar (Programmiersprache beliebig) Benachrichtigungen vom Typ Warnung, Fehler, Entwarnung
Besondere Fähigkeiten von Nagios Geschaffen zur Signalisierung Übermittelt in erster Linie den Status: OK, WARNING, CRITICAL, UNKNOWN Pollt in kurzen Abständen (Individuelle Einstellungen je Service möglich.) Definition von Host-Hierarchien möglich Ausgefeiltes Benachrichtigungswesen Eskalationsmanagement Multi-Master-Architektur Event Handler
Besondere Fähigkeiten von Munin Geschaffen zur Langzeitüberwachung Übermittelt in erster Linie Messwerte (Status wird ggf. daraus abgeleitet) Grafische Aufbereitung des Verlaufs Langzeitarchivierung der Daten Konstanter Platzbedarf durch Round-Robin-Mechanismus Tages-, Wochen-, Monats- und Jahresverlauf im direkten Überblick Datenquellen unterschiedlich darstellen, verrechnen und kombinieren
Vorstellung der Munin Übersicht Ein Besuch im Zoo.. Live und in Farbe: http://munin.ping.uio.no/ http://hyaden.dyndns.org/munin/ http://munin.tuxfamily.org/ http://noc.grid.niif.hu/munin/
Die Munin-Architektur Munin-Node Port: 4949 Port: 4949 Munin-Node Munin-Master Cron-gesteuert Daten einsammeln Munin-Node Port: 4949 Daten speichern und archivieren Daten visualisieren Port: 4949 Munin-Node SNMP-Abfrage
Munins Filesystem-Hierarchie (Master) /usr/bin/munin-cron (Shellskript, das die Prozesse des Munin-Masters anstößt.) /usr/share/munin/ Perl-Skripte, die von munin-cron aufgerufen werden: munin-update (Sammelt die Daten der Nodes ein und erstellt die RRAs für neue Datenquellen.) munin-limits (Vergleicht die eingesammelten Werte mit denen der ggf. definierten Warnschwellen und versendet bei Bedarf Benachrichtigungen.) munin-graph (Erzeugt die Munin-Graphen für die Munin-Übersicht.) munin-html (Erzeugt die HTML-Seiten der Munin-Übersicht.) /etc/cron.d/munin (Alle 5 Minuten Aufruf von munin-cron) /var/run/munin (Lock-Dateien für alle Masterprozesse und die Zwischenspeicherungsdateien auf /var/lib/munin) /var/log/munin munin-graph.log munin-html.log munin-limits.log munin-update.log /etc/logrotate.d/munin
Munins Filesystem-Hierarchie (Master) ff. /var/lib/munin GROUP1, GROUP2,.. (Hier lagern die RRD-Dateien) Diverse Dateien, die zur Zwischenspeicherung von Daten dienen. /etc/munin munin.conf (Allgemeine Konfiguration des Munin-Master sowie Strukturierung der Munin-Übersicht) templates (Templates zur Generierung der Munin-Übersicht) /var/www/html/munin (HTML-Seiten mit der Munin-Übersicht) /usr/share/doc/munin-x.x.x (Dokumentation zum Munin-Master.) /usr/share/man (Manualseiten zum Munin-Master) man5/munin.conf.5.gz man8/munin-cron.8.gz man8/munin-graph.8.gz man8/munin-html.8.gz man8/munin-limits.8.gz man8/munin-update.8.gz
Die Robin-Round-Datenbanken (RRD)
Anlegen der Datei und Archive (RRAs) rrdcreate erzeugt RRD (http://oss.oetiker.ch/rrdtool/doc/rrdcreate.en.html) rrdtune verändert Limits (doch nicht step!) rrdupdate schreibt neuen Wert in in RRD rrdfetch exportiert Werte aus RRD rrddump exportiert Werte aus RRD in xml rrdgraph erzeugt png Graphen RRD mit Munin munin verwendet Perl-Modul RRDs.pm (RRD shared) RRDp.pm (RRD piped zur Console)
Die Munin-Architektur Munin-Node Port: 4949 Port: 4949 Munin-Node Munin-Master Cron-gesteuert Daten einsammeln Munin-Node Port: 4949 Daten speichern und archivieren Daten visualisieren Port: 4949 Munin-Node SNMP-Abfrage
Munins Filesystem-Hierarchie (Node) /usr/share/munin/plugins (Hier befinden sich alle verfügbaren Plugins) /etc/munin plugins (Service Directory - Symbolische Links auf die eingebundenen Plugins) plugin-conf.d munin-node (Konfiguration der Plugins) plugins.conf (Achtung! Diese Datei ist in manchen Distributionen enthalten, hat aber keine Funktion!) munin-node.conf (Konfiguration des Munin-Node) /etc/rc.d/init.d/munin-node (Shellskript. Startet den Munin-Node-Daemon.) /usr/sbin munin-node (Perlskript des Munin-Node-Daemons. Der lauscht in der Regel auf Port 4949.) munin-node-configure (Perlskript. Utility zur automatischen Installation der Plugins) munin-node-configure-snmp (Perlskript. Utility zur automatischen Installation von SNMP-Plugins) munin-run (Perlskript. Utility zur manuellen Ausführung von Plugins. Sollte unter User root aufgerufen werden und liefert mit Option --debug nützliche Hinweise auf Fehlerquellen.) /var/run/munin/munin-node.pid (Enthält die Prozessnummer des laufenden Munin-Node-Daemons.) /var/lock/subsys/munin-node (Lock-Datei für den Munin-Node-Daemon)
Munins Filesystem-Hierarchie (Node) ff. /var/log/munin munin-node.log /etc/logrotate.d/munin-node /var/lib/munin plugin-state (Das Verzeichnis dient Plugins bei Bedarf zur Ablage von Arbeitsdateien.) /usr/share/doc/munin-x.x.x (Dokumentation zum Munin-Node) /usr/share/man (Manualseiten zum Munin-Node) man5/munin-node.conf.5.gz man8/munin-node-configure-snmp.8.gz man8/munin-node-configure.8.gz man8/munin-node.8.gz man8/munin-run.8.gz
Nun genug der grauen Theorie! Wir nehmen Kontakt auf zu einem lebenden Munin-Node :-) $ telnet 127.0.0.1 4949
Munin in der Praxis Monitoringsysteme Nagios (Signalisierung) Munin (Langzeitmonitoring) @Friend (Visualisierung) Munin-Nodes Solaris (Binärpaket) Munin-Server Linux-Mehrprozessormaschine Munin in der DMZ Klartextkommunikation in ssh verpackt automatischer Vitalitätscheck
ssh in der DMZ
ssh key
ssh zuverlässig gestalten
Installation Serverseite Linux-Distribution: apt-get install munin-main FreeBSD: cd /usr/ports/sysutils/munin-main ; make install Solaris/Windows: make, perl mit allen benötigten Modulen (cpan), RRD, Webserver Clientseite Linux-Distribution: apt-get install munin FreeBSD: cd /usr/ports/sysutils/munin ; make install Solaris-Zonen Windows: fertiges Binary bzw. SNMP-Abfrage von remote Systeme ohne Binärpaket: aktuelles perl mit Net::Server installieren selbstextrahierendes Script 3 Binärpaket tar-ball 3 Self-extracting Archive http://linux.org.mt/article/selfextract
Packen für Fortgeschrittene Self-extracting Archive
cpan Binärpaket der Distribution Solaris: pkgproto, tar gzip (oder: make) Linux: debmake, rpm etc
Konfiguration des Munin-Master (1) munin.conf Verzeichnisse festlegen dbdir /var/lib/munin Hier lagern die RRD-Dateien. User munin braucht dort schreibenden Zugriff. logdir /var/log/munin Da landen die Logdateien. User munin braucht dort schreibenden Zugriff. rundir /var/run/munin Hier werden die Lock-Dateien erstellt. User munin braucht dort schreibenden Zugriff. tmpldir /etc/munin/templates Da sind die Templates für die htmldir /var/www/html/munin Munin-Übersicht zu finden. User munin braucht dort lesenden Zugriff. HTML-Seiten der Munin-Übersicht. User munin braucht dort schreibenden Zugriff.
Konfiguration des Munin-Master (2) munin.conf Munin-Tree aufbauen und konfigurieren Ebene 1: Group oder Domain [example.com;] bzw. als eigens definierte 4 Group [GRID;] Ebene 2: Node [foo.example.com] oder alternativ mit eigener Gruppe [GRID;foo.example.com] address localhost Ebene 3: Plugin sensors temp.graph title Temperaturmessung Ebene 4: Data sensors temp.temp1.warning 50 Beispiel: http://noc.grid.niif.hu/munin/ 3 Bezeichnung ohne Leerzeichen und Unterstriche
Konfiguration des Munin-Master (3) munin.conf Zeitliche Auflösung graph period minute Graph zeigt normalerweise Wert pro Sekunde. Hiermit kann auf Wert pro Minute umgestellt werden. Benachrichtigungen contact.someuser.command Kommando Überschreiten gemessene Werte die ggf. angegebenen Schwellen (warning, critical), dann wird das Kommando ausgeführt. Beispiel: # Hier stehen die Kontakte, die per Default benachrichtigt werden sollen. contacts Gabriele Admin # Kommando, das zur Benachrichtigung verwendet wird. contact.gabriele.command mail -s Munin notification $var:host gp@example.net contact.admin.command mail -s Munin notification $var:host admin@example.net # In welchen Fällen soll benachrichtigt werden? contact.gabriele.always send critical contact.admin.always send warning critical
Munin Benachrichtigung im Fehlerfall From munin@localhost.localdomain Fri Nov 30 09:50:09 2007 X-Original-To: admin@example.net Delivered-To: admin@example.net To: admin@example.net Subject: Munin notification elfje.example.net Date: Fri, 30 Nov 2007 09:50:09 +0100 (CET) From: munin@localhost.localdomain (Munin user) example.net :: elfje.example.net :: S.M.A.R.T values for drive hda CRITICALs: Power Cycle Count is 0.00 (outside range [020:]), Raw Read Error Rate is 0.00 (outside range [006:]), Seek Error Rate is 0.00 (outside range [030:]), Reallocated Sector Ct is 0.00 (outside range [036:]), Spin Retry Count is 0.00 (outside range [097:]), Start Stop Count is 0.00 (outside range [020:]). example.net :: elfje.example.net :: Fans CRITICALs: SV-Fan is 0.00 (outside range [839:]). example.net :: elfje.example.net :: Voltages CRITICALs: +12V is 0.00 (outside range [10.82:13.19]), -12V is 0.00 (outside range [-13.18:-10.80]), +5V is 0.00 (outside range [4.76:5.24]), VBat is 0.00 (outside range [2.40:3.60]), V5SB is 0.00 (outside range [5.00:5.59]), -5V is 0.00 (outside range [-5.25:-4.75]), +3.3V is 0.00 (outside range [3.14:3.47]), VCore is 0.00 (outside range [1.42:1.57]).
Munin Benachrichtigung bei Entwarnung From munin@localhost.localdomain Fri Nov 30 09:55:08 2007 X-Original-To: admin@example.net Delivered-To: admin@example.net To: admin@example.net Subject: Munin notification elfje.example.net Date: Fri, 30 Nov 2007 09:55:08 +0100 (CET) From: munin@localhost.localdomain (Munin user) example.net :: elfje.example.net :: S.M.A.R.T values for drive hda OKs: Spin Retry Count is 99.99, Power Cycle Count is 98.67, Raw Read Error Rate is 54.99, Start Stop Count is 100.00, Seek Error Rate is 88.00, Reallocated Sector Ct is 99.99. example.net :: elfje.example.net :: Fans CRITICALs: SV-Fan is 821.68 (outside range [839:]). example.net :: elfje.dipohl.com :: Voltages OKs: +3.3V is 3.19, +12V is 11.89, +5V is 4.91, -5V is -5.04, -12V is -11.84, VBat is 3.03, V5SB is 5.47, VCore is 1.49.
Konfiguration der Nagios Anbindung (1) munin.conf send nsca Kommando für die Benachrichtigung contact.nagios.command /usr/local/nagios/bin/send nsca nagioshost.example.com -c /usr/local/nagios/etc/send nsca.cfg -to 60 Nagios Kontakt einbinden # Alarme für die Gruppe example.com gehen grundsätzlich an nagios. [example.com;] contacts nagios Hosts ausklammern # Keine Benachrichtigung bei Host foo.example.com [foo.example.com] address localhost contacts no
Konfiguration der Nagios Anbindung (2) munin.conf Regeln auf Plugin-Ebene Zuständigkeiten für einzelne Dienste [example.com;bar.example.com] address bar.example.com # Kontakt Admin erhält Nachrichten für Plugin df auf Host bar.example.com df.contacts Admin Mail-Betreff setzen # Betreff der Benachrichtigungen soll Disk usage sein. df.notify alias Disk usage
munin-node.conf Port einstellen port 4949 IP-Nummer einstellen host * host 192.0.2.60 Konfiguration des Munin-Node (1) Zugriff für Munin-Master erlauben allow ˆ127\.0\.0\.1$ allow ˆ192\.168\.10\.3$ User und Group festlegen user root group root Service-Links ausblenden ignore file \.bak$
munin-node Konfiguration der Plugins (1) Jede Datei im Verzeichnis /etc/munin/plugin-conf.d/ ist relevant! Munin liest diese in alphabetischer Reihenfolge ein. User und Gruppe für die Ausführung setzen [smart *] user root group sys Umgebungsvariablen setzen env.variable Wert Beispiel: [snmp *] env.community public [snmp SecretHost *] env.community SecretSNMPCommunityString
Pluginentwicklung Pluginentwicklung aufrufbares Programm (kein Daemon) Textausgabe auf STDOUT Informationsquellen http://munin.projects.linpro.no/wiki/howtowriteplugins mitgelieferte Plugins Funktionsblöcke Ermitteln der Konfiguration Ausgabe der Konfiguration Ausgabe der Messwerte Einbinden Script aufrufen Verlinken, munin-run Neustart munin-node (und abwarten...)
Simples Skript
eigene Plugins; eine Auswahl
Zum Abschluss Wir danken für die Aufmerksamkeit... Zeit für Fragen