Мониторинг нагрузки создаваемой www сайтами и mysql нагрузки по пользователям

Мониторинг моментов создающих нагрузку непосредственно на сайтах, осуществляется по access логам для каждого из доменов. Естественно логи должны быть включены для домена. Но там нагрузку CPU вам уже не покажет, логи нужно анализировать. Анализируются размеры логов, там где много ошибок(error.log), много запросов(access.log). По размерам уже собственно видно, у каких сайтов больше запросов и ошибок. Дальше анализ ошибок вручную глазами, не все ошибки критические, лог файл ошибок может быть мега большим, но там нет критических ошибок, значит можно просто отключить логгирование и не париться.

Для дальнейшего анализа включается генератор отчетов. На картинке awstats, он тоже не плохой, но можно использовать различные другие инструменты для анализа access логов.

accces логи и awstats в ispmanager
accces логи и awstats в ispmanager

В этой обобщенной статистике вы уже увидите, какие url запрашиваются наиболее часто, и их суммарное количество, какие url с ошибками наиболее часто идут и их суммарное кол-во, какие ip наиболее часто запрашивают сайт. И уже анализируете что делать с этим. Например, кто-то парсит или просто флудит и идёт масса запросов с одних ip. Все они будут на первом месте там в отчетах по ip. Но с IP тут, надо учитывать ещё, если у вас настроен кеш, то запросы к серверу де-факто идут от IP того сервиса (w.tools или cloudflare), а не от клиента непосредственно. Ведь сервис кеширования — это по сути прокладка между сервером и клиентом. И они же(ip сервиса) будут в логах. Для того, чтобы в логи писались ip именно клиентов, сервис при запросах к серверу должен посылать ip клиента в заголовках, а на сервере должен быть настроен nginx конфиг, который будет эти ip из заголовков воспринимать как реальные, чтобы именно они писались в access и error логи. Этот момент мы уже разбирали на примере защиты от флуда при помощи fail2ban. Хотя, сервис кеширования банит флудящие ip и без этого обычно.

Вот собственно по анализу лог файлов сайта и можно получить информацию о нагрузке на доменах, т.е. там цифр нагрузки по цпу или на память, или la, вы не увидите.

А все скрипты на сайтах, выполняются уже от имени соответствующего системного пользователя. Как делается мониторинг нагрузки от пользователей системы мы рассматривали предыдущей статье. Причем в отчёты цп по пользователям не входит его нагрузка на mysql. Пользователь mysql — это отдельный пользователь в системе.

процессы пользователя mysql
процессы пользователя mysql

Приведу на примере: в системе есть пользователь vasya, а в бд есть mysql пользователь putin со своими базами. Пользователь vasya запускает php скрипт и подключается к бд под именем putin и делает там мега тяжелый запрос в mysql на всю катушку нагружая цп. Результат нагрузки на системный cpu будет такой:

  • vasya — 0%
  • mysql — 100%

Потому что, систему уже нагружает пользователь mysql. А нагрузка от vasya — это нагрузка от всего остального его кода на сайтах, от количества запросов к сайтам, ошибок в коде, кривых скриптов с какими-то жрущими ресурсы функциями. Нагрузка же пользователя mysql — это создаваемая нагрузка всеми пользователями mysql сервера баз данных.

Для того, чтобы собрать статистику сколько именно жрет mysql пользователь putin , а сколько другие пользователи баз данных, нужно в mariadb включить настройку userstat=1 и собирать статистику пользователей mysql при помощи этого плагина https://mariadb.com/kb/en/user-statistics/

Если же mariadb нет или его версия старенькая, тогда для анализа mysql пользователей включают логи различных запросов, анализируют аналогично как и в случае с сайтами, логи медленных запросов, текущие запросы из show processlist и прочее.