Search
Write a publication
Pull to refresh

Мониторинг нагрузки пользователей

Я владелец небольшого хостинга (около 200 активных клиентов) и меня заинтересовала тема мониторинга нагрузки на CPU и MySQL.
На некоторых крупных хостингах нагрузка на 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;



Итог


Я только начал тестирование данного подхода, который имеет конкретные цифры и алгоритмы расчета нагрузки, но уже видно кого из пользователей можно двигать на тариф выше.

Я реализовал такой подход:

  1. Каждый час собирается статистика нагрузки и записывается в таблицу биллинг системы WHMCS.
  2. Написанный модуль добавляет вкладку «Нагрузка» для хостинг-услуг.
  3. Во вкладке выводим график нагрузки по дням (CPU, MySQL).
  4. В случае превышения нагрузки пользователем, высылаем ему уведомления N-раз, в случае отсутствия реакции, производим блокировку аккаунта через API биллинга.


P.S. Система не претендует на совершенную и просто раскрывает методы подхода к измерению нагрузки пользователями.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.