web-dev-qa-db-ja.com

監視よりも監視を使用する利点は何ですか

いくつかのデーモン(Webアプリ+バックグラウンドタスク)が実行されているカスタムセットアップがあります。これらのデーモンを監視し、リソース消費がレベルを超えた場合にデーモンを再起動するのに役立つサービスの使用を検討しています。

どちらが優れているかについての洞察に感謝します。私が理解しているように、監視はサブプロセスを開始しながら、monitは新しいプロセスを起動します。このアプローチの長所と短所は何ですか?

また、upstartを使用して、モニターまたは監視対象自体を監視します。 webappのデプロイはcapistranoを使用して行われます。

ありがとう

33
murtaza52

私はmonitを使用していませんが、監視対象にはいくつかの重大な欠陥があります。

  1. プログラムはフォアグラウンドで実行する必要があります

つまり、/ etc/init.d/Apache2 startだけを実行することはできません。ほとんどの場合、1つのライナーを作成できます。 「ソース/ etc/Apache2/envvars && exec/usr/sbin/Apache2 -DFOREGROUND」ですが、独自のラッパースクリプトが必要になる場合があります。ラッパースクリプトの問題は、親と子の2つのプロセスが発生することです。次の欠陥を見てください...

  1. supervisordは子プロセスを管理しません

プログラムが子プロセスを開始する場合、supervisordはこれを検出しません。親プロセスが停止した場合(または、supervisorctlを使用して再起動された場合)、子プロセスは実行され続けますが、initプロセスによって「採用」され、実行され続けます。これにより、今後実行されるプログラムの呼び出しが妨げられたり、追加のリソースが消費されたりする可能性があります。最近の設定オプションstopasgroupとkillasgroupはこれを修正するはずですが、私にはうまくいきませんでした。

  1. supervisordには依存関係の管理はありません-参照 #122

私は最近、qlproxyでsquidをセットアップしました。 qlproxydを最初に起動する必要があります。そうしないと、squidが失敗する可能性があります。どちらのプログラムも監督下で管理されていましたが、これを確実にする方法はありませんでした。 qlproxydプロセスを待つsquidの開始スクリプトを作成する必要がありました。開始スクリプトを追加すると、欠陥2で説明されている孤立したプロセスの問題が発生しました

  1. supervisordでは、再試行間の遅延を制御できません

プロセスの開始に失敗した(またはクラッシュした)ときは、ネットワークのぐらつきが原因で、別のリソースにアクセスできないことが原因である可能性があります。スーパーバイザは、プロセスを何度も再起動するように設定できます。再起動の間にプロセスは「バックオフ」状態に入りますが、バックオフの期間に関するドキュメントや制御はありません。

その防衛において、監督者は80%の時間、私たちのニーズを満たしています。構成は賢明であり、ドキュメントはかなり良いです。

34
cressie176

さらにリソースを監視する場合は、monitを使用する必要があります。 monitは、プロセスが実行されているかどうか(可用性)を確認するだけでなく、リソースの使用状況(パフォーマンス、容量の使用状況)、負荷レベル、さらには基本的なセキュリティチェック(bianryファイルのmd5sum、構成ファイルなど)のいくつかのチェックも実行できます。それは非常に理解しやすいルールベースの設定を持っています。また、すぐに使える設定がたくさんあります: http://mmonit.com/wiki/Monit/ConfigurationExamples

プロセスがPIDファイルを作成しない場合、ラッパーを作成する必要があるため、MonitはPIDファイルを作成するプロセスを必要とします。参照 http://mmonit.com/wiki/Monit/FAQ#pidfile

一方、スーパバイザはプロセスにより拘束され、それ自体でプロセスを生成します。モニターとしてリソースベースのチェックを行うことはできません。 Nice CLI servicectlとWeb GUIがあります。

30
Darek