Debugging-Überwachung


79

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.


Ich habe festgestellt, dass Monit über Protokollierungsmöglichkeiten verfügt. mmonit.com/monit/documentation/monit.html Leider ist es nicht so detailliert, wie ich es gerne hätte.
Brian Takita

Antworten:


94

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 myusernamein Ihrer Monit-Konfiguration verwenden, sollten Sie myusernamevor dem Ausführen des Tests zum Benutzer wechseln .

Ich hoffe das hilft.


Danke, das ist hilfreich. Aber wie kann man zu myusername wechseln, ohne auch deren Umgebung einzubeziehen?
Nils

@Chocohound $ sudo myusername; $ env -i PATH = / bin: / usr / bin: / sbin: / usr / sbin / bin / sh
s01ipsist

2
@ s01ipsist das sollte seinsu myusername
Michał Szajbe

1
Dies ist im Allgemeinen ein großartiger Tipp
Robert Riedl

36

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.


2
Vielen Dank für diesen Debugging-Vorschlag!
Dr. Nic

1
Das sehr gute an @billitch monit-wrapper ist, dass die resultierende Protokolldatei tatsächlich die Fehlermeldung enthält , die Ihr Problem verursacht (z. B. keine ausführbare Datei finden kann), die monit verschluckt. Ein sehr guter Vorschlag und hat mir einen ganzen Haufen Schmerz erspart.
ChrisW

Ich musste verwendenstart program=/bin/bash -c "..."
Mirko

12

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 monit@example.io
[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]


5

Ü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


Ich sehe diese Datei nicht in meinem Monit-Setup.
Weijohn

Sie befinden sich auf einem UNIX-Computer? / var / log / messages ist ein Standardort für die Systemprotokollierung auf vielen UNIX-Computern.
WattsInABox

Ich bin auf Ubuntu 12.04 LTS. Ich habe meine Monit-Fragen jedoch behoben ... Seltsam, so oder so, dass ich es nicht habe ...
weisjohn

4
Nicht komplett. Jede UNIX-Distribution kann Standardnachrichten protokollieren, wo immer die Entwickler dies wünschen. Anscheinend protokolliert Ubuntu, /var/log/syslog wo sich var / log / messages befindet?
WattsInABox

RHL und Centos ist tail-f / var / log / monit
JJ_Coder4Hire

2

Ja, Monit ist nicht so einfach zu debuggen.

Hier einige Best Practices

  • Verwenden Sie ein Wrapper-Skript, das Ihre Protokolldatei einrichtet. Schreiben Sie dort Ihre Befehlsargumente ein, während Sie gerade dabei sind:

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

  • Bringen Sie Ihren Wrapper mit der Shell "sudo my-wrapper" zum Laufen.
  • Versuchen Sie dann, es von monit aus in Gang zu bringen, und führen Sie es mit "-v" über die Befehlszeile aus.
  • Versuchen Sie dann, es von monit aus in Gang zu bringen.

0

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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.