web-dev-qa-db-fra.com

Débogage de Monit

Je trouve que le débogage de monit est une douleur majeure. L'environnement Shell de Monit ne contient pratiquement rien (pas de chemins ou d'autres variables d'environnement). De plus, je ne trouve aucun fichier journal.

Le problème est que si la commande start ou stop du script monit échoue, il est difficile de discerner ce qui ne va pas. Souvent, ce n'est pas aussi simple que d'exécuter la commande sur le shell, car l'environnement shell est différent de l'environnement shell monit.

Quelles sont les techniques utilisées par les utilisateurs pour déboguer les configurations de monit?

Par exemple, je serais heureux d'avoir un shell Monit, de tester mes scripts ou un fichier journal pour voir ce qui s'est mal passé.

74
Brian Takita

J'ai eu le même problème. L'utilisation de l'option de ligne de commande détaillée de monit aide un peu, mais j'ai trouvé que le meilleur moyen était de créer un environnement aussi similaire que possible à l'environnement monit et d'exécuter le programme start/stop à partir de là.

# 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
$

J'ai trouvé que les problèmes les plus courants sont liés aux variables d'environnement (en particulier PATH) ou liés aux autorisations. Vous devez vous rappeler que monit s'exécute généralement en tant que root.

De plus, si vous utilisez as uid myusername dans votre configuration monit, vous devez alors passer à l'utilisateur myusername avant d'effectuer le test.

J'espère que ça aide.

89
James Mead

Assurez-vous de toujours vérifier votre conf et de surveiller vos processus à la main avant de laisser monit gérer tout. systat (1), top (1) et ps (1) sont vos amis pour déterminer l'utilisation et les limites des ressources. Il est également essentiel de connaître le processus que vous surveillez.

En ce qui concerne les scripts de démarrage et d'arrêt, j'utilise un script wrapper pour rediriger la sortie et inspecter l'environnement et d'autres variables. Quelque chose comme ça :

$ 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

Puis en 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"

Vous devez toujours déterminer quelles informations vous voulez dans l'encapsuleur, comme les informations de processus, l'identifiant, les limites des ressources système, etc.

35
thodg

monit -c /path/to/your/config -v

8
vimdude

Vous pouvez démarrer Monit en mode détaillé/débogage en ajoutant MONIT_OPTS="-v" à /etc/default/monit (n'oubliez pas de redémarrer; /etc/init.d/monit restart).

Vous pouvez ensuite capturer la sortie à l'aide de 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]
6
Oleander

Par défaut, monit enregistre dans votre journal des messages système et vous pouvez y vérifier ce qui se passe.

De plus, selon votre configuration, vous vous connectez peut-être à un autre endroit

tail -f /var/log/monit

http://mmonit.com/monit/documentation/monit.html#LOGGING

En supposant que les valeurs par défaut (quelle que soit l'ancienne version de monit que j'utilise), vous pouvez suivre les journaux en tant que tels:

CentOS:

tail -f /var/log/messages

Ubuntu:

tail -f /var/log/syslog

Mac OSX

tail -f /var/log/system.log

Windows

Voilà des dragons

Mais il y a un projet neato que j'ai trouvé en cherchant comment le faire par curiosité morbide: https://github.com/derFunk/monit-windows-agent

5
WattsInABox

Ouais, monit n'est pas trop facile à déboguer.

Voici quelques bonnes pratiques

  • utilisez un script wrapper qui configure votre fichier journal. Écrivez vos arguments de commande pendant que vous y êtes:

Coquille:

#!/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

Ça aide beaucoup.

L'autre chose que je trouve utile est d'exécuter monit avec '-v', ce qui vous donne de la verbosité. Le flux de travail est donc

  • faire travailler votre wrapper à partir du Shell "Sudo my-wrapper"
  • puis essayez de le faire partir de monit, exécutez à partir de la ligne de commande avec "-v"
  • puis essayez de le faire partir de monit, en cours d'exécution en arrière-plan.
1
Bret Weinraub

Vous pouvez également essayer d'exécuter monit validate une fois que les processus sont en cours d'exécution, pour essayer de savoir si l'un d'eux a des problèmes (et obtenir parfois plus d'informations que vous n'en obtiendriez dans les fichiers journaux en cas de problème). Au-delà de cela, vous ne pouvez pas faire grand-chose de plus.

0
blueberryfields