Узнать количество рабочих Apache, потребляемых IP-адресом в мгновенный момент времени, можно, выполнив:
netstat -pantu | grep :80 |sort | uniq -c |grep <IP_HERE, eg: 192.168> | wc -l
Это полезно, например, во время DDoS-атаки. Исходя из этого, можно определить, эффективны ли контрмеры для сокращения количества рабочих Apache, которые создаются для обработки слишком большого трафика и т. Д.
Недавно я столкнулся с ситуацией, когда произошла атака на общий IP-адрес, и я не мог легко определить, какой пользователь потребляет больше всего рабочих Apache. Как определить такую стоимость?
Было предложено следить за трафиком для каждого пользователя, но это, похоже, не дает ответа, который я ищу, когда создается большое количество рабочих, которые создают тупик, и поэтому я дошел до точки, где я Я пытаюсь изолировать владение работником для каждого пользователя.
вы могли бы разбирать mod_status ж /ExtendedStatus On
вывод. Это состояние в реальном времени всех рабочих / потоков / детей. плюс SSL.
Осторожно, это затрудняет отслеживание фактического количества запросов, если сервер отвечает быстро (вы не видите, что происходит между перезагрузками статуса - только последний запрос рабочего).
curl 'http://localhost/server-status' | perl -ne 'print "$1\n" if m~<td nowrap>(.*?)</td>.*</td></tr>~ ' | sort | uniq -c | sort -n
или использовать хардкорный grep для заголовков 'Host:' в сниффе tcpdump - это не дает счетчика рабочих в реальном времени, но показывает поток сервера в реальном времени - так что вам нужно сделать свое собственное (sort|uniq|sort
) выборка, если она прокручивается слишком быстро - но вы можете увидеть ВСЕ запросы служил спросил. Будьте осторожны, это небезопасный парсер (заголовки / пакеты могут быть искажены и т. Д.)
tcpdump -qlnpA dst port 80 | egrep '^Host:'
вы можете пофантазировать с этим tcpdump, например
tcpdump -qlnpA dst port 80 | egrep -e '^Host:' -e '(GET|POST)\s.*HTTP'
если вы не используете grep для IP-адреса сервера, вы можете узнать, просто посмотрев на результат. Если нет, вы можете использовать sed, чтобы получить только IP-адрес клиента, а затем используйте sort
и uniq -c
для подсчета, но будет легче поддерживать сценарий.