mod_performance
Na czym polega ten moduł? Jest to zwykły moduł Apache 2.x dla systemu Linux. Zgodnie z dokumentacją:
- moduł służy do zbierania i gromadzenia statystyk dotyczących zużycia zasobów (CPU i pamięć, czas wykonania skryptu) przez serwer WWW Apache 2.2;
- moduł umożliwia analizę zebranych danych.
Co to oznacza w praktyce? Oznacza to, że pozwala on monitorować, ile zasobów zużywa żądanie przychodzące do serwera WWW. Za każdym razem zapisywane są następujące informacje:
- wirtualny host, do którego wpłynęło żądanie;
- plik, który jest żądany;
- URI żądania;
- obciążenie CPU w %;
- użycie pamięci w %;
- czas przetwarzania żądania.
Zebrane statystyki można następnie analizować. Do przechowywania i analizy danych używana jest baza danych SQLite.
Do analizy zużycia zasobów używany jest nie scoreboard, jak w mod_status i rozszerzeniach Perl, ale glibtop.
Moduł pozwala monitorować zarówno wszystkie żądania, jak i konkretne, przefiltrowane za pomocą reguły opartej na wyrażeniach regularnych. Dokładniej mówiąc, moduł ZAWSZE przetwarza tylko te żądania, które spełniają warunek filtra zawierającego wyrażenie regularne.
Jak wyświetlić zgromadzone dane
Moduł udostępnia dwa interfejsy do przeglądania i analizy danych: 1) globalny; 2) tzw. per-host.
Każdy interfejs jest powiązany z odpowiednim handlerem:
user-status — per-host
performance-status — globalny
Dostęp do interfejsów konfiguruje się tak samo jak w module mod_status, czyli:
<Location /perf-status>
Order allow,deny
SetHandler performance-status
Allow from 1.1.1.1
</Location>
Interfejs globalny pozwala przeglądać i analizować zgromadzone dane dla wszystkich wirtualnych hostów, natomiast interfejs per-host wyświetla i analizuje tylko informacje dotyczące hostu, do którego interfejs jest przypisany. Na przykład, jeśli wywoła się adres test.test.test/user-status, wszystkie wyświetlane statystyki będą dotyczyły tylko tego hosta. Statystyki dotyczące innych hostów nie będą wyświetlane.
Interfejs globalny zarządzania modułem wygląda, jak pokazano na poniższym rysunku:

W głównym oknie, na rysunku, można zobaczyć pola:
Mode – tryb wyświetlania danych.
Period – liczba dni, okres wyświetlania lub analizy danych, licząc od początku bieżącego dnia.
Period begin – początek okresu, określony w formacie YYYY-MM-DD hh:mm:ss.
Period end – koniec okresu, określony w formacie YYYY-MM-DD hh:mm:ss.
Jeśli podano Period begin i Period end, wówczas wyświetlane są dane ograniczone tymi parametrami, a pole Period jest ignorowane. W przeciwnym razie analizowany fragment jest określany przez parametr Period.
Hostname(SQL) – filtr, wyświetlający dane tylko dla określonego hosta. Składnia wywołania jest podobna do konstrukcji LIKE w SQL. Np. jeśli podasz „%test”, zostaną wybrane wszystkie hosty kończące się na „test”.
Script name(SQL) – podobnie jak poprzedni parametr, ale analizowana jest nazwa wywoływanego skryptu.
URI(SQL) – podobnie jak poprzedni parametr, ale analizowany jest URI żądania.
Graph Mode(Y/N) – wyświetlanie graficzne lub tekstowe.
Przykładowy wynik danych wygląda następująco:

Host podany w przykładzie na obrazku jest całkowicie testowy; jeśli pokrywa się z rzeczywistym, przepraszam.
Tryb graficzny wyświetlania przedstawiono na poniższym rysunku:

Tryby analizy
Show output without analytics – wyświetlenie zebranych informacji bez analizy, przefiltrowanych według hosta, skryptu i URI (tryb graficzny i tekstowy).
Maximal %CPU – wyświetlenie tylko rekordów z maksymalną wartością %CPU (z uwzględnieniem filtrów).
Maximal memory % – wyświetlenie tylko rekordów z maksymalną wartością %memory (z uwzględnieniem filtrów).
Maximal execution request time – wyświetlenie skryptu wykonującego się najdłużej.
Host requests statistics – wyświetlenie statystyki żądań do hostów z sortowaniem malejącym (w % względem całkowitej liczby, z uwzględnieniem filtrów).
Execution history screen(use Period begin) – pozwala obliczyć listę wykonywanych żądań na wskazany moment czasu.
Number of requests per domain – wyświetlenie statystyki żądań do hostów z sortowaniem malejącym (nie w procentach, ale w liczbie).
Average usage per host – wyświetlenie średniego obciążenia serwera przez każdy host (suma % CPU, suma % MEMORY, suma czasu wykonania skryptów, średnie % CPU w okresie, średnie % użycia pamięci, średni czas wykonania skryptów).
Nie będę wchodzić w szczegóły, a niektóre tryby pozostawię bez uwagi.
Jak zainstalować moduł
Poniżej podaję przykład instalacji dla systemów rpm. Wszystkie czynności należy wykonywać jako użytkownik root.
1) Zainstaluj niezbędne pakiety do budowania:
yum install httpd-devel apr-devel libgtop2-devel sqlite-devel gd-devel
2) Utwórz tymczasowy katalog na kod źródłowy:
mkdir ~/my_tmp cd ~/my_tmp
3) Pobierz kod źródłowy modułu, rozpakuj archiwum i przejdź do rozpakowanego katalogu:
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) Zbuduj moduł:
make
5) Nie zwracaj uwagi na ostrzeżenia (warnings). Ważne, aby nie było błędów (errors). Jeśli wszystko zbudowało się poprawnie, to:
make install
lub
cp .libs/mod_performance.so <путь куда копировать>
Konfiguracja Apache
Konfiguracja zostanie przeprowadzona dla standardowej instalacji Apache, czyli moduły znajdują się w katalogu /etc/httpd/modules, istnieje katalog /etc/httpd/conf.d/ i jest on dołączony w pliku /ect/httpd/conf/httpd.conf.1) Utwórz plik konfiguracyjny modułu:
touch /etc/httpd/conf.d/mod_performance.conf
2) Wklej do niego:
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) Zapisz plik i zrestartuj Apache:
service httpd restart
Plik konfiguracyjny jest jedynie przykładem. Wszystkie parametry muszą być dostosowane do konkretnego serwera.
Powyższa konfiguracja modułu umożliwia śledzenie żądań do skryptów PHP.
Opis wszystkich parametrów konfiguracyjnych można znaleźć w dokumentacji modułu.
