Wie kann Monit einen nicht überwachten Dienst erneut überwachen?

8

Während ich eine Antwort auf diese Frage entwickelte, stieß ich beim Testen dieses MySQL Monit-Regelsatzes auf einem Ubuntu 12.04.5-Setup auf einen Haken:

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 protected] only on { timeout, nonexist }

Das Problem ist, dass ich versucht habe, Start / Stopp-Elemente über /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 schlechtes ... Aber das Problem ist, dass Sie diesen if 5 restarts within 5 cycles then timeoutTeil sehen? Das scheint mich hart gebissen zu haben. Da der /etc/init.d/mysql startBefehl nicht funktionieren konnte, versuchte das System 5 Neustarts, schlug 5 Mal fehl und lief daraufhin ab. Und die Timeout-Bedingung scheint dazu zu führen, dass der MySQL-Dienst-Regelsatz in meinem Monit ignoriert wird.

Ich habe den Monit-Dienst einige Male neu gestartet und sogar den Regelsatz neu ausgelöst, um festzustellen, ob er hilft, aber nichts davon scheint irgendetwas zu beeinflussen.

Was kann ich tun, um Monit dazu zu bringen, auf Regelsätze zu achten, die aufgrund der Einhaltung der Timeout-Bedingungen nicht überwacht wurden?

JakeGould
quelle

Antworten:

6

Nach einigem Graben stellt sich heraus, dass Monit Systemüberwachungsdaten in einer Statusdatei speichert. Und diese "Status" -Datei verfolgt, welche Dienste überwacht / nicht überwacht werden.

Das ist zwar ein bisschen "Brute Force", aber es funktioniert definitiv. Wenn ein Dienst aufgrund einer Zeitüberschreitung nicht überwacht wird, entfernen Sie einfach die Monit-Statusdatei wie folgt aus dem System:

sudo rm /var/lib/monit/state

Und dann starten Sie Monit so neu 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 .vorangestellt) in einem anderen Verzeichnis gespeichert werden. Stellen Sie sicher, dass Sie genau bestimmen, wo diese Statusdatei gespeichert wird, wenn Sie tatsächlich versuchen, dieses Update zu implementieren.

JakeGould
quelle
1
In einem ähnlichen Zusammenhang, als ich versuchte, diese Statusdatei unter Amazon Linux zu finden, konnte ich sie (endlich) finden/root/.monit.state
Scott
@ Scott Guter Punkt! Meine Antwort wurde angepasst, um der Tatsache Rechnung zu tragen, dass sich die "Status" -Datei möglicherweise an einer anderen Stelle mit einem völlig anderen Dateinamen befindet.
JakeGould
1
Sie sollten in der Lage sein, den Speicherort Ihres statefilein der Monit-Konfigurationsdatei ( /etc/monit/monitrc) mit zBgrep statefile /etc/monit/monitrc
user51928
3

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 Monit aktiviert sein muss, damit diese Befehle funktionieren.

user51928
quelle
"Beachten Sie, dass die Monit-HTTP-Schnittstelle aktiviert sein muss, damit diese Befehle funktionieren." Das macht keinen Sinn.
JakeGould
1
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 eine eingeschränkte Funktionalität aufweist, da die meisten CLI-Befehle (z. B." Monit-Status ") über die HTTP-Schnittstelle mit dem Monit-Hintergrundprozess kommunizieren müssen. Wir empfehlen dringend, die HTTP-Unterstützung zu aktivieren . " mmonit.com/monit/documentation/monit.html#MONIT-HTTPD Ob dies nun sinnvoll ist oder nicht, ist eine Frage für die Entwickler :)
user51928