考案中 この質問への回答 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に注意を向けさせるにはどうすればよいですか?
いくつか掘り下げた後、Monitはシステム監視データを「状態」ファイルに保存していることがわかりました。そして、この「状態」ファイルは、監視されている/監視されていないサービスを追跡します。
したがって、これは少し「ブルートフォース」っぽいですが、間違いなく機能します。タイムアウトなどが原因でサービスが「監視されていない」場合は、次のようにシステムからMonit状態ファイルを削除します。
Sudo rm /var/lib/monit/state
そして、このようにMonitを再起動すると、すべてがうまくいくはずです。
Sudo service monit restart
FWIW、他のシステム/セットアップでは、Monitの「状態」ファイルはstate
またはmonit.state
、さらには.monit.state
として保存される場合があります(ドット/ピリオド.
が前に付きます)別のディレクトリにあります。この修正を実際に実装しようとするときは、その「状態」ファイルが保存されている場所を正確に特定してください。
Monit コマンドを含む すべてまたは特定のサービスの監視を有効または無効にします。
サービスが監視されなくなった場合は、たとえば、監視を再度有効にすることができます。 monit monitor mysql
またはmonit monitor all
。
これらのコマンドを機能させるには、MonitHTTPインターフェースを有効にする必要があることに注意してください。