Мониторинг отладки

79

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

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

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

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

Брайан Такита
источник
Я обнаружил, что в мониторе есть средства регистрации. mmonit.com/monit/documentation/monit.html К сожалению, это не так подробно, как хотелось бы.
Брайан Такита

Ответы:

94

У меня была такая же проблема. Использование подробного параметра командной строки 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, вам следует перейти на user myusernameперед проведением теста.

Надеюсь, это поможет.

Джеймс Мид
источник
Спасибо, это полезно. Но как перейти на myusername, не втягивая и их среду?
Nils
@Chocohound $ sudo myusername; $ env -i ПУТЬ = / bin: / usr / bin: / sbin: / usr / sbin / bin / sh
s01ipsist
2
@ s01ipsist это должно бытьsu myusername
Михал Шайбе
1
это отличный совет, в целом
Роберт Ридл
36

Обязательно дважды проверяйте свою конфигурацию и отслеживайте свои процессы вручную, прежде чем позволить monit все обрабатывать. 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 $@"
  $@
  R=$?
  echo "MONIT-WRAPPER exit code $R"
} >/tmp/monit.log 2>&1

Затем в мониторе:

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"

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

тодг
источник
2
Большое спасибо за это предложение по отладке!
Dr Nic
1
Самое замечательное в @billitch monit-wrapper заключается в том, что результирующий файл журнала фактически включает сообщение об ошибке , которое вызывает вашу проблему (например, не может найти исполняемый файл), которое monit поглощает. Очень хорошее предложение, избавившее меня от кучи боли.
ChrisW
я должен был использоватьstart program=/bin/bash -c "..."
Мирко
13

Вы можете запустить 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 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

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

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

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

tail -f /var/log/system.log

Windows

Вот драконы

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

Вт
источник
Я не вижу этого файла в настройках моего монитора.
weisjohn
Вы используете UNIX-машину? / var / log / messages - стандартное место для системного журнала на многих машинах UNIX.
WattsInABox
Я использую Ubuntu 12.04 LTS. Я исправил свои вопросы по мониторингу ... В любом случае странно, что у меня его нет ...
weisjohn
4
Не совсем. Каждый дистрибутив UNIX может регистрировать стандартные сообщения везде, где захотят разработчики. Судя по всему, в ubuntu логи, /var/log/syslog где находится var / log / messages?
WattsInABox
БРЗ и centos - это tail-f / var / log / monit
JJ_Coder4Hire
2

Да, monit не так-то просто отлаживать.

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

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

оболочка:

#!/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

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

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

  • заставить вашу оболочку работать из оболочки "sudo my-wrapper"
  • затем попробуйте запустить его из monit, запустите из командной строки с "-v"
  • затем попробуйте запустить его из monit, работая в фоновом режиме.
Брет Вайнрауб
источник
0

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

голубика
источник