<?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 => 'ru',
  ),
  'this' => 
  array (
    0 => 'fpm.status.php',
    1 => 'Страница статуса',
    2 => 'Страница статуса',
  ),
  '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' => 'ru',
    '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">Страница статуса</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 включают установкой параметра конфигурации
   <a href="install.fpm.configuration.php#pm.status-path" class="link">pm.status_path</a> в конфигурации пула FPM.
  </p>

  <div class="caution"><strong class="caution">Предостережение</strong>
   <p class="simpara">
    По соображениям безопасности доступ к странице статуса FPM разрешают только для внутренних запросов
    или доверенных IP-адресов, поскольку страница раскрывает URL-адрес запроса и информацию о доступных ресурсах.
   </p>
  </div>

  <p class="simpara">
   В настройках веб-сервера потребуется разрешить прямые запросы по пути страницы статуса —
   в обход поиска файлов веб-сервером и без передачи управления обработкой запроса PHP-скриптам.
   Пример конфигурации для связки Apache + FPM, если менеджер процессов слушает сокет Unix-домена
   и для директивы <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-адресу страница откроется, только если запрос поступит с разрешённого адреса.
  </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>Максимальное количество запросов в очереди на прослушивание в любой момент времени.</td>
     </tr>

     <tr>
      <td>listen queue len</td>
      <td>Максимально допустимый размер очереди прослушивания.</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>
       Пиковое значение объёма памяти, которую PHP выделил с момента запуска 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>
       URI запроса, который процесс обслужил последним; в рамках шаблона Front Controller — с единой точкой входа —
       веб-сервер перенаправляет вызовы в главный скрипт, поэтому поле содержит только значение <code class="literal">/index.php</code>.
      </td>
     </tr>

     <tr>
      <td>content length</td>
      <td>Длина тела запроса, в байтах, последнего запроса.</td>
     </tr>

     <tr>
      <td>user</td>
      <td>HTTP-пользователь (<code class="literal">PHP_AUTH_USER</code>) последнего запроса.</td>
     </tr>

     <tr>
      <td>script</td>
      <td>
       Полный путь к скрипту, который выполнил последний запрос. Это будет
       <code class="literal">&#039;-&#039;</code>, если не применимо (например, запросы страницы состояния).
      </td>
     </tr>

     <tr>
      <td>last request cpu</td>
      <td>
       Процент занятого центральным процессором времени при выполнении последнего запроса.
       Это значение будет равно 0, если процесс не в состоянии Idle,
       потому что вычисление проводится после окончания обработки запроса.
       Значение может превысить 100 %, потому что метрика покажет,
       какой процент от общего времени работы процессора
       занял последний запрос, —
       в расчёте менеджер учтёт процессы на каждом ядре,
       тогда как 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); ?>