web-dev-qa-db-ja.com

Monitに監視されていないサービスを再監視させる方法は?

考案中 この質問への回答 Ubuntu12.04.5セットアップでこのMySQLMonitルールセットをテストしているときに問題が発生しました:

check process mysqld with pidfile /var/run/mysqld/mysqld.pid
  group mysql
  start program = "/etc/init.d/mysql start"
  stop program = "/etc/init.d/mysql stop"
  if failed Host 127.0.0.1 port 3306
    with timeout 15 seconds
  then restart
  if 5 restarts within 5 cycles
  then timeout
  alert [email protected] only on { timeout, nonexist }

問題は、Ubuntu/Debianシステムにより適した/etc/init.d/を使用する代わりに、/usr/sbin/service(CentOS/RedHatシステム構造に近い)を介して開始/停止アイテムを呼び出そうとしたことです。

さて、私の悪い…しかし、問題はあなたがそのif 5 restarts within 5 cycles then timeoutの部分を見ているということですか?それは私を苦しめたようです。 /etc/init.d/mysql startコマンドが機能しないため、システムは5回の再起動を試み、5回失敗し、結果としてタイムアウトになりました。また、タイムアウト条件により、MySQLサービスルールセットが私のMonitを無視するようになります。

Monitサービスを数回再起動し、ルールセットを再調整して、それが役立つかどうかを確認しましたが、いずれも影響がないようです。

タイムアウト条件が満たされているために「監視されていない」ルールセットにMonitに注意を向けさせるにはどうすればよいですか?

8
JakeGould

いくつか掘り下げた後、Monitはシステム監視データを「状態」ファイルに保存していることがわかりました。そして、この「状態」ファイルは、監視されている/監視されていないサービスを追跡します。

したがって、これは少し「ブルートフォース」っぽいですが、間違いなく機能します。タイムアウトなどが原因でサービスが「監視されていない」場合は、次のようにシステムからMonit状態ファイルを削除します。

Sudo rm /var/lib/monit/state

そして、このようにMonitを再起動すると、すべてがうまくいくはずです。

Sudo service monit restart

FWIW、他のシステム/セットアップでは、Monitの「状態」ファイルはstateまたはmonit.state、さらには.monit.stateとして保存される場合があります(ドット/ピリオド.が前に付きます)別のディレクトリにあります。この修正を実際に実装しようとするときは、その「状態」ファイルが保存されている場所を正確に特定してください。

6
JakeGould

Monit コマンドを含む すべてまたは特定のサービスの監視を有効または無効にします。

サービスが監視されなくなった場合は、たとえば、監視を再度有効にすることができます。 monit monitor mysqlまたはmonit monitor all

これらのコマンドを機能させるには、MonitHTTPインターフェースを有効にする必要があることに注意してください。

3
user51928