web-dev-qa-db-ja.com

最初にアラートを出し、後で再起動するようにmonitを取得します

ある種のチェーンアクションをmonitで処理したいと思います。

  • プロセスを確認し、すぐに警告します。
  • 数サイクル後にプロセスを再開します。

私の試み(これまでのところ):

check process myprocess with pidfile /run/my.pid
  start program = "/path/to/binary start" with timeout 60 seconds
  stop program = "/path/to/binary stop" with timeout 60 seconds
  if not exist for 3 cycles then restart
  if not exist then alert
  if 3 restarts within 3 cycles then timeout

PIDの失敗時にアラートを出さず、「実行中」の状態を維持しますが、3サイクル後に再起動します。

check process myprocess with pidfile /run/my.pid
  start program = "/path/to/binary start" with timeout 60 seconds
  stop program = "/path/to/binary stop" with timeout 60 seconds
  if not exist for 3 cycles then restart
  if children < 1 for 1 cycles then alert
  if 3 restarts within 3 cycles then timeout

1未満の子のアラートはありませんが、5以降に再起動します。

monit.log

[CEST Aug  1 15:09:30] error    : 'myprocess' process is not running

モニットサマリー

Process 'myprocess'            Running

ここにmonit-vの部分があります:

Existence      = if does not exist 3 times within 3 cycle(s) then restart else 
                 if succeeded 1 times within 1 cycle(s) then alert
Pid            = if changed 1 times within 1 cycle(s) then alert
Ppid           = if changed 1 times within 1 cycle(s) then alert
Children       = if less than 1 1 times within 1 cycle(s) then alert else if 
                 succeeded 1 times within 1 cycle(s) then alert
Timeout        = If restarted 3 times within 3 cycle(s) then unmonitor

したがって、質問:アラートを送信してステータスを「実行中」に1サイクル以内に変更し、3日後に再起動することは可能ですか?

19
questioner

編集(重要):この動作が改善されたMonitの新しい(2019年2月による)バージョンについては、以下のコメントを参照してください。


この行:

if does not exist for 3 cycles then restart

次のことを意味します。

サービスが存在しないことを3回確認してから再起動するまで、アクションを実行しないでください。この動作は、monitのドキュメントでフォールトトレランスとして説明されています。

フォールトトレランス

デフォルトでは、アクションが一致し、サービスがエラー状態に設定されている場合にアクションが実行されます。ただし、エラーイベントがトリガーされ、サービス状態が失敗に変わる前に、テストが複数回失敗するように要求することができます。これは、特にネットワークテストで発生する可能性のある、誤ったエラーに関するアラートを回避するのに役立ちます。

構文:

サイクルの場合...または:

[内の時間]サイクル.。

したがって、Monitは、次のXサイクル以内に失敗するまで、サービスのステータスを変更しません。このステートメントを確認するには、このサービスのフォールトトレランスを削除し、次のもののみを使用します。

if does not exist then alert

サービスを手動で停止し、コマンドが

monit status

停止するとすぐに「存在しません」というステータスが表示されます。

だから、あなたの質問に戻って:

  1. はい、1サイクル以内に(Eメールごとに)アラートを送信することが可能です。そのためには、そのサービスに対して「存在しない場合はアラート」オプションを定義し、Eメールアラートを正しく設定する必要があります。外部の電子メールサーバーを使用する場合は、少なくとも2行を定義する必要があります(Gmailを使用した構成例)。

SMTPサーバー構成

set mailserver smtp.gmail.com PORT 587 USERNAME "[email protected]" PASSWORD "xxxxx" using TLSV1 with timeout 30 seconds

(Gmailでは、monitがstmpサービスを使用できるようにするには、「安全でない」アプリへのアクセスをアクティブ化する必要があることに注意してください)

そして

メール受信者

set alert [email protected]

両方ともファイル/ etc/monit/monitrcにあります。これらの2行の詳細については、公式ドキュメントを参照してください。

  1. ドキュメントに記載されている限り、フォールトトレランス(Xサイクル後にアクションを実行する)が定義されている場合、サービスのステータスをすぐに更新することはできません。ただし、アラートをすぐに送信するように定義し、必要なサイクル内にサービスを再起動することはできます。

参照:

Monitのドキュメント: https://mmonit.com/monit/documentation/monit.html

それが役に立てば幸い!

よろしく

16
Eduardo López