Ich finde das Debuggen von Monit ein großer Schmerz. Die Shell-Umgebung von Monit enthält im Grunde nichts (keine Pfade oder andere Umgebungsvariablen). Außerdem gibt es keine Protokolldatei, die ich finden kann.
Das Problem ist, wenn der Start- oder Stoppbefehl im Überwachungsskript fehlschlägt, ist es schwierig zu erkennen, was daran falsch ist. Oft ist es nicht so einfach, nur den Befehl auf der Shell auszuführen, da sich die Shell-Umgebung von der Monit-Shell-Umgebung unterscheidet.
Welche Techniken werden zum Debuggen von Überwachungskonfigurationen verwendet?
Zum Beispiel würde ich mich über eine Monit-Shell freuen, um meine Skripte zu testen, oder über eine Protokolldatei, um zu sehen, was schief gelaufen ist.
Antworten:
Ich hatte das gleiche Problem. Die Verwendung der ausführlichen Befehlszeilenoption von monit hilft ein wenig, aber ich fand, dass der beste Weg darin bestand, eine Umgebung zu erstellen, die der monit-Umgebung so ähnlich wie möglich ist, und von dort aus das Start / Stopp-Programm auszuführen.
# monit runs as superuser $ sudo su # the -i option ignores the inherited environment # this PATH is what monit supplies by default $ env -i PATH=/bin:/usr/bin:/sbin:/usr/sbin /bin/sh # try running start/stop program here $
Ich habe festgestellt, dass die häufigsten Probleme mit Umgebungsvariablen (insbesondere
PATH
) oder Berechtigungen zusammenhängen. Sie sollten sich daran erinnern, dass monit normalerweise als root ausgeführt wird.Auch wenn Sie
as uid myusername
in Ihrer Monit-Konfiguration verwenden, sollten Siemyusername
vor dem Ausführen des Tests zum Benutzer wechseln .Ich hoffe das hilft.
quelle
su myusername
Stellen Sie sicher, dass Sie Ihre Conf immer überprüfen und Ihre Prozesse von Hand überwachen, bevor Sie monit alles erledigen lassen. systat (1), top (1) und ps (1) sind Ihre Freunde, um die Ressourcennutzung und -grenzen herauszufinden. Es ist auch wichtig, den von Ihnen überwachten Prozess zu kennen.
In Bezug auf die Start- und Stoppskripte verwende ich ein Wrapper-Skript, um die Ausgabe umzuleiten und die Umgebung und andere Variablen zu überprüfen. Etwas wie das :
$ cat monit-wrapper.sh #!/bin/sh { echo "MONIT-WRAPPER date" date echo "MONIT-WRAPPER env" env echo "MONIT-WRAPPER $@" $@ R=$? echo "MONIT-WRAPPER exit code $R" } >/tmp/monit.log 2>&1
Dann in Monit:
start program = "/home/billitch/bin/monit-wrapper.sh my-real-start-script and args" stop program = "/home/billitch/bin/monit-wrapper.sh my-real-stop-script and args"
Sie müssen noch herausfinden, welche Informationen Sie im Wrapper haben möchten, z. B. Prozessinformationen, ID, Systemressourcenbeschränkungen usw.
quelle
start program=/bin/bash -c "..."
Sie können Monit im ausführlichen / Debug-Modus starten, indem Sie
MONIT_OPTS="-v"
zu hinzufügen/etc/default/monit
(vergessen Sie nicht, neu zu starten;/etc/init.d/monit restart
).Sie können die Ausgabe dann mit erfassen
tail -f /var/log/monit.log
[CEST Jun 4 21:10:42] info : Starting Monit 5.17.1 daemon with http interface at [*]:2812 [CEST Jun 4 21:10:42] info : Starting Monit HTTP server at [*]:2812 [CEST Jun 4 21:10:42] info : Monit HTTP server started [CEST Jun 4 21:10:42] info : 'ocean' Monit 5.17.1 started [CEST Jun 4 21:10:42] debug : Sending Monit instance changed notification to [email protected] [CEST Jun 4 21:10:42] debug : Trying to send mail via smtp.sendgrid.net:587 [CEST Jun 4 21:10:43] debug : Processing postponed events queue [CEST Jun 4 21:10:43] debug : 'rootfs' succeeded getting filesystem statistics for '/' [CEST Jun 4 21:10:43] debug : 'rootfs' filesytem flags has not changed [CEST Jun 4 21:10:43] debug : 'rootfs' inode usage test succeeded [current inode usage=8.5%] [CEST Jun 4 21:10:43] debug : 'rootfs' space usage test succeeded [current space usage=59.6%] [CEST Jun 4 21:10:43] debug : 'ws.example.com' succeeded testing protocol [WEBSOCKET] at [ws.example.com]:80/faye [TCP/IP] [response time 114.070 ms] [CEST Jun 4 21:10:43] debug : 'ws.example.com' connection succeeded to [ws.example.com]:80/faye [TCP/IP]
quelle
monit -c /path/to/your/config -v
quelle
Überwachen Sie standardmäßig Protokolle in Ihrem Systemnachrichtenprotokoll, und Sie können dort überprüfen, was passiert.
Abhängig von Ihrer Konfiguration melden Sie sich möglicherweise auch an einem anderen Ort an
tail -f /var/log/monit
http://mmonit.com/monit/documentation/monit.html#LOGGING
Unter der Annahme von Standardeinstellungen (ab der von mir verwendeten alten Version von Monit) können Sie die Protokolle als solche verfolgen:
CentOS:
tail -f /var/log/messages
Ubuntu:
tail -f /var/log/syslog
Mac OS X
tail -f /var/log/system.log
Windows
Hier sind Drachen
Aber es gibt ein nettes Projekt, das ich gefunden habe, als ich aus krankhafter Neugier nach Möglichkeiten gesucht habe: https://github.com/derFunk/monit-windows-agent
quelle
/var/log/syslog
wo sich var / log / messages befindet?Ja, Monit ist nicht so einfach zu debuggen.
Hier einige Best Practices
Schale:
#!/usr/bin/env bash logfile=/var/log/myjob.log touch ${logfile} echo $$ ": ################# Starting " $(date) "########### pid " $$ >> ${logfile} echo "Command: the-command $@" >> ${logfile} # log your command arguments { exec the-command $@ } >> ${logfile} 2>&1
Das hilft sehr.
Die andere Sache, die mir hilft, ist, monit mit '-v' auszuführen, was Ihnen Ausführlichkeit gibt. Der Workflow ist also
quelle
Sie können auch versuchen, monit validate auszuführen, sobald Prozesse ausgeführt werden, um herauszufinden, ob Probleme auftreten (und manchmal mehr Informationen zu erhalten, als Sie in den Protokolldateien erhalten würden, wenn Probleme auftreten). Darüber hinaus können Sie nicht mehr viel tun.
quelle