Подтвердить что ты не робот

Отладка

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

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

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

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

4b9b3361

Ответ 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 после запуска процессов, чтобы попытаться выяснить, есть ли у кого-либо из них проблемы (а иногда и получить больше информации, чем вы могли бы получить в файлах журнала, если есть какие-либо проблемы). Помимо этого, вы не можете сделать больше.