Me parece que la depuración de monit es un gran problema. El entorno de shell de Monit básicamente no tiene nada (ni rutas ni otras variables de entorno). Además, no hay ningún archivo de registro que pueda encontrar.
El problema es que, si falla el comando de inicio o parada en el script monit, es difícil discernir qué es lo que está mal. Muchas veces no es tan simple como ejecutar el comando en el shell porque el entorno del shell es diferente del entorno del shell monit.
¿Cuáles son algunas de las técnicas que utiliza la gente para depurar configuraciones de monit?
Por ejemplo, me encantaría tener un shell monit, para probar mis scripts o un archivo de registro para ver qué salió mal.
Respuestas:
Tuve el mismo problema. Usar la opción de línea de comandos detallada de monit ayuda un poco, pero descubrí que la mejor manera era crear un entorno lo más similar posible al entorno de monit y ejecutar el programa de inicio / parada desde allí.
# 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 $
He descubierto que los problemas más comunes están relacionados con las variables de entorno (especialmente
PATH
) o con los permisos. Debe recordar que monit normalmente se ejecuta como root.Además, si lo usa
as uid myusername
en su configuración de monit, debe cambiar a usuariomyusername
antes de realizar la prueba.Espero que eso ayude.
fuente
su myusername
Asegúrese siempre de verificar su configuración y monitorear sus procesos manualmente antes de dejar que monit se encargue de todo. systat (1), top (1) y ps (1) son tus amigos para averiguar el uso y los límites de los recursos. Conocer el proceso que supervisa también es fundamental.
Con respecto a los scripts de inicio y detención, utilizo un script contenedor para redirigir la salida e inspeccionar el entorno y otras variables. Algo como esto :
$ 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
Entonces 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"
Aún tiene que averiguar qué información desea en el contenedor, como información de proceso, identificación, límites de recursos del sistema, etc.
fuente
start program=/bin/bash -c "..."
Puede iniciar Monit en modo detallado / depuración agregando
MONIT_OPTS="-v"
a/etc/default/monit
(no olvide reiniciar;/etc/init.d/monit restart
).Luego puede capturar la salida usando
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]
fuente
monit -c /path/to/your/config -v
fuente
De forma predeterminada, supervise los registros en el registro de mensajes de su sistema y puede verificar allí qué está sucediendo.
Además, dependiendo de su configuración, es posible que esté iniciando sesión en un lugar diferente
tail -f /var/log/monit
http://mmonit.com/monit/documentation/monit.html#LOGGING
Suponiendo valores predeterminados (a partir de cualquier versión anterior de monit que esté usando), puede seguir los registros como tal:
CentOS:
tail -f /var/log/messages
Ubuntu:
tail -f /var/log/syslog
Mac OS X
tail -f /var/log/system.log
Ventanas
Aquí hay dragones
Pero hay un proyecto genial que encontré mientras buscaba cómo hacer esto por curiosidad mórbida: https://github.com/derFunk/monit-windows-agent
fuente
/var/log/syslog
dónde está var / log / messages?Sí, monit no es demasiado fácil de depurar.
Aquí algunas mejores prácticas
cáscara:
#!/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
Eso ayuda mucho.
La otra cosa que encuentro que ayuda es ejecutar monit con '-v', lo que le da verbosidad. Entonces el flujo de trabajo es
fuente
También puede intentar ejecutar monit validate una vez que los procesos se estén ejecutando, para intentar averiguar si alguno de ellos tiene problemas (y, a veces, obtener más información de la que obtendría en los archivos de registro si hay algún problema). Más allá de eso, no hay mucho más que puedas hacer.
fuente