問題タブ [monit]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ruby-on-rails - Unicorn Worker のリスポーンが速すぎる場合、停止時に監視がタイムアウトする
私は monit でユニコーン ワーカーを監視しようとしているので、特定のメモリしきい値に達すると、ユニコーン ワーカーを適切に強制終了します。
問題:
ワーカーを再起動するように monit に指示すると、まず/etc/init.d/unicorn kill_worker 0
スクリプト コマンドを実行してワーカーを停止しようとします。
コマンドを介してプロセスを監視しているtop
と、ワーカーがどのように強制終了され、マスターが別の pid を使用して新しいワーカーを生成するかがわかります。
ただし、Monit はしばらく待機し、ログに「停止に失敗しました」というエラーをスローします。実際には 30 秒待機してタイムアウトしています。
タイムアウトになると、monit は を認識しrestart action is done
、ワーカー PID が変更されたことに気づき、期待どおりにプロセスを監視し続けます。
その結果、すべてが機能し、monit は必要に応じてワーカーを再起動し、監視を続けることができますが、ログにはエラーがいっぱいで、Web インターフェイスexecution failed
にはワーカーに関する厄介な (そして紛らわしい) エラー ステータスが表示されます。設定されている場合、誤った電子メール アラートを送信します。
これは、Web インターフェイスを介してワーカーを再起動しようとしたときのログの関連部分です (ワーカーの親 PID と混同されることに注意してください)。
これを理解するのに長い時間がかかりましたが、ここで起こっていることは、ワーカーが殺され、その後すぐにリスポーンされるため、monit が変更に気付かないことです。
私の推測では、停止アクションを実行するときに、monit が を読み取って/tmp/unicorn.orly.0.pid
プロセスの pid を取得し、そのプロセスが存在するかどうかを確認します。
ただし、ワーカーの kill-respawn 操作は非常に高速に行われるため、monit はワーカーの pid が変更されたことを認識せず、(新しい) ワーカーが終了するのを待ち続けます。その後、タイムアウトになり、pidが実際に変更されたことに気づき、通常どおりになります。
私が見つけた汚い解決策:
この仮説を証明するために、前述のkill-respawn ワーカー操作を遅くしようとしました。そこで、ユニコーンの設定ファイルを編集して、新しい pid を書き留める直前に、新しいワーカーを数秒間スリープさせました/tmp/unicorn.orly.0.pid
。
私はこのようにしました:
そして、見事に機能しました。晴れた日には鳥や花が歌い、Web インターフェースは良好なprocess running
ステータスを表示し、ログはすべてが順調に進んでいることを示しています。
質問:
これを達成する方法はありますか?ワーカーを 3 秒間スリープ状態にすることは、良い解決策とは思えません。何か案は?
これはmonitの通常の状況ではないことを理解しています。monit にアクションを実行させたくないので、monitの再起動プロセス サイクルを壊しましたstart program
が、代わりにユニコーン マスター プロセスに処理させます (ここで説明されているように: http://www.stopdropandrew.com/ 2010/06/01/where-unicorns-go-to-die-watching-unicorn-workers-with-monit.html )
regex - 単語を含む X 文字列の場合に一致する正規表現は?
この方法で解決できるかどうかわからない問題を扱っています。助けていただければ幸いです。見てみましょう:
Monit を使用していくつかのログ ファイルを監視しています。特定の式を探したいのですが、その式が 3 回以上表示される場合にのみ、正の一致が必要です。
問題のログ ファイルは次のようになります。
そして、「 [SEVERE]」という表現を探しています。
その式が 3 回以上出現する場合に一致が必要です。
その式に一致するすべての行が得られることはわかってい.*\[SEVERE\].*
ますが、その行数が 3 以上の場合にのみ一致させたいと考えています。正規表現でそれを行う方法はありますか?または、おそらくMonitでそれを行う代替手段はありますか?
monit - Monit にファイルが存在する場合のアラーム
少しの間monitを使用していますが、ファイルが存在する場合にアラームを鳴らしたいです。これは、メインのドキュメントとは逆の使用例です。
ドキュメントは次のように述べています。
これにより、「ファイルが見つからない場合はびっくりする」というレシピが得られます。しかし、「ファイルがあればびっくり」したいです。そして、アクションの選択は、「何もしない」アクションがないことを意味します。何もしないでシェルアウトすることもできますが、「何もしない」という標準的なケースでは、それは本当にばかげています。
私はいくつかの基本的なケースを推測しました:
それで、標準的な方法はありますIF IT DOES EXIST
か?
node.js - upstart と monit で複数の nodejs サービスをサポートするにはどうすればよいですか?
node.js アプリをデーモン化するために、upstart スクリプトを作成しました。
私のmonitスクリプトは次のとおりです。
正常に動作しますが、次のようにアップストリームのロード バランサーとして nginx を追加したいと考えています。
では、それをサポートするには、upstart スクリプトと monit スクリプトをどのように変更すればよいでしょうか?
bash - 監視がプロセスの開始に失敗する
サーバーを起動および停止するために正常に動作するスクリプトを作成しました。
実行して起動すると
そして起動monit
すると、PID とサーバーが正しくキャプチャされます。
停止すると、プロセスが適切に強制終了され、監視が解除されます。ただし、もう一度起動しても、サーバーは再起動しません。
モニターは次のとおりです。
capistrano - pid の変更を許可するように monit を構成するにはどうすればよいですか?
sidekiq を使用して Rails アプリをデプロイしています。デプロイのたびに、Capistrano は以前に実行されていたバージョンの sidekiq (Ruby プロセス) を停止してから、新しいバージョンを開始します。sidekiq pid ファイルを monit で監視しています。
問題: pid ファイルをデプロイするたびに変更されますが、monit はファイルが変更されたことを検出し、プロセスを再起動します。数日間の期間と複数のリリースで、必要な sidekiq インスタンスが 1 つだけになってしまいます。
sidekiq の私の monit 設定は次のとおりです。
pid ファイルの変更を許可し、sidekiq インスタンスが実行されていることのみを確認するように monit を構成する方法はありますか?
monitoring - 監視ソフトウェアの実行を監視または確認する方法 (またはすべき) は?
私はシステム/サービス監視ソフトウェアを書いています。私の主な目標は、それを可能な限りフェイルセーフにすることです。
現在、マスター プロセスを開始するバイナリ スクリプトがあります。マスター プロセスは、実際の監視とレポートを行う子プロセスをフォークします。マスターは、失敗した場合の子の再起動と、子間の通信のみを管理します。
このレベルのフェイルセーフを考えると、マスター プロセスに別の監視レイヤーを追加することをお勧めしますか?
私のコードが高級言語 (python など) であると仮定すると、それを監視する initscript または shellscript で私のソフトウェアをラップすることは理にかなっているでしょうか、それとも冗長でしょうか?
unix - Monit を使用して別のシステムで MySQL を監視できない
Monit を使用して別のシステムで MySQL プロセスを監視しようとしています。システムは私のものと同じネットワーク接続に接続されています。私はこのコードを使用しています(構成ファイルmonitrc内):
プロセス mysql を pidfile /var/run/mysqld/mysqld.pid でチェックします。
グループデータベース
start program = "/etc/init.d/mysql restart"
stop program = "/etc/init.d/mysql stop"
ホスト 192.168.0.189 ポート 3306 に失敗した場合は、再起動します
5 サイクル以内に 5 回再起動すると、タイムアウトになります
ステータスは「未監視」のようです。問題に見えるのは?