Как определить количество запросов в секунду на nginx?
Доброго времени суток, необходимо определить количество запросов в секунду сервера nginx через консоль с использованием именно логов, так как имеется множество виртуальных доменов на одном сервере, и определение через status не имеет смысла. Есть команда tail -f /var/log/nginx/mydomain.ru.access.log | pv -lr -i 1 >/dev/null, но она показывает все в реальном времени без остановки процесса, а необходимо в режиме реального времени получить всего лишь 1 ответ с остановкой процесса, в документации к PV ничего подобного найти не смог, подскажите пожалуйста, может есть другие варианты определения количества запросов, буду очень признателен.
awk '{print $1}' - выбираем из лога только время ( например $time_iso8601 )
uniq -c - считаем количество уникальных записей, по сути количество запросов в секунду
sort -rn - сортировка вывода
Таким способом мы получаем список IP адресов, и количество запросов с них:
372170 x.114.x.x
146640 x.114.x.x
56751 x.114.x.x
34789 x.114.x.x
15792 x.114.x.x
4958 x.114.x.x
603 x.114.x.x
26 x.114.x.x
7 x.169.252.x
6 x.114.x.x
3 x.211.52.x
2 x.163.255.x
2 x.55.39.x
1 x.163.255.x
zohan1993, Таким образом он считает не в режиме реального времени, а подсчет идет за какой то период. Необходимо в запросить данные именно в ту секунду, в которую была отправлена команда.
присваиваем переменной DATE время в таком же формате как и в логе nginx (время запуска команды)
ищем все строки содержащие это время
считаем количество этих строк
Глобально - это делается не через консоль, а каким-нибудь ПО соответствующей направленности - тем же ELK, например. Проиндексирует все ваши логи и покажет красивые графики - хоть по количеству запросов, хоть по чему.
Задача стоит не в том что вы предложили, а необходимо вывести только число, без всяких графиков, красивые графики можно построить на VTS+prometheus+Grafana, но этого мне не нужно.
Предоставленная мной команда это делает, но она работает в режиме реалтайма, а мне необходимо по запросу (крону) получать количество запросов в секунду.
Игорь Петров, ну, тогда берёте - и грепаете логи, делов-то. Если это для какого-то мониторинга, то рекомендую всё-таки обойтись без костылей. Есть прекрасный модуль для этого, показывающий и общие цифры, и по серверами отдельно - https://github.com/vozlt/nginx-module-vts
ky0, Про него вам я и написал выше, мне необходимо именно в консоли вывести количество запросов в секунду с лога, а спарсить с VTS та еще проблема, так как через JSON он не может вывести количество запросов в секунду на отдельном виртуальном домене.
через JSON он не может вывести количество запросов в секунду на отдельном виртуальном домене
Ещё как может, просто надо распарсить соответствующий элемент. Сделать это можно каким-нибудь jq или чем-то подобным. У нас именно таким образом, за давностью лет, организован мониторинг.
ky0, Таким образом он тоже выводит все данные из json для домена, в том числе количество запросов по всем кодам 2хх,3хх, и т.д, но задача все же стоит другая :(, решения в гугле и документации к VTS так и не нашел.