Crmgo Блог

моніторимо apache, модуль mod_performance

моніторимо apache, модуль mod_performance

mod_performance Що цей модуль собою являє. Це звичайний модуль Apache 2.x для Linux. З документації до нього: модуль призначений для збору та накопичення статистики щодо використання ресурсів (CPU і memory, час виконання скрипту) веб-сервером Apache 2.2; модуль дозволяє провести аналіз зібраних…

моніторимо apache, модуль mod_performance

mod_performance

Що цей модуль собою являє. Це звичайний модуль Apache 2.x для Linux. З документації до нього:

  • модуль призначений для збору та накопичення статистики щодо використання ресурсів (CPU і memory, час виконання скрипту) веб-сервером Apache 2.2;
  • модуль дозволяє провести аналіз зібраних даних.

Що все це означає? А те, що він дозволяє відстежувати, скільки ресурсів споживає запит, що надійшов веб-серверу. Щоразу зберігаючи таку інформацію:

  1. віртуальний хост, якому надійшов запит;
  2. файл, який запитується;
  3. URI запиту;
  4. CPU навантаження у %;
  5. використання пам'яті у %;
  6. час обробки запиту.

А накопичену статистику — дозволяє аналізувати. Як база даних для збереження та аналізу використовується SQLite.
Як аналізатор використання ресурсів використовується не scoreboard, як у mod_status та розширеннях perl, а glibtop.
Модуль дозволяє відстежувати як абсолютно всі запити, так і конкретні, відфільтровані за правилом за допомогою регулярних виразів. Точніше буде сказано, що модуль ЗАВЖДИ обробляє лише ті запити, які відповідають фільтру, що містить регулярний вираз.

Як переглянути накопичені дані

Модуль надає два інтерфейси для перегляду та аналізу даних: 1) глобальний; 2) так званий per-host.
Кожен інтерфейс прикріплений до хендлера:

user-status — per-host
performance-status — глобальний

Доступ до інтерфейсів налаштовується як і в модулі mod_status, тобто:

<Location /perf-status>
    Order allow,deny
    SetHandler performance-status
    Allow from 1.1.1.1
</Location>

Глобальний інтерфейс дозволяє переглядати та аналізувати накопичені дані по всіх віртуальних хостах, per-host інтерфейс же відображає та аналізує лише інформацію по хосту, до якого інтерфейс прикріплений, наприклад, якщо викликати хост test.test.test/user-status, то вся виведена статистика стосуватиметься лише цього хоста. Статистика по інших хостах відображатися не буде.

Глобальний інтерфейс управління модулем виглядає, як наведено на рисунку нижче:
Головна форма mod_performance

У головній формі, на рисунку можна побачити поля:
Mode — режим відображення даних.
Period — днів, період відображення або аналізу даних, починаючи від початку поточного дня.
Period begin — початок періоду, заданого у форматі YYYY-MM-DD hh:mm:ss.
Period end — кінець періоду, заданого у форматі YYYY-MM-DD hh:mm:ss.
Якщо задані Period begin, Period end — у такому разі відображаються дані, обмежені цими параметрами, а поле Period — ігнорується. В іншому випадку аналізована ділянка задається параметром Period.
Hostname(SQL) — фільтр, виводити дані лише за вказаним хостом. Синтаксис виклику подібний до конструкції like в SQL. Тобто якщо задати «%test», то будуть вибрані всі хости, що закінчуються на «test».
Script name(SQL) — подібно до попереднього параметра, тільки аналізується ім'я скрипта, що викликається.
URI(SQL) — подібно до попереднього параметра, тільки аналізується URI запиту.
Graph Mode(Y/N) — відображати графікою або текстом.

Приблизний вивід даних виглядає так:
Текстовий вивід накопиченої інформації

Хост, наведений у прикладі на картинці — абсолютно тестовий, якщо він збігається з реальним — перепрошую.
А графічний режим відображення наведено на рисунку нижче:
Графічний вивід

Режими аналізу

Show output without analytics – вивести зібрану інформацію без аналізу, відфільтровану за хостом, скриптом і URI (графічний і текстовий режим).
Maximal %CPU – вивести лише записи з максимальним значенням %CPU (з урахуванням фільтрації).
Maximal memory % — вивести лише записи з максимальним значенням %memory (з урахуванням фільтрації).
Maximal execution request time – вивести скрипт, що виконується найдовше.
Host requests statistics– вивести статистику звернень до хостів із сортуванням за спаданням (у % від загальної кількості з урахуванням фільтрів).
Execution history screen(use Period begin) – дозволяє обчислити список запитів, що виконуються, на вказаний час
Number of requests per domain — вивести статистику звернень до хостів із сортуванням за спаданням (не у відсотках, а кількість).
Average usage per host — вивести середнє навантаження сервера кожним хостом (сума % CPU, сума % MEMORY, сума виконання скриптів, середній % CPU за період, середній % використання пам'яті, середній час виконання скриптів).
Не буду вдаватися в подробиці й деякі режими залишу поза увагою.

Як встановити модуль

Тут я наводжу приклад встановлення для rpm-систем. Усі дії необхідно виконувати під користувачем root.
1) встановимо необхідні пакети для збірки:

yum install httpd-devel apr-devel libgtop2-devel sqlite-devel gd-devel

2) створимо тимчасову папку для вихідних кодів:

mkdir ~/my_tmp
cd ~/my_tmp

3) завантажуємо вихідні коди модуля, розпаковуємо архів і переходимо в розпаковану папку:

wget http://lexvit.dn.ua/utils/getfile.php?file_name=mod_performance_tar201104233487.gz -O mod_performance.tar.gz
tar zxvf mod_performance.tar.gz
cd mod_performance/

4) збираємо модуль:

make

5) на warning не звертаємо уваги. Головне, щоб не було error. Якщо все зібралося нормально, то:

make install

або

cp .libs/mod_performance.so <путь куда копировать>
Конфігуруємо Apache

Конфігурація здійснюватиметься для стандартного встановлення Apache, тобто модулі розташовуються в каталозі /etc/httpd/modules, існує каталог /etc/httpd/conf.d/ і він підключений у /ect/httpd/conf/httpd.conf.
1) створити файл конфігурації модуля:

touch /etc/httpd/conf.d/mod_performance.conf

2) вставити в нього:

LoadModule performance_module modules/mod_performance.so

<IfModule mod_performance.c>
PerformanceHistory 5
PerformanceEnabled On
PerformanceMaxThreads 80
PerformanceScript \.php
PerformanceStackSize 1
PerformanceUseCanonical On

<Location /admin-status>
Order allow,deny
SetHandler performance-status
Allow from 1.1.1.1
</Location>
</IfModule>

3) зберегти файл і перезапустити Apache:

service httpd restart

Файл конфігурації виступає лише як приклад. Усі параметри мають бути підібрані під конкретний сервер.
Наведена вище конфігурація модуля дозволяє відстежувати запити до php скриптів.
Опис усіх параметрів конфігурації можна прочитати в документації модуля.

Примітка: матеріал міг бути створений за підтримки ШІ з подальшою людською редакцією. Відповідальний за зміст: Dmytro Lomaka, Kaltenkirchen.