Отладка
Я считаю, что отладочный monit является серьезной болью. В среде оболочки Monit в основном ничего нет (нет путей или других переменных среды). Кроме того, я не могу найти файл журнала.
Проблема в том, что если команда start или stop в monit script не работает, трудно определить, что с ней не так. Часто это не так просто, как просто запуск команды в оболочке, потому что среда оболочки отличается от среды оболочки monit.
Каковы некоторые методы, которые люди используют для отладки конфигураций monit?
Например, я был бы рад иметь оболочку monit, проверить мои скрипты или файл журнала, чтобы узнать, что пошло не так.
Ответы
Ответ 1
У меня была такая же проблема. Использование опции командной строки monit verbose помогает немного, но я нашел, что лучший способ - создать среду как можно более похожую на среду monit и запустить программу запуска/остановки оттуда.
# 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
.
Я надеюсь, что это поможет.
Ответ 2
Обязательно всегда дважды проверяйте свой конфиг и контролируйте свои процессы вручную, прежде чем позволить monit обрабатывать все. systat (1), top (1) и ps (1) - ваши друзья, чтобы выяснить использование ресурсов и ограничения. Знание процесса, который вы контролируете, тоже важно.
Что касается сценариев начала и остановки, я использую оболочку script для перенаправления вывода и проверки среды и других переменных. Что-то вроде этого:
$ 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"
Вам все равно нужно выяснить, какую информацию вы хотите в обертке, например информацию о технологиях, идентификатор, системные ресурсы и т.д.
Ответ 3
monit -c /path/to/your/config -v
Ответ 4
По умолчанию 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, который я нашел во время поиска того, как это сделать из-за болезненного любопытства: https://github.com/derFunk/monit-windows-agent
Ответ 5
Вы можете запустить Monit в режиме verbose/debug, добавив 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]
Ответ 6
Да, monit не слишком легко отлаживать.
Вот несколько лучших практик
- используйте обертку script, которая устанавливает ваш файл журнала. Напишите свои аргументы команды там, пока вы на нем:
оболочки:
#!/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 my-wrapper"
- затем попробуйте сделать это с monit, запустите из командной строки с помощью "-v"
- затем попробуйте сделать это с monit, работая в фоновом режиме.
Ответ 7
Вы также можете попробовать выполнить monit validate после запуска процессов, чтобы попытаться выяснить, есть ли у кого-либо из них проблемы (а иногда и получить больше информации, чем вы могли бы получить в файлах журнала, если есть какие-либо проблемы). Помимо этого, вы не можете сделать больше.