<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/fpm.observability.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'ja',
  ),
  'this' => 
  array (
    0 => 'fpm.status.php',
    1 => 'FPM の情報ページ',
    2 => 'FPM の情報ページ',
  ),
  'up' => 
  array (
    0 => 'fpm.observability.php',
    1 => 'オブザーバビリティ(可観測性)',
  ),
  'prev' => 
  array (
    0 => 'fpm.observability.php',
    1 => 'オブザーバビリティ(可観測性)',
  ),
  'next' => 
  array (
    0 => 'ref.fpm.php',
    1 => 'FPM 関数',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'ja',
    'path' => 'reference/fpm/status.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="fpm.status" class="sect1">
 <h2 class="title">FPM の情報ページ</h2>

 <p class="simpara">
  このページは、FPM の情報ページをセットアップする方法の説明と、
  表示される内容について記しています。
  <span class="function"><a href="function.fpm-get-status.php" class="function">fpm_get_status()</a></span> も参照ください。
 </p>

 <div class="sect2" id="fpm.status.configuration">
  <h3 class="title">設定</h3>

  <p class="simpara">
   FPM の情報ページは、
   FPM プールの設定にある
   <a href="install.fpm.configuration.php#pm.status-path" class="link">pm.status_path</a>
   パラメータを設定することで有効にできます。
  </p>

  <div class="caution"><strong class="caution">警告</strong>
   <p class="simpara">
    セキュリティを考慮して、
    FPM の情報ページへのアクセスは、
    内部的なリクエスト
    または既知のクライアントIPからのリクエストに限定すべきです。
    なぜなら、この情報ページはリクエストURLや、
    利用可能なリソースに関する情報を晒してしまっているからです。
   </p>
  </div>

  <p class="simpara">
   ウェブサーバーの設定によっては、
   PHP スクリプトをバイパスさせ、
   このパスへの直接アクセスを許可する必要があるかもしれません。
   Unix Domain Socket(UDS) 経由で listen している FPM と
   Apache を設定する例は、下記のようになります。
   ここでは、
   <code class="literal">pm.status_path</code> に <code class="literal">/fpm-status</code>
   を設定しています:
  </p>

  <div class="informalexample">
   <div class="example-contents">
    <div class="apache-confcode"><pre class="apache-confcode">&lt;LocationMatch &quot;/fpm-status&quot;&gt;
 Require local
 ProxyPass &quot;unix:/var/run/php-fpm.sock|fcgi://localhost/&quot;
&lt;/LocationMatch&gt;</pre>
</div>
   </div>

  </div>

  <p class="simpara">
   FPM とウェブサーバーをリロードまたは再起動した後、
   情報ページがブラウザからアクセスできるようになっているはずです。
   (IP アドレス制限が設定されている場合は、
   リクエストが許可したIPアドレスから来ている場合に限ります)
  </p>
 </div>

 <div class="sect2" id="fpm.status.parameters">
  <h3 class="title">クエリパラメータ</h3>

  <p class="simpara">
   情報ページの出力フォーマットは、以下のクエリパラメータのうちひとつを指定することで変更できます:
  </p>

  <ul class="simplelist">
   <li><code class="literal">html</code></li>
   <li><code class="literal">json</code></li>
   <li><code class="literal">openmetrics</code></li>
   <li><code class="literal">xml</code></li>
  </ul>

  <p class="simpara">
   クエリパラメータ <code class="literal">full</code> を使うことで、
   追加の情報を出力させることもできます。
  </p>

  <p class="simpara">
   情報ページのURLの例は、下記のとおりです:
  </p>

  <ul class="simplelist">
   <li>
    <code class="literal">https://localhost/fpm-status</code>
    - デフォルトのテキストフォーマットで、概要を出力します。
   </li>
   <li>
    <code class="literal">https://localhost/fpm-status?full</code>
    - デフォルトのテキストフォーマットで、全ての情報を出力します。
   </li>
   <li>
    <code class="literal">https://localhost/fpm-status?json</code>
    - JSON で 概要を出力します。
   </li>
   <li>
    <code class="literal">https://localhost/fpm-status?html&amp;full</code>
    - HTML フォーマットで、全ての情報を出力します。
   </li>
  </ul>
 </div>

 <div class="sect2" id="fpm.status.contents">
  <h3 class="title">表示される情報</h3>

  <p class="simpara">
   日付/時刻 の値は、JSON と XML 出力では Unixタイムスタンプを使います。
   それ以外の場合は、
   <code class="literal">&quot;03/Jun/2021:07:21:46 +0100&quot;</code>
   のようなフォーマットを使います。
  </p>

  <table class="doctable table">
   <caption><strong>基本情報 - 常に表示されます</strong></caption>
   
    <thead>
     <tr>
      <th>パラメータ</th>
      <th>説明</th>
     </tr>

    </thead>

    <tbody class="tbody">
     <tr>
      <td>pool</td>
      <td>FPM プロセスプールの名前</td>
     </tr>

     <tr>
      <td>proccess manager</td>
      <td>プロセスマネージャーのタイプ - static, dynamic, または ondemand.</td>
     </tr>

     <tr>
      <td>start time</td>
      <td>プロセスプールが最後に起動した日付/時刻</td>
     </tr>

     <tr>
      <td>start since</td>
      <td>プロセスプールが最後に起動してから経過した秒数</td>
     </tr>

     <tr>
      <td>accepted conn</td>
      <td>受け入れた接続の合計数</td>
     </tr>

     <tr>
      <td>listen queue</td>
      <td>空きのプロセスを待っている(backlogに入っている)現在のリクエスト数</td>
     </tr>

     <tr>
      <td>max listen queue</td>
      <td>ある一時点でlisten キューに入ったリクエストの最大数</td>
     </tr>

     <tr>
      <td>listen queue len</td>
      <td>許可されているlisten キューの最大サイズ</td>
     </tr>

     <tr>
      <td>idle processes</td>
      <td>(リクエストを待っている)現在アイドルなプロセス数</td>
     </tr>

     <tr>
      <td>active processes</td>
      <td>現在リクエストを処理しているプロセス数</td>
     </tr>

     <tr>
      <td>total processes</td>
      <td>現在のプロセスの合計数</td>
     </tr>

     <tr>
      <td>max active processes</td>
      <td>同時にアクティブになったプロセスの最大数</td>
     </tr>

     <tr>
      <td>max children reached</td>
      <td>
       プロセスの最大数に達したことがあるかを示します。
       ある場合、表示は <code class="literal">1</code> 以上になります。
       ない場合、表示は <code class="literal">0</code> になります。
      </td>
     </tr>

     <tr>
      <td>slow requests</td>
      <td>
       設定した <code class="literal">request_slowlog_timeout</code>
       に到達したリクエストの合計
      </td>
     </tr>

     <tr>
      <td>memory peak</td>
      <td>
       FPM が起動してからのメモリ使用量の最大値
      </td>
     </tr>

    </tbody>
   
  </table>


  <table class="doctable table">
   <caption><strong>プロセス単位の情報 - 出力モードが <code class="literal">full</code> の場合にだけ表示されます</strong></caption>
   
    <thead>
     <tr>
      <th>パラメータ</th>
      <th>説明</th>
     </tr>

    </thead>

    <tbody class="tbody">
     <tr>
      <td>pid</td>
      <td>プロセスの PID</td>
     </tr>

     <tr>
      <td>state</td>
      <td>プロセスの状態 - Idle, Running, ...</td>
     </tr>

     <tr>
      <td>start time</td>
      <td>プロセスが起動した日付/時刻</td>
     </tr>

     <tr>
      <td>start since</td>
      <td>プロセスが起動後、経過した秒数</td>
     </tr>

     <tr>
      <td>requests</td>
      <td>処理したリクエスト数</td>
     </tr>

     <tr>
      <td>request duration</td>
      <td>直近のリクエストを処理するのに使った時間の合計(ミリ秒単位)</td>
     </tr>

     <tr>
      <td>request method</td>
      <td>直近のリクエストの HTTP メソッド</td>
     </tr>

     <tr>
      <td>request uri</td>
      <td>
       最後に処理したリクエストのURL(webサーバーが処理した後のもの。フロントコントローラーパターンを使っている場合、常に <code class="literal">/index.php</code> になる場合があります)
      </td>
     </tr>

     <tr>
      <td>content length</td>
      <td>直近のリクエストの、body の長さ(バイト単位)</td>
     </tr>

     <tr>
      <td>user</td>
      <td>直近のリクエストの HTTP ユーザー (<code class="literal">PHP_AUTH_USER</code>)</td>
     </tr>

     <tr>
      <td>script</td>
      <td>
       直近のリクエストで実行されたスクリプトのフルパス。
       適用できない場合(例: FPM 情報ページへのリクエスト)は、
       <code class="literal">&#039;-&#039;</code> になります。
      </td>
     </tr>

     <tr>
      <td>last request cpu</td>
      <td>
       直近のリクエストの、%cpu の値。
       プロセスがアイドルでない場合、この値は0になります。
       なぜなら、リクエストの処理が終わった時にこの値は計算されるからです。
       この値は100%を超えることがあります。
       なぜならこのメトリクスは、
       直近のリクエストで使われたCPU時間の合計をパーセント単位で示すからです -
       つまりこの値はすべてのコアのプロセスを考慮しますが、
       コアがひとつの場合は、100% になります。
      </td>
     </tr>

     <tr>
      <td>last request memory</td>
      <td>
       直近のリクエストが消費したメモリの最大値。
       プロセスがアイドルでない場合、この値は0になります。
       なぜなら、リクエストの処理が終わった時にこの値は計算されるからです。
      </td>
     </tr>

    </tbody>
   
  </table>


  <blockquote class="note"><p><strong class="note">注意</strong>: 
   <span class="simpara">
    プールに特有の全ての値は、FPM が再起動されるとリセットされます。
   </span>
  </p></blockquote>

  <blockquote class="note"><p><strong class="note">注意</strong>: 
   <span class="simpara">
    OpenMetrics フォーマットの出力は、
    OpenMetrics に準拠した、異なるパラメータタイプを使います。
    出力のパラメータとその説明は、
    OpenMetrics フォーマット出力に含まれています。
   </span>
  </p></blockquote>
 </div>

 <div class="sect2">
  <h3 class="title">変更履歴</h3>
  <table class="doctable informaltable">
   
    <thead>
     <tr>
      <th>バージョン</th>
      <th>説明</th>
     </tr>

    </thead>

    <tbody class="tbody">
     <tr>
      <td>8.1.0</td>
      <td>openmetrics フォーマットが追加されました。</td>
     </tr>

    </tbody>
   
  </table>

 </div>
</div><?php manual_footer($setup); ?>