Monit de depuración


79

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.


Encontré que monit tiene instalaciones de registro. mmonit.com/monit/documentation/monit.html Desafortunadamente, no es tan detallado como me gustaría.
Brian Takita

Respuestas:


94

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 myusernameen su configuración de monit, debe cambiar a usuario myusernameantes de realizar la prueba.

Espero que eso ayude.


Gracias, esto es útil. Pero, ¿cómo se cambia a myusername sin tener que ingresar también en su entorno?
Nils

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

2
@ s01ipsist esto debería sersu myusername
Michał Szajbe

1
este es un gran consejo, en general
Robert Riedl

36

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.


2
¡Muchas gracias por esta sugerencia de depuración!
Dr Nic

1
Lo excelente de @billitch monit-wrapper es que el archivo de registro resultante en realidad incluye el mensaje de error que está causando su problema (por ejemplo, no puede encontrar un ejecutable) que monit se traga. Una muy buena sugerencia y me ha ahorrado un montón de dolor.
ChrisW

tuve que usarstart program=/bin/bash -c "..."
Mirko

13

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

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


No veo este archivo en mi configuración de monit.
weisjohn

¿Estás en una máquina UNIX? / var / log / messages es un lugar estándar para el registro del sistema en muchas máquinas UNIX.
WattsInABox

Estoy en Ubuntu 12.04 LTS. Me he fijado mis preguntas monit, aunque ... extraño de cualquier manera que yo no lo tengo ...
weisjohn

4
No completamente. Cada distribución de UNIX puede registrar mensajes estándar donde los desarrolladores elijan. Aparentemente, ubuntu se registra en /var/log/syslog dónde está var / log / messages?
WattsInABox

RHL y centos son tail-f / var / log / monit
JJ_Coder4Hire

2

Sí, monit no es demasiado fácil de depurar.

Aquí algunas mejores prácticas

  • use una secuencia de comandos contenedora que configure su archivo de registro. Escriba sus argumentos de comando allí mientras lo hace:

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

  • haga que su envoltorio funcione desde el shell "sudo my-wrapper"
  • luego intente hacerlo funcionar desde monit, ejecute desde la línea de comando con "-v"
  • luego intente ponerlo en marcha desde monit, ejecutándose en segundo plano.

0

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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.