Wie kann Monit dazu gebracht werden, einen Dienst, den es nicht überwacht hat, erneut zu überwachen?

3535
JakeGould

Bei der Erarbeitung einer Antwort auf diese Frage stieß ich beim Testen dieses MySQL-Monit-Regelsatzes auf einem Ubuntu 12.04.5-Setup auf ein Problem:

check process mysqld with pidfile /var/run/mysqld/mysqld.pid group mysql start program = "/etc/init.d/mysql start" stop program = "/etc/init.d/mysql stop" if failed host 127.0.0.1 port 3306 with timeout 15 seconds then restart if 5 restarts within 5 cycles then timeout alert email_address@example.com only on { timeout, nonexist } 

Das Problem ist, dass ich versucht habe, Start / Stop-Elemente über das /etc/init.d/- was eher ein CentOS / RedHat-Systemkonstrukt ist - aufzurufen, anstatt zu verwenden, /usr/sbin/servicewas für ein Ubuntu / Debian-System besser geeignet wäre.

Okay, mein Schlechter ... Aber das Problem ist, dass Sie diesen if 5 restarts within 5 cycles then timeoutTeil sehen? Das scheint mich hart gebissen zu haben. Wenn der /etc/init.d/mysql startBefehl nicht funktioniert, hat das System fünf Neustarts versucht, ist fünfmal fehlgeschlagen und hat dann das Zeitlimit überschritten. Die Timeout-Bedingung scheint dazu zu führen, dass der MySQL-Serviceregelsatz von Monit ignoriert wird.

Ich habe den Monit-Dienst ein paar Mal neu gestartet und sogar den Regelsatz neu gejagt, um zu sehen, ob er hilft, aber nichts davon scheint irgendetwas zu beeinflussen.

Was kann ich tun, damit Monit auf Regelsätze achten kann, die aufgrund von Timeout-Bedingungen "nicht überwacht" wurden?

7

2 Antworten auf die Frage

4
JakeGould

Nach einigem Graben stellt sich heraus, dass Monit die Systemüberwachungsdaten in einer Statusdatei speichert. In dieser Statusdatei wird nachverfolgt, welche Dienste überwacht / nicht überwacht werden.

Dies ist zwar ein bisschen "brutale Kraft", aber es funktioniert definitiv. Wenn ein Dienst aufgrund eines Timeouts "nicht überwacht" wird, entfernen Sie einfach die Monit-Statusdatei wie folgt aus dem System:

sudo rm /var/lib/monit/state 

Und dann Monit so neu starten und alles sollte gut sein:

sudo service monit restart 

FWIW, auf anderen Systemen / Setups kann die Monit-Statusdatei als stateoder monit.stateoder sogar .monit.state(mit einem Punkt / .Punkt) in einem anderen Verzeichnis gespeichert werden. Stellen Sie sicher, dass Sie genau bestimmen, wo die Statusdatei gespeichert wird, wenn Sie tatsächlich versuchen, dieses Update zu implementieren.

Wenn ich versuche, diese Statusdatei auf Amazon Linux zu finden, konnte ich sie (endlich) unter `/ root / .monit.state` finden Scott vor 7 Jahren 1
@Scott Guter Punkt! Meine Antwort wurde angepasst, um der Tatsache Rechnung zu tragen, dass sich die Statusdatei an einem anderen Ort mit einem anderen Dateinamen befindet. JakeGould vor 7 Jahren 0
Sie sollten den Speicherort Ihrer `statefile` in der Monit-Konfigurationsdatei (` / etc / monit / monitrc`) zB mit `grep statefile / etc / monit / monitrc` finden können user51928 vor 6 Jahren 1
1
user51928

Monit enthält Befehle zum Aktivieren und Deaktivieren der Überwachung aller oder bestimmter Dienste.

Wenn ein Dienst nicht überwacht wurde, können Sie die Überwachung mit z . B. monit monitor mysqloder erneut aktivieren monit monitor all.

Beachten Sie, dass die HTTP-Schnittstelle von Monit aktiviert sein muss, damit diese Befehle funktionieren.

„Beachten Sie, dass die HTTP-Schnittstelle von Monit aktiviert sein muss, damit diese Befehle funktionieren.“ Das macht keinen Sinn. JakeGould vor 6 Jahren 0
Die Monit-CLI verwendet die HTTP-Schnittstelle, um mit dem Monit-Daemon zu kommunizieren. "Beachten Sie, dass bei deaktivierter HTTP-Unterstützung die Monit-CLI-Schnittstelle die Funktionalität einschränkt, da die meisten CLI-Befehle (z. B." Status überwachen ") mit dem Monit-Hintergrundprozess über die HTTP-Schnittstelle kommunizieren müssen. Wir empfehlen dringend, die HTTP-Unterstützung zu aktivieren . " https://mmonit.com/monit/documentation/monit.html#MONIT-HTTPD Nun ist es eine Frage für die Entwickler, ob dies sinnvoll ist oder nicht. :) user51928 vor 6 Jahren 1