2010-07-28 6 views
67

Я нахожу, что отладочный monit является главной болью. В среде оболочки Monit в основном ничего нет (нет путей или других переменных среды). Кроме того, я не могу найти файл журнала.Отладка monit

Проблема в том, что если команда запуска или остановки в сценарии monit терпит неудачу, трудно понять, что с ней не так. Часто это не так просто, как просто запуск команды в оболочке, потому что среда оболочки отличается от среды оболочки monit.

Каковы некоторые методы, которые люди используют для отладки конфигураций monit?

Например, я был бы рад иметь оболочку monit, проверить мои сценарии или файл журнала, чтобы узнать, что пошло не так.

+0

Я нашел, что монит имеет регистрации объектов. http://mmonit.com/monit/documentation/monit.html К сожалению, это не так подробно, как хотелось бы. –

ответ

87

У меня была такая же проблема. Использование verbose опции командной строки monit немного помогает, но я нашел, что лучший способ - создать среду как можно более похожую на среду monit и запустить программу start/stop оттуда.

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

Я нашел наиболее распространенные проблемы, связанные с переменной окружения (особенно PATH) или разрешения связанных. Вы должны помнить, что monit обычно работает как root.

Также, если вы используете as uid myusername в своей конфигурации monit, то перед проведением теста вы должны перейти на пользователя myusername.

Я надеюсь, что это поможет.

+0

Спасибо, это полезно. Но как вы переходите на myusername, не затягивая их среду? – Nils

+0

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

+2

@ s01ipsist это должно быть 'su myusername' –

0

Вы также можете попробовать выполнить monit validate после запуска процессов, чтобы попытаться выяснить, есть ли у них какие-либо проблемы (а иногда и получить больше информации, чем вы могли бы получить в файлах журнала, если есть какие-либо проблемы). Помимо этого, вы можете сделать гораздо больше.

34

Обязательно всегда проверяйте свой конфиг и контролируйте свои процессы вручную, прежде чем разрешить контролировать все. systat (1), top (1) и ps (1) - ваши друзья, чтобы выяснить использование ресурсов и ограничения. Также важно знать процесс, который вы контролируете.

Что касается сценариев начала и конца, я использую сценарий оболочки для перенаправления вывода и проверки среды и других переменных. Что-то вроде этого:

$ cat monit-wrapper.sh 

#!/bin/sh 
{ 
    echo "MONIT-WRAPPER date" 
    date 
    echo "MONIT-WRAPPER env" 
    env 
    echo "MONIT-WRAPPER [email protected]" 
    [email protected] 
    R=$? 
    echo "MONIT-WRAPPER exit code $R" 
} >/tmp/monit.log 2>&1 

Тогда в 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" 

Вы все еще должны выяснить, что информация о вы хотите в обертке, как процесс Infos, ид, лимиты ресурсов системы и т.д.

+2

Большое спасибо за это предложение отладки! –

+0

Очень хорошая вещь в @billitch monit-wrapper заключается в том, что результирующий файл журнала ** на самом деле содержит сообщение об ошибке **, которое вызывает вашу проблему (например, не может найти исполняемый файл), который monit проглатывает. Очень хорошее предложение и спасло мне целую кучу боли. – ChrisW

2

По умолчанию monit регистрируется в вашем системном сообщении, и вы можете проверить его, чтобы узнать, что происходит.

Кроме того, в зависимости от вашей конфигурации, вы можете использовать для входа в другое место

tail -f /var/log/monit 

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

Если предположить, что по умолчанию (как из любой старой версии Monit я использую), вы можете хвост журналы, как например:

CentOS:

tail -f /var/log/messages 

Ubuntu:

tail -f /var/log/syslog 

Mac OSX

tail -f /var/log/system.log 

Окна

Здесь драконы

Но есть Neato проект, который я Fou го во время поиска, как это сделать из нездорового любопытства: https://github.com/derFunk/monit-windows-agent

+0

Я не вижу этот файл в моей настройке monit. – weisjohn

+0

Вы на машине UNIX?/var/log/messages - это стандартное место для системного ведения журналов на многих машинах UNIX. – WattsInABox

+0

Я на Ubuntu 12.04 LTS. Я исправил свои вопросы о монтировании, хотя ... странно, что у меня его нет ... – weisjohn

1

Да монит не слишком легко отлаживать.

Вот несколько лучших практик

  • использовать сценарий оболочки, который устанавливает свой файл журнала. Запишите свои аргументы команды там, пока вы на него:

оболочки:

#!/usr/bin/env bash 

logfile=/var/log/myjob.log 
touch ${logfile} 
echo $$ ": ################# Starting " $(date) "########### pid " $$ >> ${logfile} 

echo "Command: the-command [email protected]" >> ${logfile} # log your command arguments 
{ 
    exec the-command [email protected] 
} >> ${logfile} 2>&1 

Это очень помогает.

Другая вещь, которую я нахожу, помогает использовать monit с '-v', что дает вам многословие. Таким образом, рабочий процесс является

  • получить вашу обертка работает из командной строки «SUDO моей-обертки»
  • затем попытаться получить это происходит от Monit, запустите из командной строки с «-v»
  • попробуйте и получить его от monit, работая в фоновом режиме.
2

Вы можете начать Monit в расширенном режиме/отладки путем добавления MONIT_OPTS="-v" к /etc/default/monit (не забудьте перезапустить; /etc/init.d/monit restart).

Вы можете захватить вывод, используя 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] 
Смежные вопросы