[server] 무언가가 죽었다고 생각하기 전에 monit을 더 오래 기다리십시오

프로그램 (Resque)을 시작하려고하는데 pidfile이 작성되기까지 약간의 시간이 걸립니다. 따라서 Monit은 프로그램이 시작되지 않았다고 생각하고 첫 번째 pidfile이 작성되기 전에 하나 이상의 프로그램을 시작한다고 생각합니다.

이 과정에서 Monit이 다시 확인하는 시간을 어떻게 지연합니까? 아니면 다른 방법으로이 문제를 해결해야합니까?



답변

이 과정에서 Monit이 다시 확인하는 시간을 어떻게 지연합니까?


달성하려는 작업 은 monit의 ” SERVICE POLL TIME “기능을 통해 수행 할 수 있습니다.

Monit 문서에 따르면

서비스는 다음과 같이 정기적으로 점검됩니다.

set daemon n

성명서. 서비스간에 종속성이 설정되어있는 경우를 제외하고 .monitrc 파일에 기록 된 순서와 동일한 순서로 검사가 수행됩니다.이 경우 서비스 계층 구조가 검사 순서를 대체 할 수 있습니다.

서비스 폴링을 사용자 정의하는 방법 중 하나는

  1. 폴링주기 길이 배수에 따른 사용자 정의 간격

모든 [번호] 사이클

예:

check process resque with pidfile /your/app/root/tmp/pid/resque.pid
   every 2 cycles

아니면 다른 방법으로이 문제를 해결해야합니까?


monit은 매우 가벼운 데몬이지만 결국 GOD로 설정되었으므로 monit을 사용하여 resque 작업을 모니터링하려고 처음 시도했습니다. 나는 알고있다. 나는 GOD가 monit에 비해 더 많은 자원을 필요로한다는 것을 알고있다. 그러나 resque의 경우에 우리는 그것이 좋은 일치를 발견했다.


답변

당신은 기본값과 다른 간격으로 특정 서비스를 확인할 수 있습니다 …

Monit 문서에서 SERVICE POLL TIME 을 참조하십시오 .

Resque 프로그램의 예는 다른 횟수의 사이클을 확인하는 것입니다.

check process resque with pidfile /var/run/resque.pid
   every 5 cycles

또는 예제 섹션에서 :

Some servers are slow starters, like for example Java based Application Servers.
So if we want to keep the poll-cycle low (i.e. < 60 seconds) but allow some services to take its time to start,
the every statement is handy:

 check process dynamo with pidfile /etc/dynamo.pid every 2 cycles
       start program = "/etc/init.d/dynamo start"
       stop program  = "/etc/init.d/dynamo stop"
       if failed port 8840 then alert

또는 cron 스타일 검사를 활용할 수 있습니다.

check process resque with pidfile /var/run/resque.pid
   every 10 * * * *

또는 느린 시작이 발생하면 service start 명령에서 시간 초과를 연장 할 수 있습니다.

check process apache with pidfile /var/run/httpd.pid
       start program = "/etc/init.d/httpd start" with timeout 90 seconds


답변

X 시간 동안 바로 실패한 것이 있는지 확인할 수도 있습니다.

 if failed
    port 80
    for 10 cycles
 then alert

또는 Y 설문 조사 내 X 회 :

 if failed
    port 80
    for 3 times within 5 cycles
 then alert

아니면 둘다:

 check filesystem rootfs with path /dev/hda1
  if space usage > 80% for 5 times within 15 cycles then alert
  if space usage > 90% for 5 cycles then exec '/try/to/free/the/space'

( 여기에서 )


답변

우리 팀원은 monit이 자주 (매분) 점검 할 수 있는 다소 영리한 솔루션을 제안 했지만 서비스를 다시 시작하려고 시도하면 (~ 10 분 소요) 지정된 유예 기간을 기다렸다가 시작하려고 시도합니다. 다시.

이렇게하면 수표 사이에 너무 오래 대기하는 것을 방지 할 수 있으며, 느린 시작과 결합하면 고객에게 훨씬 큰 영향을 미칩니다. monit이 이미 마지막 실패에서 조치를 취하고 있음을 나타내는 플래그 역할을하는 중간 스크립트를 사용하여 작동합니다.

check host bamboo with address bamboo.mysite.com
   if failed
           port 443 type tcpSSL protocol http
           and status = 200
           and request /about.action
            for 3 cycles
   then exec "/bin/bash -c 'ps -ef | grep -v "$$" | grep -v "grep" | grep restartBamboo.sh >/dev/null 2>&1; if [ $? -ne 0 ]; then /opt/monit/scripts/restartBamboo.sh; fi'"

bamboo (느린 시작 웹 앱)이 3 분 연속으로 다운 된 경우 재시작 스크립트가 아직 실행되지 않은 경우에만 BUT을 다시 시작하십시오.

호출되는 스크립트에는 지정된 절전 모드가 있습니다. 대기 시간이 길고 서비스 시작 시간이 가장 느립니다 (우리의 경우 ~ 10으로 끝날 것으로 예상되므로 15 일 동안 절전 모드로 전환)

#!/bin/bash
echo "Retarting bambo by calling init.d"
/etc/init.d/bamboo stop
echo "Stopped completed, calling start"
/etc/init.d/bamboo start
echo "Done restarting bamboo, but it will run in background for sometime before available so, we are sleeping for 15 minutes"
sleep 900
echo "done sleeping"


답변

현재 Monit (5.16) 버전은 다음 구문을 사용하여 시작 스크립트에 대한 시간 초과를 지원합니다.

 <START | STOP | RESTART> [PROGRAM] = "program"
    [[AS] UID <number | string>]
    [[AS] GID <number | string>]
    [[WITH] TIMEOUT <number> SECOND(S)]

워드 프로세서 상태 :

프로세스 점검의 경우, Monit은 시작 / 중지 조치가 완료 될 때까지 최대 30 초 동안 기다렸다가 포기하고 오류를보고합니다. TIMEOUT 옵션을 사용하여이 시간 초과를 무시할 수 있습니다.

“시간 초과”값이 수행 할 작업입니다.


답변