Налагодження монітора


79

Я вважаю моніторинг налагодження головним болем. Середовище оболонки Monit в основному не має нічого (немає шляхів або інших змінних середовища). Крім того, немає жодного файлу журналу, який я можу знайти.

Проблема полягає в тому, що якщо команда start або stop у сценарії monit не вдається, важко розібратися, що з нею не так. Часто це не так просто, як просто запустити команду на оболонці, оскільки середовище оболонки відрізняється від середовища оболонки monit.

Які деякі методи використовують люди для налагодження конфігурацій монітора?

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


Я виявив, що Monit має лісозаготівлі. mmonit.com/monit/documentation/monit.html На жаль, це не так детально, як хотілося б.
Brian Takita

Відповіді:


94

У мене була та сама проблема. Використання багатослівного варіанту командного рядка monit трохи допомагає, але я знайшов найкращий спосіб створити середовище, максимально схоже на середовище 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) або пов'язані з дозволами. Слід пам’ятати, що моніт, як правило, працює як root.

Крім того, якщо ви використовуєте as uid myusernameу своєму конфігурі monit, вам слід перейти до користувача myusernameперед проведенням тесту.

Я сподіваюся, що це допоможе.


Дякую, це корисно. Але як змінити моє ім’я, не втягуючи їхнє середовище?
Нільс,

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

2
@ s01ipsist це повинно бутиsu myusername
Michał Szajbe

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# ВХІД

Припускаючи за замовчуванням (як і в будь-якій старій версії monit, яку я використовую), ви можете обробити журнали як такі:

CentOS:

tail -f /var/log/messages

Ubuntu:

tail -f /var/log/syslog

Mac OSX

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

RHL і centos - tail-f / var / log /
monit

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

Це дуже допомагає.

Інше, що я вважаю, що допомагає, це запустити моніт з '-v', що надає вам багатослів'я. Отже, робочий процес є

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

0

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.