mod_performance 0.4 помощь в мониторинге Apache 2.x

Завершающий цикл статей, посвященных модулю apache — mod_performance.Экскурс в историю Это обычный модуль Apache 2.x для Linux: модуль предназначен для сбора и накопления статистики по использованию ресурсов (CPU и memory, время выполнения скрипта) веб-сервером Apache 2.4/2.2/2.0; модуль позволяет производить анализ собранных данных. Он позволяет отслеживать за тем, сколько ресурсов потребляет поступивший веб-серверу запрос. Каждый раз сохраняя следующую информацию: виртуальный хост, которому поступил запрос; файл, который запрашивается; URI запроса; CPU нагрузка в %; использование памяти в %; время обработки запроса. А накопившуюся статистику — позволяет анализировать. В качестве базы данных для сохранения и анализа используется SQLite (MySQL, PostgreSQL, error_log).Модуль позволяет отслеживать как абсолютно все запросы, так и конкретные, отфильтрованные по правилу с помощью регулярных выражений. Точнее будет сказано, что модуль ВСЕГДА обрабатывает только те запросы, которые соответствуют фильтру, содержащему регулярное выражение.

Более раннее описание работы модуля можно прочитать по ссылкам:

0.2–0.3 версия — http://habrahabr.ru/post/120660/ 0.1 и ранее — http://habrahabr.ru/post/119011/ Функционал модуля за время существования был расширен, добавлены новые фичи, оптимизирован механизм сохранения в базе информации.Я решил собрать воедино все новшества и рассказать о них.Небольшое отступление… Есть много альтернативных методов сбора различной статистики, есть замечательные модули mod_status, mod_log_config, которые также могут выполнять подобные (и не очень) с описываемым модулем действия. Статья лишь повествует о еще одном инструменте, который может быть полезен для мониторинга и отладки проблемных моментов на сервере.Чем отличается версия модуля 0.4 от 0.3? Первое отличие Я думаю очень важное отличие. Ранее модуль для каждого запроса запускал два потока, которые следили за запросом, они завершались вместе с потоком записывая данные по потоку в базу данных (лог). Было ограничение на число отслеживаемых потоков и размер стека для создаваемого потока — PerformanceMaxThreads и PerformanceStackSize. Эти параметры больше модулем не используются. Также из него удален пул потоков, который отслеживал за памятью выделяемую для потоков.Теперь за всеми запросами следят три потока. Не буду конкретно расписывать, чем они занимаются, но их всего три. Это значит, что нет ограничения на число запросов, которые будут мониториться.Второе отличие Данные в базу (лог) пишет один поток, а не множество как ранее. Таким образом, уменьшается количество блокировок на базу — особенно это актуально для SQLite. Сделана буферизация записи данных в базу. Т.е теперь данные в лог падают не мгновенно, а когда есть возможность и время туда ее записать.Третье отличие Не секрет, что статистика по процессу берется модулем через procfs. Ранее брались данные только по Process ID, теперь есть возможность считывать данные и по Thread ID- так называемый TID. Это должно быть актуально для apache worker (event).Четвертое отличие Добавлена возможность создавать свои отчеты (отчет — это метод анализа собираемых модулем данных). Модуль по-прежнему несет определенный набор отчетов, так называемый «из коробки». Но в исходных кодах модуля присутствует файл custom.tpl, который расширяет число доступных отчетов модуля. А также позволяет создавать свои собственные запросы к базе данных и отображение полученных результатов. Как это сделать я опишу далее.Пятое отличие Исправлен ряд ошибок, которые приводили к перезапускам сервера apache (надеюсь, новые ошибки не были добавлены). Добавлено отображение того, каким методом GET, POST и т.д. вызывался скрипт.Шестое отличие Появилась возможность писать данные в централизированную удаленную базу данных (для режима MySQL, PostgreSQL). Т.е. теперь данные с разных машин могут аккумулироваться на одном сервере.Детальнее Немного об интерфейсе Еще с версии 0.3 в модуле был переработан интерфейс по анализу собранных данных. Расскажу немного о его особенностях (рис 1).Рис 1.mod_performance 0.4

1. Hide/Show — кнопка «Скрыть/Показать фильтр» — предназначена для сворачивания и разворачивания окна фильтров. 2. Report — выпадающий список доступных отчетов (отчеты анализа накопленных данных)3. Sort Field — номер выводимого поля, по которому будет производится сортировка (не действует на пользовательские отчеты)4. Sort Type — тип сортировки выбранного поля — по-возрастанию или по-убыванию (не действует на пользовательские отчеты)5. Period (days) — интервал в днях от текущего дня за который будут проанализированы данные6. Period begin (Period End) — точная дата и время начала и конца анализируемого периода (если указаны эти значения, то поле Period (days) игнорируется)7–8–9. — Дополнительные параметры фильтра анализируемых данных. Возможно как строгое совпадение, так и не строгое — например значение заканчивающееся на test — %test.10. Ссылка на скачивание самой последней версии11. Ссылка на документацию по модулю12. Значок сортировки данных на странице (v — по-убыванию, ^-по-возрастанию)13. Строка заголовков столбцов14. Фиксированная строка номера столбца. Не сдвигается даже при прокрутке страницы.

Интерфейс модуля использует JavaScript.

Пользовательские отчеты Пример настройки пользовательских отчетов (для CentOS/Redhat/Fedora) поставляемых с исходным кодом модуля: mkdir ~/tmp cd ~/tmp wget http://www.lexvit.dn.ua/modperf/getlast -O mod_performance.tar.gz tar -xvf mod_performance.tar.gz –strip 1 mkdir -p /opt/performance/ chown apache: apache /opt/performance/ chmod 755 /opt/performance/ cp ~/tmp/custom.tpl /opt/performance/ добавить в mod_performance.conf параметр PerformanceCustomReports /opt/performance/custom.tpl service httpd restart Пример отчета: Рис 2.

mod_performance 0.4 report

Список пользовательских отчетов:

Show site average usage in different time period — показать среднюю нагрузку создаваемую сайтом в различные временные периоды Show most popular script by site — показать наиболее часто вызываемый скрипт по каждому сайту Show CPU load range by site — показать распределение нагрузки CPU по каждому сайту Show Memory Usage range by site — показать распределение использования памяти по каждому сайту Show Max CPU load in different time periods by site — показать максимальную нагрузку CPU в различные временные периоды по каждому сайту Show Max Memory Usage in different time periods by site — показать максимальное использование памяти в различные временные периоды по каждому сайту Show Max IO Usage in different time periods by site — показать максимальную IO нагрузку в различные временные периоды по каждому сайту Для создания пользовательского отчета используется следующий синтаксис в файле custom.tpl:

[название отчета] header=Fld 1|Fld 2|Fld 3; ssql=запрос в синтаксисе SQLite; msql=запрос в синтаксисе MySQL; psql=запрос в синтаксисе PostgerSQL; sort=1,2; В квадратных скобках пишется название отчета, оно будет выводится в поле 2 рис. 1.Header — название и список выводимых полей по порядку в select разделенные знаком »|». В примере, первое подхваченное поле из select будет выведено в столбце Fld 1, второе в столбце Fld 2 и т.д. Список полей №13 на рис 1.Ssql, msql, psql — запросы к базе. Рекомендую использовать не прямые названия полей таблицы, а их псевдонимы. Отчет отображается, если для текущей конфигурации БД есть запрос (SSQL, MSQL, PSQL)Соответствие поля таблицы и псевдонима: id: ITEMNUMBER: — идентификатор записиdateadd: DATEADD: — дата добавления записиhost: FORHOST: — хост, к которому осуществлялся запросuri: REQUESTURI: — URI запросаscript: CALLEDSCRIPT: — вызываемый скриптcpu: CPUUSAGE: — CPU в %memory: MEMUSAGEINPRCT: — память в %exc_time: EXECUTIONTIME: — время исполнения запросаcpu_sec: CPUUSAGEINSEC: memory_mb: MEMUSAGEINMB: — память в Mbbytes_read: BYTESREAD:- байт прочитаноbytes_write: BYTESWRITE: — , fqn pfgbcfyjhostnm: HOSTNAME: — запрос осуществлялся на сервере…Поля для фильтра: FILTER: — учитывать поля фильтра: PERIOD: — учитывать введенный периодperformance — : TBL: — псевдоним таблицы

Пример:

select count (*) as t1, sum (: CPUUSAGE:)/count (*) as t2, sum (: MEMUSAGEINPRC T:)/count (*) as t3, sum (: BYTESREAD:+: BYTESWRITE:)/count (*) as t4, : CALLEDSCRIPT:, : FORHOST: from: TBL: where: FILTER: and: PERIOD: group by: CALLEDSCRIPT:,: FORHOST: Сохранение данных в одном централизированном хранилище Настройка модуля для работы с централизированным хранилищем:1) в централизированном хранилище (MySQL, PostgreSQL) необходимо создать пользователя, базу данных и таблицу.MySQL: CREATE TABLE IF NOT EXISTS performance (id INT NOT NULL AUTO_INCREMENT, dateadd DATETIME, host VARCHAR (255), uri VARCHAR (512), script VARCHAR (512), cpu FLOAT (15,5), memory FLOAT (15,5), exc_time FLOAT (15,5), cpu_sec FLOAT (15,5), memory_mb FLOAT (15,5), bytes_read FLOAT (15,5), bytes_write FLOAT (15,5), hostnm CHAR (32), PRIMARY KEY (id))PostgreSQL: create table performance (id SERIAL, dateadd timestamp, host varchar (255), uri varchar (512), script varchar (512), cpu float (4), memory float (4), exc_time float (4), cpu_sec float (4), memory_mb float (4), bytes_read float (4), bytes_write float (4), hostnm char (32), PRIMARY KEY (id))2) на серверах, с которых будут собираться данные прописать в mod_performance.confPerformanceLogType MySQL или PostgresPerformanceHostId HostName (вписать уникальное имя для каждого хоста, например его IP или прочее)PerformanceDbUserName usernamePerformanceDBPassword userpasswordPerformanceDBName dbnamePerformanceDBHost hostname — IP адрес или имя сервера с централизированным хранилищем данныхДля тех у кого был установлен модуль версии 0.3 В версии 0.4 поменялся формат таблицы данных. Для корректного функционирования 0.4 версии старую таблицу необходимо модифицировать: SQLITE: ALTER TABLE performance ADD hostnm CHAR (32)MySQL: ALTER TABLE performance ADD hostnm CHAR (32)PostreSQL: ALTER TABLE performance ADD hostnm CHAR (32)Ссылки и документация Документация секция mod_performance 0.4: http://wiki.bayrepo.net/ru/docshttp://wiki.bayrepo.net/en/docsСкачать модуль:

wget http://git.bayrepo.net/modperformance/snapshot/modperformance-master.tar.gz

© Habrahabr.ru