Homepage: Apache Module mod_status
mod_status — это модуль, который генерирует специальную страницу с подробной информацией про веб-сервер, системные ресурсы, текущие запросы и скорость их обработки.
Если скрипты на ваших сайтах обрабатываются модулями вроде mod_php или mod_perl, то команды top и ps выведут только процессы httpd. В этом случае, проследить стандартными средствами системы, какой именно из скриптов потребляет системные ресурсы, уже невозможно. Этой информацией располагает только Apache, а администратор может её получить с помощью модуля mod_status.
mod_status предоставляет следующие сведения:
Выведем эту эту информацию по определенному адресу, обозначив для Location обработчик server-status.
# nano /etc/apache2/mods-available/status.conf <IfModule mod_status.c> ExtendedStatus On <Location /server-status> SetHandler server-status Order deny,allow Deny from all Allow from localhost ip6-localhost # Allow from .example.com </Location> </IfModule>
Если вы хотите собирать эту информацию для статистики или построить график, существует специальная версия страницы для использования в скриптах. Она доступна по адресу вида: http://example.com/server-status?refresh=2.
PHP скрипт вытягивает get запросом данные mod_status и преобразует его в массив языка PHP. Далее эти данные сортируются по IP клиента при помощи пользовательской функции для uasort.
<?php $url = 'http://example.com/server-status'; $stat = file_get_contents($url); // результат с тегами <table></table>. Весь шаблон. preg_match('|<table(.*)</table>|Uis', $stat, $matches); // получаем массив строк preg_match_all('|<tr(.*?)</tr>|s', $matches[0], $matches); $arr_td = array(); $arr_tr = array(); foreach ($matches[0] as $value) { preg_match_all('|<td.*?>(.*?)</td>|s', $value, $matches); foreach ($matches[0] as $v) { $arr_td[] = strip_tags($v); } if (!empty($arr_td)) { $arr_tr[] = $arr_td; } $arr_td = array(); } function cmp($a, $b) { if ($a['10'] == $b['10']) { return 0; } return ($a['10'] < $b['10']) ? -1 : 1; } $data_tmp = array(); for ($i = 0; $i < 1000; $i++) { $data_tmp = $arr_tr; uasort($data_tmp, 'cmp'); } ?> <table border="1"> <thead> <tr> <th>0</th> <th>1</th> <th>2</th> <th>3</th> <th>4</th> <th>5</th> <th>6</th> <th>7</th> <th>8</th> <th>9</th> <th>10</th> <th>11</th> <th>12</th> </tr> </thead> <tbody> <?php foreach ($data_tmp as $value) { echo '<tr>'; echo '<td>' . $value[0] . '</td>'; echo '<td>' . $value[1] . '</td>'; echo '<td>' . $value[2] . '</td>'; echo '<td>' . $value[3] . '</td>'; echo '<td>' . $value[4] . '</td>'; echo '<td>' . $value[5] . '</td>'; echo '<td>' . $value[6] . '</td>'; echo '<td>' . $value[7] . '</td>'; echo '<td>' . $value[8] . '</td>'; echo '<td>' . $value[9] . '</td>'; echo '<td>' . $value[10] . '</td>'; echo '<td>' . $value[11] . '</td>'; echo '<td>' . $value[12] . '</td>'; echo '/<tr>'; } ?> </tbody> </table>