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


20

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

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


아래에 새로운 답변을 추가했습니다. 점검 간격이 길어질수록 느린 서비스 충돌이 발생하지 않지만 고객에게는 실제로 나쁜 경험이 될 수 있습니다.
Eddie

답변:


10

이 과정에서 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의 경우에 우리는 그것이 좋은 일치를 발견했다.


감사! 모든 x주기를 사용했습니다. 방금 나를 위해 일한 숫자를 찾았습니다.
Ramon Tayag

19

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

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

같은 대답입니까?
ewwhite

2
with timeout 90 seconds내가 원하는 바로 그 것이었다. 감사.
Andrew

1
타임 아웃 및 cron 스타일 포함 이것은 가장 정확하고 완전한 답변입니다.
RCross

9

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'

( 여기에서 )


1
기본 간격을 확인하는 방법을 보여 주지만보다 관대하게 조치를 취하는 방법을 보여주기 때문에 이것은 또 다른 좋은 대답입니다.
RCross

2

우리 팀원은 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"

2

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

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

워드 프로세서 상태 :

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

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


실제 시작 시간이 오래 걸리는 경우 시간 초과를 연장해도 원래 질문에서 프로그램이 빨리 시작된 것처럼 들리지만 (즉, 반환 된) PID를 즉시 기록하지는 않습니다. 다시 시작한 후 지정된 시간 동안 서비스를 확인하지 않도록 monit에 지시하는 방법이 있습니까?
PeterVermont

timeout시작되고 다시 시작에 모두 적용해야합니다. 내가 이해하는 한, Monit가 a) 실행 중, b) 예상 PID 파일이 생성되고 c) 예상 PID가있는 프로세스가 현재 실행되고 있는지 확인하기 전에 지연됩니다. 지정된 응용 프로그램이 실제 프로세스를 포크 한 스크립트 일 때 프로세스가 어떻게 진행되는지 알지 못하고 반환되는 문제가있었습니다. 이 경우 작동하도록하는 것은 고통스러운 일이었습니다.
jeteon

시스템이 재부팅되고 서비스가 시작되는 것은 어떻습니까? 각 검사마다 초기 지연을 초 단위로 지정하는 방법이 있습니까? 시작 / 정지 설명없이 수동 점검
Massimo

나는 그런 경우에 당신이 찾고 있을지도 모른다고 믿는다 START DELAY.
jeteon
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.