2010-07-28 4 views
67

디버깅 모드가 큰 고통을 안고 있습니다. Monit의 셸 환경에는 기본적으로 아무 것도 없습니다 (경로 또는 다른 환경 변수 없음). 또한 찾을 수있는 로그 파일이 없습니다.디버깅 모드

문제는 monit 스크립트의 시작 또는 중지 명령이 실패 할 경우 문제가 무엇인지 식별하기가 어렵다는 것입니다. 셸 환경이 monit 쉘 환경과 다르므로 쉘에서 명령을 실행하는 것만 큼 간단하지 않은 경우가 많습니다.

사람들이 monit 구성을 디버깅하는 데 사용하는 몇 가지 기술은 무엇입니까?

예를 들어, 스크립트를 테스트하기 위해 monit 쉘을 사용하거나, 무엇이 잘못되었는지를 로그 파일을 통해 확인할 수 있습니다.

+0

내가 그 MONIT이 시설을 기록했다 찾았어요를 캡처 할 수 있습니다. http://mmonit.com/monit/documentation/monit.html 불행히도, 내가 원하는 것만 큼 세부적인 것은 아닙니다. –

답변

87

동일한 문제가있었습니다. 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) 또는 허가 관련있는 것으로 나타났습니다. monit은 일반적으로 root로 실행된다는 것을 기억해야합니다.

또한 as uid myusername을 monit 구성으로 사용하는 경우 테스트를 수행하기 전에 사용자 myusername으로 변경해야합니다.

도움이 되었기를 바랍니다.

+0

감사합니다. 도움이됩니다. 그러나 환경을 끌어 들이지 않고 myusername으로 어떻게 변경합니까? – Nils

+0

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

+2

@ s01ipsist이 파일은'su myusername'이어야합니다. –

0

프로세스가 실행되면 확인을 실행하여 문제가있는 경우 해당 프로세스를 찾아서 시도해 볼 수 있습니다. 문제가 발생하면 로그 파일에 기록하는 것보다 많은 정보를 얻을 수도 있습니다. 그 너머에는 더 이상 할 수있는 것이 없습니다.

34

모든 것을 처리하기 전에 항상 conf를 확인하고 프로세스를 손으로 모니터링하십시오. systat (1), top (1) 및 ps (1)는 리소스 사용 및 제한을 파악하는 데 사용하는 친구입니다. 모니터링하는 프로세스를 아는 것도 중요합니다.

시작 스크립트 및 정지 스크립트와 관련하여 출력을 리디렉션하고 환경 및 기타 변수를 검사하기 위해 래퍼 스크립트를 사용합니다. 이런 식으로 뭔가 : MONIT에서 다음

$ 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 

:

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" 

당신은 여전히 ​​프로세스 정보를 정기적으로, ID, 시스템 자원 제한 같은 래퍼에서 당신이 원하는 정보를 정기적으로 파악해야 등

+2

이 디버깅 제안을 주셔서 감사합니다! –

+0

@billitch monit-wrapper의 가장 좋은 점은 결과 로그 파일 **에 실제로 문제가 발생했다는 오류 메시지 **가 포함되어 있다는 것입니다 (예 : 실행 파일을 찾을 수 없음). 아주 좋은 제안과 고통의 전체 힙을 저장했습니다. – ChrisW

2

기본적으로, monit은 시스템 메시지 로그에 로그를 남기므로 모니터가 무슨 일이 일어나고 있는지 확인할 수 있습니다.

또한

, 사용자의 설정에 따라, 당신은, 당신이 꼬리를 할 수있는 (내가 사용 MONIT의 오래된 어떤 버전으로) 기본값을 가정하면 다른 장소

tail -f /var/log/monit 

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

에 로그인 할 수 있습니다 같은 로그 :

에 CentOS :

tail -f /var/log/messages 

우분투 :

tail -f /var/log/syslog 

맥 OSX

tail -f /var/log/system.log 

윈도우 여기

될 드래곤

하지만 FOU 니토 프로젝트가있다 차 동안 병적 인 호기심이 작업을 수행하는 방법에 대한 검색 : https://github.com/derFunk/monit-windows-agent

+0

이 파일은 내 monit 설정에서 볼 수 없습니다. – weisjohn

+0

UNIX 시스템을 사용하고 계십니까?/var/log/messages는 많은 UNIX 시스템에서 시스템 로깅을위한 표준 장소입니다. – WattsInABox

+0

우분투 12.04 LTS에 있습니다. 나는 나의 monit 질문을 고쳤다. .. 내가 그것을 가지지 않고있는 별난 어느 쪽의 방법이라도. – weisjohn

8

monit -c /path/to/your/config -v

1

그래 MONIT 디버그에 너무 쉬운 일이 아닙니다.

여기에 몇 가지 모범 사례

  • 는 로그 파일을 설정하는 래퍼 스크립트를 사용합니다. 당신이 그것을에있는 동안 거기에 당신의 명령 인수 쓰기 :

쉘 :

많은 도움이
#!/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 

.

내가 도움이되는 다른 점은 '-v'를 사용하여 monit을 실행하는 것입니다. 그러면 좀 더 자세한 정보를 얻을 수 있습니다. 따라서 워크 플로우는

  • 쉘에서 작업 래퍼 다음
  • 시도하고 그 다음 시도 "-v"
  • 하여 명령 줄에서 실행, MONIT에서 가야 "내-래퍼 sudo는"GET 백그라운드에서 실행되는 monit에서부터 시작하십시오.
2

당신은 /etc/default/monit-MONIT_OPTS="-v"를 추가하여 자세한/디버그 모드에서 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]