Коротенька новела про те, як відловити негідника на хостінгу. Ітак, ситуація слідуюча - є сервак з апачом, який час від часу починає сильно гальмувати від великої нагрузки. Потрібно відловити негідника, який цю нагрузку створює. На серваку існує біля десятка віртуальних хостів, того дивитися будемо за ними. Фітча, що буде використовуватись - стандартний модуль апача mod_status. Тут я розкажу, як його відконфігурувати і виловити негідника за його допомогою.
Ітак, перш за все нам потрібно налаштувати mod_status. Входити на сторінку статистики будемо по паролю, тому згенеруємо файл паролів:
~ # cd /etc/apache2/
/etc/apache2 # htpasswd -c .htpasswd admin
New password: suppapass
Re-type new password: suppapass
Adding password for user admin
root@smartbackup /etc/apache2 # ls -a
. apache2.conf conf.d .htpasswd magic mods-enabled sites-available
.. apache2.conf.bak envvars httpd.conf mods-available ports.conf sites-enabled
Ок, файлик з парою логін:пасс створено, надалі будем його використовувати. Редагуємо файл конфігурації модуля слідуючим чином:
/etc/apache2/mods-available # cp status.conf status.conf.bak
/etc/apache2/mods-available # nano status.conf
#
# Allow server status reports generated by mod_status,
# with the URL of
http://servername/server-status# Uncomment and change the "192.0.2.0/24" to allow access from other hosts.
#
SetHandler server-status
AuthType Basic
AuthName "Ibrahim il Haziz de Abdurahman"
AuthUserFile /etc/apache2/.htpasswd #наш попередньо згенерований файлик
Require valid-user #вимагати вводу коректної пари логін:пароль, якщо в нас декілька користувачів
Order deny,allow
# Deny from all
# Allow from 127.0.0.1 ::1
# Allow from 192.0.2.0/24
Allow from all #дозволити доступ до сторінки всім користувачам
# Keep track of extended status information for each request
ExtendedStatus on
# Determine if mod_status displays the first 63 characters of a request or
# the last 63, assuming the request itself is greater than 63 chars.
# Default: Off
#SeeRequestTail On
# Show Proxy LoadBalancer status in mod_status
ProxyStatus On
Готово, тепер перезапускаємо апач:
/etc/apache2/mods-available # /etc/init.d/apache2 restart
* Restarting web server htcacheclean [Tue Feb 05 11:54:33 2013] [warn] NameVirtualHost *:0 has no VirtualHosts
... waiting [Tue Feb 05 11:54:34 2013] [warn] NameVirtualHost *:0 has no VirtualHosts
[ OK ]
Далі поступаємо так, як тільки відбувається навантаження на сервер і його робота сповільнюється дивимось результат top і шукаємо PID процесу, що найбільше грузить проц. Далі з цим PID'ом ідемо в
http://server/server-status і шукаємо його серед тамтешніх PID'ів, знаходимо і бачимо, що за сайт так грузить сервак і який конкретно запрос до якого скрипта. Ну а далі поступаємо за обставинами.