Анализатор работы Apache - mod_log_sql
admin 28 Мая 2009 в 17:08:47
Решил посмотреть сколько жрёт трафику сайт.
От анализа и разбора лог файла сразу отказался.
Нашёл модуль "mod_log_sql" который можно прикрутить прямо к индейцу.
Этот модуль сразу пишет лог в базу данных.
Далее я расскажу как его установить и настроить.
Скачал исходники тут: http://www.outoforder.cc/projects/apache/mod_log_sql/.
Распаковал
Сконфигурял
Установил
После этого в директории модулей апачи появились файлы:
Quote:
Теперь можно смело править конфиг файл httpd.conf.
Подключаем модуль:
Конфигуряем, это минимальный рабочий вариант:
Делаем рестарт Апачу. Всё должно заработать :-)
А вот расширенная конфигурация:
Расшифровка полей:
Запросец на скорую руку, показывает почасовую нагрузку за определённое число
От анализа и разбора лог файла сразу отказался.
Нашёл модуль "mod_log_sql" который можно прикрутить прямо к индейцу.
Этот модуль сразу пишет лог в базу данных.
Далее я расскажу как его установить и настроить.
Скачал исходники тут: http://www.outoforder.cc/projects/apache/mod_log_sql/.
Распаковал
tar -xjf mod_log_sql-1.101.tar.bz2
Сконфигурял
./configure --with-apxs=/usr/local/apache/bin/apxs --with-mysql
Установил
make
make install
После этого в директории модулей апачи появились файлы:
Quote:
shymkent:/usr/local/apache/modules # ls
httpd.exp libphp5.so mod_log_sql.so mod_log_sql_logio.so mod_log_sql_mysql.so mod_log_sql_ssl.so mod_rewrite.so
httpd.exp libphp5.so mod_log_sql.so mod_log_sql_logio.so mod_log_sql_mysql.so mod_log_sql_ssl.so mod_rewrite.so
Теперь можно смело править конфиг файл httpd.conf.
Подключаем модуль:
LoadModule log_sql_module modules/mod_log_sql.so
LoadModule log_sql_mysql_module modules/mod_log_sql_mysql.so
Конфигуряем, это минимальный рабочий вариант:
<IfModule mod_log_sql.c>
LogSQLLoginInfo localhost apache apache
# БД, в которую будут писаться логи
LogSQLDatabase apache_logs
# Создавать или нет таблицу, для хранения логов
# (В принципе, никто не запрещает создать её самому,
# у такого решения будут даже плюсы - не будет лишних
# граф...)
LogSQLCreateTables on
# Сокет MySQL, у вас он может лежать в другом месте
LogSQLSocketFile /tmp/mysql.sock
# Порт, на котором висит MySQL - Если порт стандартный (3306)
# то можно эту строчку закомментировать (или просто не писать )
LogSQLTCPPort 3306
# имя таблицы, в которую писать логи
LogSQLTransferLogTable access_log
</IfModule>
Делаем рестарт Апачу. Всё должно заработать :-)
А вот расширенная конфигурация:
<IfModule mod_log_sql.c>
# инфа для соединения с MySQL -
# хост, имя пользователя, пароль
LogSQLLoginInfo localhost apache apache
# БД, в которую будут писаться логи
LogSQLDatabase apache_logs
# Создавать или нет таблицу, для хранения логов
# (В принципе, никто не запрещает создать её самому,
# у такого решения будут даже плюсы - не будет лишних
# граф...)
LogSQLCreateTables on
# Сокет MySQL
LogSQLSocketFile /tmp/mysql.sock
# Порт, на котором висит MySQL - Если порт стандартный (3306)
# то можно эту строчку закомментировать (или просто не писать )
LogSQLTCPPort 3306
# Таблица, в которую будут записываться логи (можно сделать несколько
# и разместить их внутри директив `VirtualHost` - тогда каждый
# виртуальный хост будет писать логи в свою таблицу)
LogSQLTransferLogTable access_log
# что писать, а что нет в таблицу с логами. В данном варианте, пишется
# вообще всё - но если не хотите писать всё, то неиспользуемые колонки
# будут содержать `NULL`
LogSQLTransferLogFormat AabcHhIlMmPpRrSsTtUuv
# также можно настроить и исключения - что писать, а что нет
# в логи:
# Следующий параметр определяет что писать в логи (если не подходит
# под шаблон - то не пишется. Если параметр не задан - пишется всё)
# также надо заметить, что эти параметры являются регистрозависимыми
# т.е. *.JPG файлы не пройдут по нижепредложенному варианту...
LogSQLRequestAccept *.gif *.jpg *.html
# какие файлы надо игнорировать (если по предыдущей, разрешающей,
# директиве они прошли, можно зарезать их тут), также в доках на модуль
# приводится интересный пример использования этой директивы - чтобы не
# засирать логи попытками малолетних кулхацкеров взомать сервер, надо
# поместить в неё следующие словечки: root.exe cmd.exe default.ida ...
# Также можно зарезать всю графику в логах: .jpg .gif .png
LogSQLRequestIgnore statistic.html test.gif
# Какие удалёные хосты игнорировать при ведении логов
# в этом примере не будут учитываться запросы со всех моих
# хостов - forum.lissyara.su, www.lissyara.su, mx.lissyara.su и других...
LogSQLRemhostIgnore lissyara.su
# следующий параметр предназначен для автоматического создания
# всех таблиц для всех виртуальных хостов машины - например для
# машины где очень много виртуальных хостов - соответственно руками
# всё прописывать очень обломно
LogSQLMassVirtualHosting on
# надо заметить, что есть ещё интересные параметры - можно регистрировать
# работу других модулей, и их результатов - в оригинале, на сайте
# разаработчика есть пример для модуля mod_gzip,
# но я пока с этим не разбирался...
</IfModule>
Расшифровка полей:
? | что означает | имя колонки | тип колонки | пример |
A | User agent | agent | varchar(255) | Mozilla/4.0(compat;MSIE 6.0;Windows) |
a | CGI arguments | request_args | varchar(255) | user=Smith& |
b | байт передано | bytes_sent | int unsigned | 32561 |
c | текст куки | куки | varchar(255) | Apache=syn.line.net.1300102700823 |
H | HTTP протокол | request_protocol | varchar(10) | HTTP/1.1 |
h | имя удал. хоста | remote_host | varchar(50) | blah.foobar.com |
I | Request ID | id | char(19) | POlFcUBRH30AAALdBG8 |
l | Ident user info | remote_logname | varchar(50) | bobby |
M | Machine ID | machine_id | varchar(25) | web01 |
m | HTTP метод запроса | request_method | varchar(6) | GET |
P | PID процесса | child_pid | smallint unsigned | 3215 |
p | HTTP порт | server_port | smallint unsigned | 80 |
R | реферер | referer | varchar(255) | http://www.biglinks4u.com/page.html |
r | полный запрос | request_line | varchar(255) | GET /foo.htm HTTP/1.1 |
S | время в UNIX | time_stamp | int unsigned | 1005598029 |
s | статус запроса | status | smallint unsigned | 404 |
T | время обработки | request_duration | smallint unsigned | 2 |
t | время | request_time | char(28) | [02/Dec/2001:15:01:26 -0800] |
U | краткий запрос | request_uri | varchar(255) | /books-cycroad.html |
u | узер (из авторизации) | remote_user | varchar(50) | bobby |
v | виртуальный хост | virtual_host | varchar(50) | www.lissyara.su |
Запросец на скорую руку, показывает почасовую нагрузку за определённое число
<?/*select sum(mb) from (*/
select DATE_FORMAT(FROM_UNIXTIME(time_stamp),'%H'),round(sum(bytes_sent)/1024/1024,2) as mb
from apache_logs.access_log
where DATE_FORMAT(FROM_UNIXTIME(time_stamp),'%Y%m%d')='20090529'
GROUP by DATE_FORMAT(FROM_UNIXTIME(time_stamp),'%H')
/*) summ*/?>
|