Вторник, 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 секунду?
Что-то оно не хочет накатываться на 0.7.39…
Там простой конфликт. Вам сделать отдельный patch?
Если можно. Что-то мне подсказывает, что я не силен в Ц, и сам больше сломаю, чем починю. Кстати, если RPS будет еще и после патча “captures in regex locations” работать, то вообще супер. Хотя, если верить во включение CiRL в, скажем, 7.40, то может быть стоит подождать этой версии.
Форма комментирования для «Nginx: а сколько у нас запросов в секунду?»
Как временное решение, вы можете взять из git мой репозиторий в котором есть этот патч. Сейчас там 0.7.40. Брать отсюда git://catap.ru/nginx/catap.git