{"id":6669,"date":"2012-03-31T23:55:25","date_gmt":"2012-03-31T21:55:25","guid":{"rendered":"https:\/\/www.gambaru.de\/blog\/?p=6669"},"modified":"2019-10-11T23:52:38","modified_gmt":"2019-10-11T21:52:38","slug":"monit-der-wachhund-fur-deinen-server","status":"publish","type":"post","link":"https:\/\/gambaru.de\/blog\/2012\/03\/31\/monit-der-wachhund-fur-deinen-server\/","title":{"rendered":"Monit: Der Wachhund f\u00fcr deinen Server"},"content":{"rendered":"<p>Man kann seinen favorisierten Terminalemulator anwerfen, Screen starten und darin dann n\u00fctzliche Applikationen f\u00fcr die Konsole ausf\u00fchren, die jedes Detail des eigenen Rechners auf Schritt und Tritt \u00fcberwachen. Die Methode verliert jedoch ihren Reiz, sobald man schlafen muss oder mehr als nur eine Handvoll Daten im Blick behalten m\u00f6chte.<br \/>\nUm meinen Server zu \u00fcberwachen benutze ich zur Zeit <a href=\"http:\/\/munin-monitoring.org\/\">Munin<\/a> und <a href=\"http:\/\/mmonit.com\/monit\/\">Monit<\/a>, die sich gegenseitig sehr gut erg\u00e4nzen. Ersterer \u00fcberwacht alle wichtigen Aspekte des Systems wie Systemlast, Speicherverbrauch, Festplattenbelegung, Traffic, ja sogar die Anzahl der Spieler und kann all das mit Hilfe von Graphen anschaulich visualisieren, wodurch sich Trends fr\u00fchzeitig erkennen lassen. Monit hingegen ist ideal daf\u00fcr geeignet um Prozesse zu \u00fcberwachen, diese gegebenenfalls neuzustarten und beim Erreichen kritischer Schwellwerte Alarm per E-Mail-Benachrichtigung auszul\u00f6sen.<br \/>\nIn diesem Beitrag beschreibe ich in K\u00fcrze, was Monit auf <a href=\"http:\/\/linuxiuvat.de\">meinem Spieleserver<\/a> mit Debian f\u00fcr Aufgaben hat und wie man ihn unkompliziert einrichtet.<\/p>\n<h2>Installation<\/h2>\n<p><code>aptitude install monit<\/code><\/p>\n<p>Damit Monit bei jedem Neustart automatisch gestartet wird, muss folgende Variable in <em>\/etc\/default\/monit<\/em> gesetzt sein.<\/p>\n<blockquote><p>startup=1<\/p><\/blockquote>\n<h2>Konfiguration<\/h2>\n<p>Die zentrale Konfigurationsdatei von Monit liegt in <em>\/etc\/monit\/monitrc<\/em> und ist genauso wie das Handbuch, <strong>man monit<\/strong>, ausgezeichnet dokumentiert. Die <a href=\"http:\/\/mmonit.com\/monit\/documentation\/monit.html\">offizielle Dokumentation<\/a> ist ausf\u00fchrlich und mit vielen Beispielen gespickt.<\/p>\n<dl>\n<dt><strong>set daemon 120<\/strong><\/dt>\n<dd>\u00dcberpr\u00fcft die Dienste alle 120 Sekunden.<\/dd>\n<dt><strong>set logfile syslog facility log_daemon<\/strong><\/dt>\n<dd>Alle Nachrichten werden nach syslog vom Benutzer Munin geloggt. Hier k\u00f6nnte auch der volle Pfad zu einer separaten Logdatei stehen.<\/dd>\n<dt><strong>set idfile \/var\/.monit.id<\/strong><\/dt>\n<dd>Der Ort, wo die einzigartige ID der Monitinstanz gespeichert wird<\/dd>\n<dt><strong>set statefile \/var\/.monit.state<\/strong><\/dt>\n<dd>Diese Datei speichert den aktuellen Zustand der \u00fcberwachten Prozesse, welcher durch die persistente Speicherung auch nach einem Neustart von Monit wiedererkannt wird.<\/dd>\n<dt><strong>set mailserver localhost<\/strong><\/dt>\n<dd>Hier wird ggf. ein Backupserver und externer Mailserver eingetragen. Ich habe mir <a href=\"https:\/\/www.gambaru.de\/blog\/2012\/03\/21\/nur-versenden-mailserver-mit-debian-und-exim\/\">einen eigenen aufgesetzt<\/a>.<\/dd>\n<dt><strong>set alert root@localhost<\/strong><\/dt>\n<dd>Die E-Mail-Adresse, welche in einem Problemfall alarmiert werden soll.<\/dd>\n<\/dl>\n<h3>Allgemeine Systemressourcen<\/h3>\n<p>Hier werden Systemlast, Speicherauslastung und CPU-Beanspruchung \u00fcberpr\u00fcft. Die Syntax ist sehr \u00fcbersichtlich und selbsterkl\u00e4rend. Wenn ein Wert einen Schwellwert \u00fcberschreitet soll alarmiert werden.<\/p>\n<blockquote><p>check system localhost<br \/>\nif loadavg (1min) &gt; 2 then alert<br \/>\nif loadavg (5min) &gt; 1 then alert<br \/>\nif memory usage &gt; 75% then alert<br \/>\nif cpu usage (user) &gt; 70% then alert<br \/>\nif cpu usage (system) &gt; 45% then alert<br \/>\nif cpu usage (wait) &gt; 45% then alert<\/p><\/blockquote>\n<h3>Prozesse \u00fcberwachen<\/h3>\n<p>Die meisten Eintr\u00e4ge sehen bei mir wie der untere aus. Der OpenArena-Server wird automatisch neugestartet, wenn der Verf\u00fcgbarkeitstest auf Port 27960 mit dem UDP-Protokoll fehlschl\u00e4gt. Der Konfigurationsblock l\u00e4sst sich leicht auf Dienste wie SSH, Lighttpd oder Exim \u00fcbertragen. Sollte der Prozess f\u00fcnf Mal innerhalb von f\u00fcnf Zyklen neugestartet worden sein, soll Monit die Versuche einstellen.<\/p>\n<blockquote><p>check process openarena-server with pidfile \/var\/run\/openarena-server.pid<br \/>\nstart program = \"\/etc\/init.d\/oa_ded start\"<br \/>\nstop program = \"\/etc\/init.d\/oa_ded stop\"<br \/>\nif failed host 134.0.24.218 port 27960 type udp then restart<br \/>\nif 5 restarts within 5 cycles then timeout<br \/>\nalert root@localhost but not on { instance pid }<\/p><\/blockquote>\n<p>M\u00f6chte man nur \u00fcber bestimmte Warnmeldungen per Mail informiert werden, hilft die Konstruktion <em>alert but not on<\/em> weiter.<\/p>\n<h3>Apache Webserver<\/h3>\n<p>Das Beispiel stammt direkt aus der monitrc und verdeutlicht noch einmal wie logisch die Konfiguration aufgebaut ist. Monit ist z.B in der Lage pro Prozess die CPU-Auslastung zu \u00fcberwachen und bei 60% zu alarmieren und dann bei 80% den Webserver neuzustarten und bestehende Verbindungen somit zu trennen. Des Weiteren l\u00e4sst sich das auch auf den Speicherverbrauch und Kindprozesse anwenden.<\/p>\n<blockquote><p>check process apache with pidfile \/usr\/local\/apache\/logs\/httpd.pid<br \/>\nstart program = \"\/etc\/init.d\/httpd start\" with timeout 60 seconds<br \/>\nstop program = \"\/etc\/init.d\/httpd stop\"<br \/>\nif cpu &gt; 60% for 2 cycles then alert<br \/>\nif cpu &gt; 80% for 5 cycles then restart<br \/>\nif totalmem &gt; 200.0 MB for 5 cycles then restart<br \/>\nif children &gt; 250 then restart<br \/>\nif loadavg(5min) greater than 10 for 8 cycles then stop<\/p><\/blockquote>\n<h3>Dateitests<\/h3>\n<p>Besonders n\u00fctzlich sind auch Dateitests. Zum einen ist es ein Sicherheitswerkzeug. Ge\u00e4nderte Dateiberechtigungen an wichtigen Systemdateien k\u00f6nnen sofort erkannt werden, ein veralteter Zeitstempel k\u00f6nnte auf ein Problem mit einem Dienst hindeuten. Au\u00dferdem kann die Dateigr\u00f6\u00dfe \u00fcberwacht und z.B. ein Skript ausgef\u00fchrt werden, welches die Datei an einen anderen Ort verschiebt.<\/p>\n<blockquote><p>check file openarenalog with path \/home\/openarena\/.openarena\/baseoa\/games.log<br \/>\nif failed permission 700 then alert<br \/>\nif failed uid openarena then alert<br \/>\nif failed gid openarena then alert<br \/>\nif timestamp &gt; 15 minutes then alert<br \/>\nif size &gt; 100 MB then exec \"\/usr\/local\/bin\/meinskript.sh\" as uid openarena and gid openarena<\/p><\/blockquote>\n<h3>Monit im Browser anschauen<\/h3>\n<blockquote><p>set httpd port 2812 and<br \/>\nallow admin:monit<\/p><\/blockquote>\n<p>Monit bringt einen eigenen Webserver mit, der auf Port 2812 die \u00fcberwachten Prozesse \u00fcbersichtlich darstellt. Dabei ist es m\u00f6glich diese Dienste im Webinterface neuzustarten oder Monit anzuweisen die \u00dcberwachung kurzfristig auszusetzen. Den Port muss man mit der Firewall nicht freigeben. Man kann z.B einen SSH-Tunnel zum Betrachten nutzen und dann mit <em>http:\/\/localhost:2812<\/em> im eigenen Browser als Benutzer admin mit dem Passwort monit sich das Ganze ansehen. Z.B.<br \/>\n<code>ssh -p 44443 -L 2812:deinserver:2812 user@deinserver<\/code><\/p>\n<h2>Fazit<\/h2>\n<p>Monit ist leicht zu installieren und ebenso leicht zu konfigurieren. Ist das einmal erledigt verrichtet er unaufdringlich im Hintergrund seine Arbeit und schl\u00e4gt sofort an, wenn ein Grenzwert \u00fcberschritten wurde. Ich vermisste an der Version in Debian Squeeze nur die M\u00f6glichkeit die \u00dcberwachung auch mal f\u00fcr einen kurzen Zeitraum zu unterbinden, wenn z.B ein Backup gemacht wird und deswegen einige Werte kurzzeitig \u00fcberschritten werden. Die Funktion ist in Wheezy aber vorhanden und findet sich unter \"<a href=\"http:\/\/mmonit.com\/monit\/documentation\/monit.html#service_poll_time\">Service Poll Time<\/a>\".<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Man kann seinen favorisierten Terminalemulator anwerfen, Screen starten und darin dann n\u00fctzliche Applikationen f\u00fcr die Konsole ausf\u00fchren, die jedes Detail des eigenen Rechners auf Schritt und Tritt \u00fcberwachen. Die Methode verliert jedoch ihren Reiz, sobald man schlafen muss oder mehr als nur eine Handvoll Daten im Blick behalten m\u00f6chte. Um meinen Server zu \u00fcberwachen benutze &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/gambaru.de\/blog\/2012\/03\/31\/monit-der-wachhund-fur-deinen-server\/\" class=\"more-link\"><span class=\"screen-reader-text\">\u201eMonit: Der Wachhund f\u00fcr deinen Server\u201c<\/span> weiterlesen<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[6],"tags":[53,108,124],"_links":{"self":[{"href":"https:\/\/gambaru.de\/blog\/wp-json\/wp\/v2\/posts\/6669"}],"collection":[{"href":"https:\/\/gambaru.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/gambaru.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/gambaru.de\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/gambaru.de\/blog\/wp-json\/wp\/v2\/comments?post=6669"}],"version-history":[{"count":1,"href":"https:\/\/gambaru.de\/blog\/wp-json\/wp\/v2\/posts\/6669\/revisions"}],"predecessor-version":[{"id":10844,"href":"https:\/\/gambaru.de\/blog\/wp-json\/wp\/v2\/posts\/6669\/revisions\/10844"}],"wp:attachment":[{"href":"https:\/\/gambaru.de\/blog\/wp-json\/wp\/v2\/media?parent=6669"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/gambaru.de\/blog\/wp-json\/wp\/v2\/categories?post=6669"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/gambaru.de\/blog\/wp-json\/wp\/v2\/tags?post=6669"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}