Получение статистики использования процессора / диска / трафика по доменам для Nginx + php-fpm
Добрый день всем!
Я сталкиваюсь с проблемой, которой я никогда не делал раньше, и полдня поиска в Google (и особенно через Stackru, сообщество Nginx и т. Д. Тоже) не нашел ничего полезного.
У меня есть сервер с установленным Nginx (1.4) + PHP-fpm (5.4). В конфиге Nginx есть что-то около 100+ серверов (доменов). На самом деле эти домены "принадлежат" разным людям, и мне нужно знать приблизительное общее использование ЦП, дисков и трафика Nginx и PHP для каждого из этих доменов. Я легко могу рассчитать трафик, анализируя журналы доступа, так как не знаю, как я могу получить загрузку процессора и диска отдельно для каждого домена:(Статистика не обязательно должна быть в реальном времени - если я получаю общие значения за день, все в порядке. Статистика не обязательна, чтобы быть точной - +/-10% абсолютно нормально. Тем не менее, я не вижу никакого полезного решения.
Заранее спасибо за любую идею!
PS Я знаю, что могу запустить отдельную машину OpenVZ для каждого веб-сайта, и это позволило бы мне легко измерить загрузку процессора и диска для каждого из них, но мне не нравится решение. Пожалуйста, помогите мне найти альтернативный путь!
1 ответ
Насколько я мог найти, ни в Nginx, ни в PHP-FPM нет встроенной поддержки такой метрики; так что, похоже, нет способа измерить потребление ресурсов на сайте внутри Nginx. Но есть хитрость для измерения ресурсов, используемых PHP (которые почти всегда составляют не менее 95% всех потребляемых ресурсов, если БД находится на отдельной машине). Для этого нам нужно создать отдельный пул для каждого сайта в конфигурации PHP-FPM:
[site-A]
listen = /var/run/php5-fpm.A.sock
user = user-A
group = user-A
(...)
[site-B]
listen = /var/run/php5-fpm.B.sock
user = user-B
group = user-B
(...)
Затем нам нужно настроить Nginx, чтобы он передавал запрос в FCGI, используя соответствующий сокет для каждого сайта. И вуаля, теперь мы можем измерить потребление ресурсов на пользователя, используя стандартные бухгалтерские утилиты, и фактически это будет означать данные для каждого сайта. Тем не менее эти данные не учитывают ресурсы, потребляемые самим Nginx; но, насколько я вижу, это все еще намного лучше, чем 90% точности, которую я желал. Чтобы было еще лучше, я могу рассчитывать трафик для статических файлов, используя отдельный журнал для каждого сайта, и это значение, очевидно, будет очень близко к объему использования диска самим Nginx. Так что я бы не пропустил сайт, который обслуживает множество статических файлов, в то время как потребление ресурсов PHP умеренно.