何かが死んでいると考える前に、モニターをより長く待機させる


20

プログラム(Resque)を起動しようとしていますが、pidfileが書き込まれるまでに少し時間がかかります。したがって、Monitは、プログラムが開始されていないと考え、最初のプログラムのpidfileが書き込まれる前に、1つまたは2つのプログラムをさらに開始すると思います。

このプロセスのために、Monitが再びチェックする時間を遅らせるにはどうすればよいですか?または、これを別の方法で解決する必要がありますか?


以下に新しい回答を追加しました。チェックの間隔を長くすることで、遅いサービスの衝突を防ぐことができますが、顧客にとっては非常に悪い経験になり得ます。
エディ

回答:


10

このプロセスのために、Monitが再びチェックする時間を遅らせるにはどうすればよいですか?


あなたが達成しようとしていることは、monitの「サービスポーリング時間」機能を介して行うことができます

Monitのドキュメントによると

サービスは、

set daemon n

ステートメント。チェックは、サービス間に依存関係が設定されている場合を除き、.monitrcファイルに書き込まれたのと同じ順序で実行されます。その場合、サービス階層はチェックの順序を変更する場合があります。

サービスポーリングをカスタマイズする方法の1つは

  1. ポーリングサイクルの長さに基づくカスタム間隔

すべての[number]サイクル

例:

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

または、これを別の方法で解決する必要がありますか?


monitは非常に軽量なデーモンですが、最終的にはGODで解決するため、最初にmonitを使用してレスクジョブを監視しようとしました。私は知っている、私は神がmonitと比較してより多くのリソースを必要とすることを知っているが、resqueの場合にはそれが良いマッチであることがわかった。


ありがとう!最終的にxサイクルごとに使用しました。私はちょうど私のために働いた数を見つけました。
ラモンタヤグ

19

デフォルトとは異なる間隔で特定のサービスを確認できます...

Monitのドキュメントの「サービスのポーリング時間」を参照してください。

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まさに私が望んでいたものでした。ありがとう。
アンドリュー

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が頻繁に(1分ごとに)チェックできるようにするかなり賢いソリューションを思い付きましたが、サービスを再起動しようとすると(〜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(スロースタートWebアプリ)が3分間連続してダウンした場合は、再起動します。ただし、再起動スクリプトがまだ実行されていない場合のみ。

呼び出されるスクリプトには、指定されたスリープ時間があります。このスリープは、サービスの最も長い開始時間を待機します(この例では、〜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秒待機してから、givingめてエラーを報告します。TIMEOUTオプションを使用して、このタイムアウトをオーバーライドできます。

これが「タイムアウト」値の機能です。


実際の起動に長い時間がかかる場合、タイムアウトの延長は機能しますが、元の質問では、プログラムはすぐに起動した(つまり戻った)ように聞こえますが、すぐにPIDを書きませんでした。再起動後、指定された時間サービスをチェックしないようにmonitに指示する方法はありますか?
ピーターバーモント

これtimeoutは、起動と再起動の両方に適用されます。私の知る限り、Monitがa)実行中、b)予想されるPIDファイルが作成され、c)予想されるPIDのプロセスが現在実行されていることを確認するまでに遅延が発生します。指定されたアプリケーションが実際のプロセスを分岐したスクリプトであり、プロセスで何が起こっているのか知らずに戻ってきた場合、動作させるためにいくつかの問題がありました。この場合、動作させるのは苦痛でした。
jeteon

システムが再起動され、サービスが開始されるのはどうですか?各チェックの初期遅延を秒単位で指定する方法はありますか?開始/停止ステートメントのないパッシブチェック
Massimo

その場合、あなたが探してSTART DELAYいるかもしれないと信じています。
jeteon
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.