コンテナとシステムの健全性
    更新日: 2026年6月
    Supervisor logo

    Supervisor 監視

    Supervisorで管理されているすべてのプロセスについて、状態(`RUNNING`/`FATAL`)、稼働時間、予期せぬ終了、再起動ループ、終了コードなどをリアルタイムで監視します。`supervisorctl` によるエージェント方式を採用しており、プロセスが `FATAL` 状態になった瞬間にアラートが通知されます。

    なぜ監視するのか Supervisor?

    Supervisor(`supervisord`)は、Celery や Sidekiq のワーカー、Gunicorn や uWSGI といったアプリケーションサーバー、キューコンシューマー、そして長時間実行されるデーモンといったバックグラウンドプロセスを稼働させ続けます。しかし、`startretries` 回分の再起動に失敗すると、Supervisor は再起動を断念し、そのプロセスを `FATAL` 状態に置きます。そこでは、プロセスは静かに停止したままになります。 プロセスごとの監視の有無が、1行のアラートで済むか、あるいは何時間も誰にも気づかれずにキューが詰まってしまうかの分かれ目となります。

    Xitogent による自動検出 — `supervisord` 配下のすべてのプログラムおよびプロセスグループが自動的に検出されます
    ステートマシン全体(`RUNNING`、`STARTING`、`BACKOFF`、`EXITED`、`FATAL`、`STOPPED`、`UNKNOWN`)にわたるプロセスごとの状態追跡
    `FATAL` 検出 — Supervisor が `startretries` 回試行した後もプロセスを放棄した場合にアラートを発行します
    再起動ループ/`BACKOFF` 検出により、安定した `RUNNING` 状態に到達しないフラッピングするワーカーを捕捉する
    プロセスごとの稼働時間とPID追跡(`start since`)により、サイレント再起動や短命なプロセスを検出
    最後に確認された終了コードと、プログラムに設定された `exitcodes` との比較
    実行中のプロセス数と設定されたプロセス数の比較 — ワーカーが不足していることを即座に把握
    `numprocs`、プロセスグループ、および `priority` 順の起動と連携して動作します
    プロセスごとにアラートの閾値と重大度をカスタマイズ可能
    エージェントベースの収集 — 公開やセキュリティ対策が必要なHTTP/XML-RPCインターフェースがない
    「スーパーバイザーによる監視」とは何ですか?

    監督者の監視、 説明した

    Supervisorによる監視とは、supervisordが管理するすべてのプログラムの状態を継続的に追跡し、プロセスがRUNNING状態から外れた際にアラートを発する仕組みです。Supervisorは、クラッシュしたプロセスを再起動するのに優れていますが、startsecsの間にstartretries回までしか再起動を試みません。 この制限を超えると、プロセスは FATAL 状態となり、Supervisor は再起動を試みなくなります。他のシステムはこれに気づきません。ホストもデーモンも稼働しているのに、キューの処理が単に停止してしまうのです。 Xitoringはsupervisorctlを通じてライブプロセステーブルを読み取り、各プログラムを個別に追跡し、ワーカーがFATAL状態になったり、BACKOFFループで不安定になったり、予期しない終了コードで終了したりした瞬間に、オンコール当番チームへアラートを送信します。

    指標

    私たちが 監視するもの

    プロセスの状態

    各プログラムの現在の状態(`RUNNING`、`STARTING`、`BACKOFF`、`EXITED`、`FATAL`、`STOPPED`、`STOPPING`、`UNKNOWN`)。 Supervisorにとって最も重要なシグナルは、長時間実行中のワーカーが`RUNNING`以外の状態にある場合、それが問題であるということです。

    FATAL状態

    `startretries` を超え、Supervisor によって中止されたプロセスです。このプロセスは自動的に再起動することはありません。`FATAL` に含まれるプログラムはすべて、記事に値する重大なシグナルです。

    BACKOFF / ループの再起動

    `startsecs`の前に繰り返し終了し、再試行されているプロセスです。継続的な `BACKOFF` は、再起動のたびにCPUを消費し続け、トラフィックを処理できないままのフラッピング状態にあるワーカーを意味します。

    稼働時間(起動からの経過時間)

    各プロセスが現在のPIDを保持している期間。稼働時間が繰り返しリセットされるワーカーは、再起動の合間に一時的に `RUNNING` と表示されたとしても、実際には黙ってクラッシュループに陥っている。

    プロセスPID

    `supervisorctl status` コマンドで表示される、プログラムごとのライブ PID。これが表示されていれば、そのプロセスが単に設定されているだけでなく、実際に実行されていることが確認できます。

    ラスト・エグジット・コード

    直近の実行時の終了ステータス。プログラムの `exitcodes` と照らし合わせて、正常な終了と予期せぬクラッシュを見分けることができます。

    実行時と設定時

    宣言されたプロセス数(`numprocs`を含む)に対して、実際に`RUNNING`状態にあるプロセスの数をカウントします。これにより、グループ内でワーカーが不足している箇所が一目でわかります。

    予期せぬ退場

    `autorestart=unexpected` の設定時に、`exitcodes` に含まれないコードで終了します。これらは本来発生してはならないクラッシュであり、その発生件数が増加傾向にある場合は、リグレッションを示唆しています。

    再起動回数

    各プロセスが、時間の経過とともにどれくらいの頻度で再起動されたか。継続的に実行されるべきプロセスで再起動が頻繁に発生している場合は、不安定性やメモリリークの兆候である可能性があります。

    停止中のプロセス

    実行中であるべきなのに、`STOPPED` または `EXITED` 状態にあるプログラム。誰かが手動で停止したまま忘れてしまったワーカーや、自動再起動されずに終了してしまったワーカーを検出します。

    トリガーとアラート

    設定可能 アラートのトリガー

    ダッシュボードでカスタムトリガーを設定し、Supervisorのメトリクスが定義した閾値を超えた瞬間に通知を受け取れるようにします。

    Supervisor 監視トリガーの設定ダッシュボード

    プロセス FATAL

    重要な

    プロセスが `FATAL` 状態になったときに発生します。これは、スーパーバイザーがそのプロセスの再起動を断念し、誰かが介入するまでプロセスが停止したままになる状態です。

    プロセスが実行されていません

    重要な

    `RUNNING`であるべきプログラムが`STOPPED`、`EXITED`、または`UNKNOWN`になったときにトリガーされます。

    ループを再開

    警告

    `BACKOFF`が継続している場合や再起動が繰り返される場合のアラート — クラッシュを繰り返して安定しないワーカー。

    予期しない終了コード

    警告

    プロセスが、設定された `exitcodes` に含まれない終了コードで終了した場合に発火します。

    01

    の重要性 監督者の監視

    スーパーバイザーは、クラッシュしたプロセスを再起動し続けます――ただし、それができなくなるまでは。`startretries` を超えると、プロセスは `FATAL` 状態で保留され、完全に停止したままになります。ホスト側からは、そのことを知らせる何の通知もありません。

    • `FATAL` が発生して再起動を停止したプロセスを捕捉する
    • `BACKOFF`ループに陥っているフラッピングワーカーを検出する
    • 稼働時間のリセットによるサイレント再起動の検出
    • 従業員が予期せぬコードで退勤したタイミングを把握する
    スーパーバイザープロセスの状態ダッシュボード
    プロセスの再起動および稼働時間の分析
    02

    なぜ当社を選ぶのか Xitoring

    ゼロ設定で導入可能なエージェントベースのSupervisor監視機能。supervisordが管理するすべてのプログラムにおいて、プロセスごとの可視性を確保します。

    • 1つのコマンドでインストールと統合
    • プロセス単位およびグループ単位の追跡
    • 公開するXML-RPCやHTTPインターフェースはありません
    • 当直ローテーションへのマルチチャネル通知
    • 過去の状態と再起動履歴
    Xitoring Supervisor の概要
    プロセスごとのアラート設定
    ユースケース

    共通スーパーバイザーによる監視 シナリオ

    Supervisorが通常実行される場所――そして、誰も見ていないときに静かに失敗してしまうもの。

    バックグラウンド処理ツール(Celery、Sidekiq、RQ、Resque)

    キューワーカーとは、まさに「静かに終了してしまう」プロセスのことです。デプロイの失敗や不正なメッセージによって再起動ループに陥り、最終的に FATAL 状態になります。ワーカーの実行が停止した瞬間、キューが詰まったりジョブがタイムアウトし始める前に、アラートを発信します。

    アプリケーションサーバーとデーモン(Gunicorn、uWSGI、Daphne、Node)

    Supervisorがアプリケーションサーバーを管理している場合、デプロイ後にプロセスが起動しないということは、ホストの状態は「グリーン」のままでもサイトがダウンしていることを意味します。FATALBACKOFFを即座に検知するため、顧客からの報告を待つことなく、リリースに失敗した場合は担当者に通知が行われます。

    コンテナ内およびレガシーホスト上のプロセス

    多くのコンテナや旧式のサーバーでは、systemdの代わりにSupervisorを実行し、1か所で複数のプロセスを稼働させ続けています。各プロセスを個別に追跡しているため、負荷の高いコンテナ内で1つのプロセスがクラッシュしても、他のプロセスに隠れてしまうことはありません。

    はじめる前に

    Supervisor の 前提条件

    これらが揃っていることを確認してください — 揃っていれば、ほとんどの導入は 60 秒で完了します。

    • Supervisor(supervisord)がインストールされており、少なくとも1つのプログラムを管理しているLinuxサーバー
    • 同じホストにXitogentがインストールされており、supervisorctl statusを実行できる
    • sudo xitogent integrate を実行し、「Supervisor」統合を選択してください
    セットアップガイド

    はじめに 議事録

    1

    サーバーにXitogentをインストールする

    Supervisor を実行しているホストに、軽量な Xitogent モニタリングエージェントをインストールしてください。

    curl -s https://xitoring.com/install.sh | sudo bash -s -- --key=YOUR_API_KEY
    2

    Supervisor 連携を有効にする

    `sudo xitogent integrate` を実行し、「Supervisor」を選択します。Xitogent は `/etc/xitogent/integrations/supervisor_integration.conf` を書き込み、`supervisorctl` を通じてプロセステーブルを読み取り、`supervisord` 配下のすべてのプログラムとグループを自動検出します。Supervisor の設定を変更する必要はありません。

    sudo xitogent integrate
    3

    トリガーの設定(任意)

    Xitoringダッシュボードで、プロセスごとのトリガーと重大度を設定します。たとえば、プロセスが `FATAL` 状態になった場合にページ通知を送信したり、`BACKOFF` 状態が継続した場合や予期しない終了コードが発生した場合に警告を表示したりすることで、キューが詰まる前に障害情報を当直担当者に通知できるようにします。

    4

    動作確認

    サーバー上でこのコマンドを実行して、Xitogent が連携を認識していることを確認してください。約 30 秒以内に新しいメトリクスがダッシュボードに流れ始めます。

    sudo xitogent status

    頻繁に 質問をした

    「スーパーバイザーによる監視」とは何ですか?
    スーパーバイザーによる監視とは、`supervisord` が管理するすべてのプログラムの状態(`RUNNING`、`STARTING`、`BACKOFF`、`EXITED`、`FATAL`、`STOPPED`、`UNKNOWN`)を、プロセスごとの稼働時間、 PID、終了コード、再起動履歴を継続的に追跡し、プロセスが `RUNNING` 状態を離れた際にアラートを発信する機能です。Supervisor は `startretries` 回再起動を試みた後、プロセスの再起動を停止して `FATAL` 状態に固定するため、管理対象のワーカーが停止したことを知らせるのは、このモニタリング機能のみとなります。
    Xitoringは、スーパーバイザーのデータをどのように収集しているのですか?
    エージェント側。Xitogent は短い間隔で `supervisorctl status` を実行し、プログラムごとの状態、PID、および稼働時間を解析します。Supervisor の `inet_http_server` を有効にしたり、その XML-RPC インターフェースを公開したりする必要はありません。エージェントは、CLI と同じデータをローカルで読み取ります。
    Supervisorの連携設定はどのように行えばよいですか?
    Xitogent をインストールし(`curl -s https://xitoring.com/install.sh | sudo bash -s -- --key=YOUR_API_KEY`)、次に `sudo xitogent integrate` を実行して、Supervisor を選択します。 Xitogent は `/etc/xitogent/integrations/supervisor_integration.conf` を作成し、`supervisord` が管理するすべてのプログラムとグループを自動検出してから、それらの追跡を開始します。Supervisor の設定を変更する必要はありません。
    「Supervisor」プロセスの状態にはどのような意味があるのでしょうか?
    `STOPPED` — 起動していない。`STARTING` — 起動中。`RUNNING`とみなされるまで`startsecs`待機中。`RUNNING` — 起動済みで安定している。`BACKOFF` — 起動したが`startsecs`以内に終了した。Supervisorが再試行中。 `EXITED` — 実行され、終了した(`exitcodes` に基づき、予期されたか予期されなかったか)。`FATAL` — `startretries` を超過した;Supervisor は再起動を断念し、再起動しない。`STOPPING` — シャットダウン中。`UNKNOWN` — Supervisor がプロセスの追跡に失敗した。 長時間実行されるワーカーについては、`RUNNING` 以外の状態はすべて注意を要する。
    「FATAL」状態とはどういう意味ですか?また、なぜそれが重要なのでしょうか?
    プロセスは、`startsecs` 秒以内に `startretries` 回以上起動を維持できなかった場合、`FATAL` 状態になります。その時点で、Supervisor は再起動を試みるのをやめ、そのプロセスを停止したままにします。 ホスト上でこれを自動的に復旧させる仕組みは何もありません。サーバーは稼働しており、`supervisord` デーモンも稼働していますが、ワーカーは消滅しています。`FATAL` は Supervisor のアラートの中で最も重要なものです。これは、ほぼ必ずデプロイに失敗した、依存関係が欠落している、あるいはプロセスが起動時にクラッシュしていることを意味します。
    スーパーバイザーの再起動ループをどのように検出すればよいですか?
    `BACKOFF` 状態と稼働時間のリセットに注意してください。フラッピングを起こしているプロセスは、`STARTING` → `startsecs` 前に終了 → `BACKOFF` → 再試行というサイクルを繰り返し、安定した `RUNNING` 状態には決して到達しません。 Xitoring は、持続的な `BACKOFF` 状態と、稼働時間がリセットされ続けるプロセスの両方を検出するため、プロセスが `FATAL` 状態になる後ではなく、CPU を消費している最中にこのループを捕捉できます。修正としては、通常、プロセスが早期に終了する原因を解消した後にのみ、`startsecs` や `startretries` の値を引き上げるようにします。
    「autorestart」の「true」、「false」、および「unexpected」にはどのような違いがありますか?
    `autorestart=true` を指定すると、プロセスが終了するたびに常に再起動されます。`autorestart=false` を指定すると、再起動は一切行われません。 `autorestart=unexpected`(一般的なデフォルト設定)は、終了コードがプログラムの `exitcodes` リストに含まれていない場合にのみ再起動を行います。つまり、リストにあるコードは正常終了とみなされ、それ以外はクラッシュとみなされます。 Xitoringは最後の終了コードを`exitcodes`と照合して追跡するため、意図的な停止のたびにアラートを出すのではなく、予期しない終了についてのみ具体的にアラートを発信することができます。
    複数のプロセスやプロセスグループを監視することはできますか?
    はい。Xitogent は、`supervisord` が管理するすべてのプログラムを自動検出します。これには、グループ化されたプロセスや、`numprocs > 1` のプログラム(例:`worker:worker_00`、`worker:worker_01`)も含まれます。 各プロセスは個別に追跡、アラート通知、履歴記録が行われるため、負荷の高いグループ内で1つのワーカーがクラッシュしても、稼働中のワーカーの陰に隠れてしまうことはありません。
    Supervisor 対 systemd — なぜ特に Supervisor を監視する必要があるのか?
    依然として、多くのスタックがSupervisorに依存しています。具体的には、複数のプロセスを実行するDockerコンテナ、systemdが広く普及する以前に構築されたレガシーホスト、そしてデプロイツールとしてSupervisorが標準化されていたPythonやRubyのアプリケーションなどが挙げられます。また、Supervisorの再起動動作はsystemdとは異なります。Supervisorは、無期限に再試行を続けるのではなく、`startretries`回試行した後、そのプロセスを`FATAL`として放棄します。 Supervisorの状態マシンを直接監視することで、ホスト上で他に何が実行されていようとも、これらの放棄されたプロセスを確実に捕捉できます。

    Supervisorの監視を開始する 今日

    60秒以内で設定完了。クレジットカードは不要。導入初日から詳細な分析データが利用可能。

    無料トライアルを開始

    探検を続けよう

    関連 連携機能