Pohl Renner: Munin
Gabriele Pohl Michael Renner Munin Graphisches Netzwerk- und System-Monitoring
Alle in diesem Buch enthaltenen Programme, Darstellungen und Informationen wurden nach bestem Wissen erstellt. Dennoch sind Fehler nicht ganz auszuschließen. Aus diesem Grunde sind die in dem vorliegenden Buch enthaltenen Informationen mit keiner Verpflichtung oder Garantie irgendeiner Art verbunden. Autor(en), Herausgeber, Übersetzer und Verlag übernehmen infolgedessen keine Verantwortung und werden keine daraus folgende Haftung übernehmen, die auf irgendeine Art aus der Benutzung dieser Informationen oder Teilen davon entsteht, auch nicht für die Verletzung von Patentrechten, die daraus resultieren können. Ebenso wenig übernehmen Autor(en) und Verlag die Gewähr dafür, dass die beschriebenen Verfahren usw. frei von Schutzrechten Dritter sind. Die in diesem Werk wiedergegebenen Gebrauchsnamen, Handelsnamen, Warenbezeichnungen usw. werden ohne Gewährleistung der freien Verwendbarkeit benutzt und können auch ohne besondere Kennzeichnung eingetragene Marken oder Warenzeichen sein und als solche den gesetzlichen Bestimmungen unterliegen. Dieses Werk ist urheberrechtlich geschützt. Alle Rechte, auch die der Übersetzung, des Nachdrucks und der Vervielfältigung des Buches oder Teilen daraus vorbehalten. Kein Teil des Werkes darf ohne schriftliche Genehmigung des Verlags in irgendeiner Form (Druck, Fotokopie, Mikrofilm oder einem anderen Verfahren), auch nicht für Zwecke der Unterrichtsgestaltung, reproduziert oder unter Verwendung elektronischer Systeme verarbeitet, vervielfältigt oder verbreitet werden. Bibliografische Information Der Deutschen Nationalbibliothek Die Deutsche Nationalbibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie; detaillierte bibliografische Daten sind im Internet über http://dnb.d-nb.de abrufbar. 2008 Open Source Press, München Gesamtlektorat: Patricia Jung Satz: Open Source Press GmbH (LaTeX) Umschlaggestaltung: Fritz Design GmbH, Erlangen Gesamtherstellung: Kösel, Krugzell ISBN 978-3-937514-48-2 http://www.opensourcepress.de
Vorwort der Munin Entwickler Ein Buch, das von einem Projekt handelt, auf das man selbst viel Zeit verwendet hat, öffnet man mit einer gewissen Spannung. In diesem Fall machte sich Erleichterung breit: Glücklicherweise sind die Autoren mit viel Zeit und Sorgfalt zu Werke gegangen. Linpros Systemadministrationsabteilung nahm irgendwann im Jahre 2001 ihre Arbeit auf, und ungefähr zum gleichen Zeitpunkt erblickte auch das Projekt, das heute Munin ist, das Licht der Welt. Damals handelte es sich um eine Handvoll Shell- und Perlskripte, die mit Hilfe von MRTG (RRDs Vorläufer, mehr dazu in diesem Buch) E-Mail-Queues, den Füllstand der Festplatten und andere kritische Parameter der Systeme grafisch darstellten, für die man als Admin Verantwortung trägt. Damals hieß die SkriptsammlungÐ ¹ÐÖÖ, wobei LRRD für Linpro Round Robin Database steht. Seitdem haben die wichtigsten Munin-Hacker bei Linpro gearbeitet (wir beide, Jimmy und Nicolai, sind die letzten aus diesem Kreis), anders als bei anderen, von Firmen getragenen Open-Source-Projekten kamen wesentliche Beiträge zu Munin aber auch aus der Community. Ende 2001 entstand das Werkzeug, das heuteñùò Ò¹ÒÓ heißt, um Daten von entfernten Nodes über das Netz zu holen. Man hielt Ausschau nach einem unbenutzten Netzwerksport, und die Entscheidung fiel auf 4949. Gleichzeitig führten wir die Plugin-Architektur ein, die Munin immer noch benutzt. Viele Plugins funktionieren seitdem unverändert. Als wir vor Kurzem einen neuen Dokumentationsstandard für Plugins einführten, war das Anlass für ein wenig Pluginarchäologie, um die ursprünglichen Autoren einiger dieser Plugins zu finden. Sie erkannten ihren Code immer noch wieder! Die Plugin-Architektur erwies sich als äußerst geglückt es ist eine sehr dankbare Aufgabe, zwei Minuten (oder mehr) für das Schreiben eines Shelloder Perlskripts (oder Python- oder Ruby-Skripts... ) aufzuwenden und sofort hübsche und nützliche Graphen auf dem Schirm zu haben. Es hat sich gezeigt, dass das Plug&Play-Prinzip gut funktioniert und dabei hilft, viele Plugins ohne Konfiguration oder Benutzerinteraktion in Betrieb zu nehmen. Wir werden es weiterentwickeln und mehr Zeit dafür aufwenden, dass die automatische Konfiguration der Plugins in Zukunft noch besser wird. 5
Vorwort Spät im Frühjahr 2002 schrieb Audun Ytterdal die Master/Server-Skripte um:ðöö ¹ÙÔ Ø undðöö ¹ Ö Ô entstanden (jetztñùò Ò¹ÙÔ Ø und ÑÙÒ Ò¹ Ö Ô ). Zu diesem Zeitpunkt war der gesamte LRRD-Kern in Perl geschrieben. Im Frühsommer folgteðöö ¹ ØÑÐ, im HerbstÐÖÖ ¹Ò Ó : Die Linpro-Admins hatten Nagios zu Benachrichtigungszwecken und besserer operativer Überwachung in Betrieb genommen. Im Herbst 2002 warf Kollege Knut Haugen einen Blick auf die von LRRD erzeugten Webseiten, und sie bekamen eine Schönheitsoperation verpasst. Ende 2002 waren die Köpfe des LRRD-Projekts mit ihrem Baby ziemlich zufrieden und meinten, dass es auch für andere von Nutzen sein könnte und legten es auf Sourceforge. 2003 entschied Debian als erste Linux-Distribution, LRRD mitzuliefern. Im Januar 2004 sahen die Entwickler, dass große Teile der Arbeit am Projekt nicht länger in Linpro-Regie gemacht wurden und dass das erste L im Namen damit völlig falsch war. Das war ganz in unserem Sinne, wünschten wir uns doch (und wünschen wir uns noch immer) weitere Beiträge aus der Nutzer-Community. Eine Abstimmung auf derðöö ¹Ù Ö -Mailingliste ergab, dass das Kind von nun an den Namen Munin tragen sollte. Bianca Pfingsten entwarf das zugehörige Logo mit dem schwarzen Rabenkopf und der grünen Pulslinie, gesponsort vom Mediahaus Biering Grafischer Betrieb GmbH. Vielen Dank! Seitdem befinden wir uns schon wieder mitten in größeren Umwälzungen: Im Februar zog das Projekt von Sourceforge, das nur CVS bietet, auf ein Trac-Wiki/Ticket-System und in ein SVN-Repository um. Sourceforge hat aber auch eine andere wichtige Funktion: Archiv für freie Software zu sein. Daher verteilen wir paketierte Munin-Versionen weiterhin via Sourceforge, so dass sie dort archiviert werden. Im Herbst 2005 kam jemand darauf, dass der Munin-Port 4949 gar nicht bei der IANA registriert war. Glücklicherweise zeigte es sich, dass der Port noch frei war und dem Projekt formell zugeteilt wurde. Seit damals kamen neue Versionen mit neuen Plugins und Fehlerkorrekturen heraus, Revolutionen haben aber keine stattgefunden. Wie auch das Buch zeigen wird, haben wir aber große Pläne für Munins Zukunft, insbesondere in den Bereichen Skalierung, Datensammlung und kommt Zeit, kommt Rat Präsentation. Wir hoffen, dass Ihnen dieses Buch und Munin nützlich sind und es Spaß macht, damit zu arbeiten. Das jedenfalls finden wir. Oslo im April 2008 Jimmy Olsen und Nicolai Langfeldt Linpro 6
Einleitung 15 1 Architektur 19 1.1 Die Arbeitsweise des Masters..................... 20 1.2 Die Arbeitsweise der Nodes...................... 21 1.3 Einsammeln der Daten........................ 23 1.4 Verlorene Messpunkte......................... 24 1.5 Auswirkungen der Architektur auf die Messwerte........ 25 1.6 Die Munin-Übersicht......................... 26 1.6.1 Gliederung in Gruppen und Hosts............. 26 1.6.2 Die Indexseite zur Gruppe.................. 28 1.6.3 Vergleichende Darstellungen................ 29 1.6.4 Die Hostübersicht....................... 30 1.6.5 Die Detailseite zum Plugin.................. 31 1.6.6 Das Layout anpassen..................... 33 2 Round-Robin-Datenbanken 35 2.1 Datenverdichtung........................... 38 2.1.1 Archivierungsregeln für RRD-Dateien........... 39 2.2 Ablage und Benennung der RRD-Dateien............. 40 2.3 Das Dateiformat............................ 41 2.4 Die RRD-Tools............................. 43 2.4.2ÖÖ ØÙÒ.. 2.4.3ÖÖ.. 2.4.1 Das KommandozeilenprogrammÖÖ ØÓÓÐ........ 43........................... 45............................ 46 2.4.4 RRDs bearbeiten........................ 46 7
3 Linux-/Unix-Systeme als Munin-Nodes 49 3.1 Voraussetzungen für die Installation................ 50 3.2 Installation des Nodes......................... 50 3.2.1 Anpassen und Installieren des Quellcodes........ 51 3.2.2 Erstellen eines selbstextrahierenden Installationsskripts 54............. 59 3.3.1 Zugriffsberechtigung für den Master einrichten..... 59 3.3 Konfiguration desñùò Ò¹ÒÓ -Daemons 3.3.2 Abweichenden Port festlegen................ 61 3.3.3 An spezielle IP-Adresse binden............... 61 3.3.4 Speziellen Hostnamen zuordnen.............. 62 3.3.5 Timeout für offene Verbindungen.............. 62 3.3.6 Umfang des Loggings einstellen............... 62 3.3.7 Syslog oder Munin-spezifische Logdatei?......... 63 3.4 Der Munin-Node auf Apple-Computern.............. 63 4 Einbindung und Konfiguration der Plugins 67 4.1 Wildcard-Plugins............................ 68 4.2 SNMP-Plugins.............................. 68 4.3 Automatische Einbindung...................... 69 4.3.1 Voraussetzungen schaffen.................. 69 4.3.2 Plugin-Familien........................ 71 4.3.3 Verlinkungskommandos erfragen.............. 73 4.4 Konfiguration der Laufzeitumgebung................ 73 4.4.1 Ansprache über Mustervergleich.............. 74 4.4.2 Standardparameter...................... 74 4.4.3 Rangordnung bei mehrdeutigen Zuweisungen...... 74 4.4.4 Hostnamen auf Plugin-Ebene ändern........... 75 4.4.5 Plugin-spezifische Parameter................ 75 4.5 Einheitliche Plugin-Dokumentation mitñùò Ò Ó....... 76 5 Der Munin-Master 81 5.1 Hardwareanforderungen....................... 82 5.2 Installation............................... 83 5.2.1 Konfiguration des Webservers................ 87 8
5.2.2 Automatischer Start der Munin-Master-Skripte..... 88 5.3 Konfiguration.............................. 89 5.3.1 Ablageverzeichnisse festlegen................ 89 5.3.2 Die zu überwachenden Hosts festlegen.......... 90 5.3.3 Überschreiben der Plugin-Konfiguration......... 93 5.3.4 Benachrichtigung im Fehlerfall............... 96 5.3.5 Virtuelle Hosts und Plugins................. 99 5.4 Individuelle Farbpaletten für die Graphen............. 104 5.5 Munin-Graphen als CGI........................ 105 5.6 Passwortgeschützte Graphen..................... 107 6 Mitgelieferte Plugins 109 6.1 Plugin-Kategorien........................... 110 6.2 Apache-Plugins............................. 111 6.2.1 Der Graph Apache accesses.................. 111 6.2.2 Der Graph Apache processes................. 112 6.2.3 Der Graph Apache volume.................. 113 6.2.4 Konfiguration des zu überwachenden Webservers.... 114 6.3 Squid-Plugins.............................. 115 6.3.1 Der Graph Squid cache status................ 117 6.3.2 Der Graph Squid client requests............... 117 6.3.3 Der Graph Squid traffic status................ 117 6.4 Mailserver-Überwachung....................... 118 6.4.1 Der Graph Exim Mailqueue.................. 120 6.4.2 Der Graph Exim mail throughput.............. 120 6.4.3 Der Graph Sendmail queued mails.............. 120 6.4.4 Der Graph Sendmail email traffic.............. 121 6.4.5 Der Graph Sendmail email volumes............. 121 6.4.6 Der Graph Qmail queue.................... 122 6.4.7 Der Graph Postfix Mailqueue................. 122 6.4.8 Der Graph Postfix message throughput........... 122 6.4.9 Der Graph Postfix bytes throughput............. 122 6.4.10 Monitoring von Courier-Prozessen............. 123 6.4.11 Der Graph Courier MTA mailqueue............. 123 9
6.4.12 Der Graph Courier MTA mail throughput.......... 124 6.4.13 Der Graph Courier MTA mailvolume throughput..... 124 6.5 Überwachung von Speichermedien................. 124 6.5.1 Die -Plugins........................ 124 6.5.2 Input-Output-Operationen überwachen.......... 126 6.5.3 Überwachen des SMART-Status............... 128 6.6 Systemparameter............................ 132 6.6.1 Der Graph CPU usage..................... 132 6.6.2 Der Graph Available entropy................. 133 6.6.3 Der Graph Interrupts & context switches.......... 133 6.6.4 Der Graph Individual interrupts............... 133 6.7 6.6.5 Der Graph Load average.................... 134 6.6.6 Der Graph Memory usage................... 134 6.6.7 Der Graph File Table usage.................. 137 6.6.8 Der Graph Inode table usage................. 137 6.6.9 Der Graph Swap in/out.................... 138 Netzwerküberwachung........................ 139 6.7.1 Den Netzwerkdurchsatz mit dem Wildcard-Plugin überwachen........................... 139 6.7.2 Netzwerkfehler mit ÖÖ überwachen......... 140 6.7.3 Der Netstat-Graph....................... 141 6.7.4 Das Wildcard-PluginÔ Ò................. 141 6.8 NFS-Zugriffe überwachen....................... 142 6.8.1 Der NFS Server -Graph.................... 142 6.8.2 Der NFS Client -Graph.................... 143 6.9 Prozesse im Blick............................ 144 6.9.1 Prozessinstanzen zählen................... 144 6.9.2 Der Graph Fork rate...................... 145 6.9.3 Der Graph Number of Processes............... 145 6.9.4 Der Graph VMstat....................... 145 6.10 Sensoren auslesen........................... 146 6.11 Sonstiges................................. 149 6.11.1 Der Graph CUPS pages printed................ 149 6.11.2 Die Uptime........................... 150 10
6.11.3 IRC-Server überwachen.................... 151 6.11.4 NTP................................ 152 6.11.5 Der Graph Colour testing plugin............... 154 7 Überwachung per SNMP 155 7.1 Standardisierte Datenstrukturen................... 156 7.2 SNMP-Abfragen mit Munin...................... 157 7.3 Sicherheitsabwägungen........................ 157 7.4 Die Tool-Sammlung Net-SNMP................... 158 7.5 Mitgelieferte SNMP-Plugins..................... 159 7.5.1 Service-Links ermitteln.................... 159 7.5.2 SNMP-Community individuell setzen........... 161 7.5.3 Speziellen SNMP-Port nutzen................ 162 7.5.4 SNMP-Host in der Plugin-Konfiguration vorgeben.... 162 8 Windows-Rechner überwachen 163 8.1 PerÑÙÒ Ò¹ÒÓ º Ü......................... 163 8.2 Per SNMP................................ 166 9 Eigene Plugins schreiben 169 9.1 Abschätzen des Aufwands...................... 170 9.2 Aufbau eines Plugins.......................... 170 9.3 Shellskripte............................... 173 9.3.1 Nützliche Helferlein...................... 173 9.3.2 Ein erstes Plugin........................ 178 9.3.3 Mehrere Kurven in einem Graphen............. 182 9.3.4 Wildcard-Plugins........................ 183 9.3.5 Installationsunterstützung und Magic Markers...... 186 9.3.6 Installationsdetails auslesen................. 188 9.3.7 Statusinformationen über den Plugin-Lauf hinaus bewahren.............................. 191 9.3.8 Umgebungsvariablen berücksichtigen........... 192 9.3.9 Saubere Feldnamen...................... 192 9.3.10 Betriebssystemunabhängigkeit............... 193 9.4 SNMP-Plugins.............................. 194 11
9.4.1 Aufbau eines SNMP-Plugins................. 195 9.4.2 Temperaturmessung...................... 196 9.4.3 Ein Perl-Plugin zur Überwachung von Novell Groupwise Webaccess......................... 200 9.4.4 Automatische Konfiguration................. 214 9.5 Jenseits von SNMP........................... 218 9.6 Testen und Live-Schalten selbstgeschriebener Plugins..... 218 9.7 Aktualisierte und neue Plugins stiften............... 220 10 MuninExchange 221 10.1 Plugins finden.............................. 223 10.2 Die Plugin-Detailansicht....................... 224 10.3 User-Account anlegen......................... 225 10.4 Neue Plugins einstellen........................ 226 10.5 Plugins aktualisieren.......................... 229 10.6 Neue Kategorien und Plattformen vorschlagen.......... 230 11 Troubleshooting 233 11.1 Was sagen die Logdateien?...................... 234 11.1.1 Werkzeug-spezifische Logdateien.............. 234 11.1.2 Meldungen im Syslog..................... 238 11.1.3 Logmeldungen vonñùò Ò¹ÖÓÒ.............. 239 11.2 Plugins testen.............................. 240 11.2.1 Test auf dem Munin-Node.................. 240 11.2.2 Test auf dem Munin-Master................. 242 12 Zusammenarbeit mit Nagios 243 12.1 Eine Gegenüberstellung........................ 243 12.2 Munin alarmiert Nagios........................ 245 12.2.1 Konfiguration des NSCA................... 246 12.2.2 Konfiguration des Nagios-Servers.............. 249 12.2.3 Die Konfiguration auf Munins Seite............ 252 12
13 Verschlüsselte Kommunikation über TLS 257 13.0.4 Einfache Verschlüsselung................... 258 13.0.5 Nutzung von Clientzertifikaten............... 260 13.0.6 Probleme............................ 267 14 Ausblick 269 14.1 Konkrete Pläne für die weitere Entwicklung............ 270 Anhang 273 A Nodes in der DMZ ansprechen 275 A.1 SSH-Tunnel............................... 276 A.2 Alternative TCP-Tunnel........................ 279 B Die Konfigurationsparameter im Überblick 281 B.1 Konfiguration des Munin-Masters.................. 281 B.1.1 Globale Direktiven....................... 282 B.1.2 Gruppenspezifische Direktiven............... 286 B.1.3 Node-Direktiven........................ 287 B.1.4 Plugin-Direktiven....................... 288 B.2 Konfiguration des Munin-Nodes................... 289 C Plugin-Attribute 295 C.1 Globale Attribute des Plugins.................... 295 C.2 Datenspezifische Attribute...................... 299 D Abhängigkeiten der mitgelieferten Plugins 303 E CPAN 311 E.1 DieÔ Ò-Shell einrichten....................... 312............... 314 E.2 Installation desæ Ø Ë ÖÚ Ö-Moduls 13