Я владелец небольшого хостинга (около 200 активных клиентов) и меня заинтересовала тема мониторинга нагрузки на CPU и MySQL.
На некоторых крупных хостингах нагрузка на CPU измеряется в «CP» и на MySQL в «секундах».
Предлагаю Вашему вниманию идею и теоретическую реализацию данной схемы мониторинга на основе Process Accounting и Percona User Statistics.
Единица измерения — CP (cpu points). Измеряется системой Process accounting в Linux.
Установим сначала демон psacct (RedHat) или acct (Debian).
Демон собирает информацию по всем выполняемым процессам пользователя и записывает это в /var/account.
Далее, командой sa мы можем получить информацию по каждому пользователю и его нагрузке.
Я использую sa с флагом

Первая строка — общее потребление в системе. Далее, построчно, информация о потребляемых ресурсах каждым пользователем.
В третьем столбце то, что нам нужно, нагрузка на процессор в CP.
Единица измерения — секунды. Измеряется с помощью Percona User Statistics.
Данные каждого запроса записываются в системную таблицу. В нашем случае, к колонке CPU_TIME прибавляется время каждого запроса.
К сожалению, для получения статистики на MySQL 5.5 требуется переустановка MySQL. Я нашел патч User Statistic, но только для MySQL 5.0.77
Вывод информации о нагрузке производится запросом к базе данных INFORMATION_SCHEMA:

Я только начал тестирование данного подхода, который имеет конкретные цифры и алгоритмы расчета нагрузки, но уже видно кого из пользователей можно двигать на тариф выше.
Я реализовал такой подход:
P.S. Система не претендует на совершенную и просто раскрывает методы подхода к измерению нагрузки пользователями.
На некоторых крупных хостингах нагрузка на CPU измеряется в «CP» и на MySQL в «секундах».
Предлагаю Вашему вниманию идею и теоретическую реализацию данной схемы мониторинга на основе Process Accounting и Percona User Statistics.
Нагрузка на CPU
Единица измерения — CP (cpu points). Измеряется системой Process accounting в Linux.
Схема работы
Установим сначала демон psacct (RedHat) или acct (Debian).
yum install psacct
или apt-get install acct
Демон собирает информацию по всем выполняемым процессам пользователя и записывает это в /var/account.
Далее, командой sa мы можем получить информацию по каждому пользователю и его нагрузке.
Я использую sa с флагом
--user-summary
: 
Первая строка — общее потребление в системе. Далее, построчно, информация о потребляемых ресурсах каждым пользователем.
В третьем столбце то, что нам нужно, нагрузка на процессор в CP.
Нагрузка на MySQL
Единица измерения — секунды. Измеряется с помощью Percona User Statistics.
Схема работы
Данные каждого запроса записываются в системную таблицу. В нашем случае, к колонке CPU_TIME прибавляется время каждого запроса.
К сожалению, для получения статистики на MySQL 5.5 требуется переустановка MySQL. Я нашел патч User Statistic, но только для MySQL 5.0.77
Вывод информации о нагрузке производится запросом к базе данных INFORMATION_SCHEMA:
SELECT `USER`,`CPU_TIME` FROM `USER_STATISTICS` ORDER BY `USER_STATISTICS`.`CPU_TIME` DESC;

Итог
Я только начал тестирование данного подхода, который имеет конкретные цифры и алгоритмы расчета нагрузки, но уже видно кого из пользователей можно двигать на тариф выше.
Я реализовал такой подход:
- Каждый час собирается статистика нагрузки и записывается в таблицу биллинг системы WHMCS.
- Написанный модуль добавляет вкладку «Нагрузка» для хостинг-услуг.
- Во вкладке выводим график нагрузки по дням (CPU, MySQL).
- В случае превышения нагрузки пользователем, высылаем ему уведомления N-раз, в случае отсутствия реакции, производим блокировку аккаунта через API биллинга.
P.S. Система не претендует на совершенную и просто раскрывает методы подхода к измерению нагрузки пользователями.