Вторник, 29 Апрель 2008
Nginx: а сколько у нас запросов в секунду?
Статистика nginx’а хороша. Она даже дает какие‑то знания. Но понять сколько запросов в секунду у нас идет из нее, нет, возможно, но не просто.
Этот patch добавляет в статистику одну строчку “Request/sec”, которая и показывает сей жизненно важный параметр.
Обновляются данные не чаще чем раз в секунду.
Пример статистики после наложения patch:
Active connections: 15
server accepts handled requests
90087 90087 90095
Reading: 8 Writing: 7 Waiting: 0
Request/sec: 8924
Комментарии
Это, кстати, на самом деле жызненно. Очень приятно в отчотах начальству вытягивать пипи… хвастаться нагрузкой (: Когда я вырасту и у меня будут усы, я обязательно этим воспользуюсь.
Доброго Кирилл, было бы интереснее, если патч показывал сколько реквестов поступает с каждого ip-шника за секунду :)
Могу я поинтересоваться смыслом?
Т.е. Request/sec для конкретного location я применение вижу и мне оно интересно, а вот конкретного ip’шника…
Ну, например, чтобы в дальнейшем можно было это использовать для ограничения кол-ва запросов в секунду с определенного(-ных) ip. Однако идея для конкретного локейшена тоже интересна, я как то не подумал о такой реализации. :)
Понимаешь ли, такая статистика может писаться, но ее проще считать анализируя access.log.
Почему не стоит делать этого на уровне nginx’а:
Вообще написать такой модуль можно, но тогда нужно будет в config’е указывать диапазоны для чего считать. Но зачем мне все еще не понятно :)
я как бы не уточнил.. сорри. Да, согласен, в stub_status этого совершенно не нужно.
Однако, для использования в nginx это было бы удобно. Для чего ? Обьясню. Есть у меня подопечный сервер, который почти постоянно боты донимают запросами. Причем кол-во соединений с каждого ip адреса до 50 (бывает до сотни), а вот запросов с каждого такого ip приходит от 50 до ~2000 за минуту. Вот собственно и хочется ограничить особо настойчивых…
Надеюсь, мысль я изложил более-менее вразумительно :)
Напиши в config’е:
Если у кого-то будет больше 25 соеденений в секунду, ему скажут 503.
За подробностями сюда
Ничего подобного ;)
Это не работает на мелкой статике в следствие логики событийных систем и Сысоев, зная об этом не спешит это исправить.
А не работает потому, что например после вызова epoll/kqueue в очереди скажем 500 коннектов от одного IP. nginx при обработке каждого соединения отправляет ему данные и закрывает коннект уменьшая счетчик — таким образом лимит никогда не будет достигнут и соответственно все 500 соединений в очереди будут обработаны :)
Какая-то софистика, честно.
Вы считаете что он смотрит раз в 1 секунду?
Форма комментирования для «Nginx: а сколько у нас запросов в секунду?»
Что-то оно не хочет накатываться на 0.7.39…
Там простой конфликт. Вам сделать отдельный patch?
Если можно. Что-то мне подсказывает, что я не силен в Ц, и сам больше сломаю, чем починю. Кстати, если RPS будет еще и после патча “captures in regex locations” работать, то вообще супер. Хотя, если верить во включение CiRL в, скажем, 7.40, то может быть стоит подождать этой версии.
Как временное решение, вы можете взять из git мой репозиторий в котором есть этот патч. Сейчас там 0.7.40. Брать отсюда git://catap.ru/nginx/catap.git