Debian.pro

Блог для пользователей и администраторов Debian


Хинт: подсчет количества новых строк в файле за секунду или другой промежуток времени. Количество запросов в секунду к какому-либо демону (nginx?).

Много раз наблюдал, когда системный администратор для того, чтобы узнать, сколько запросов приходит ему на nginx за секунду, сидит и выгрепывает определенную секунду из лога, после чего делает | wc -l. Не знаю, зачем так извращаться, если есть pv.
Вообще pv позволяет посчитать, сколько строчек в секунду появляется в файле (если быть занудой — то сколько строчек в секунду подается ему на STDIN). Легко предположить, что при правильном access.log’e у nginx’a количество новых строчек == количеству отправленных ответов на запросы. А при ещё более правильном — количество запрошенных страниц.
Вообще эту штуку можно натравить на любой лог, фантазируйте сами.

Для начала поставим pv:
root@debian:~# aptitude install pv
Самый простой пример:
root@debian:~# tail -f /var/log/nginx/access.log | pv -lr
Где-то там внизу у нас замелькают какие-то цифры. При желании их можно разглядеть. Плюс этой команды в том, что мы можем одновременно видеть, что происходит в логе.

Представим, что нам не нужно смотреть, что происходит в самом логе. Сделаем так:
root@debian:~# tail -f /var/log/nginx/access.log | pv -lr >/dev/null
[3.94/s ]

Всё хорошо, но такая статистика — цифры в вакууме. Значение будет скакать от нуля до пикового.
Нам нужна усредненная статистика, по количеству строк в секунду, за последние 30 секунд:
root@debian:~# tail -f /var/log/nginx/access.log | pv -lr -i 30 >/dev/null
[0.933/s ]

Первое значение появится через 30 секунд, потом каждые 30 секунд будет обновляться. Такое значение колеблется намного меньше и ему уже можно верить при озвучивании цифр.
Запустив такую штуку в скрине с -i 86400 мы получим усредненное значение за сутки.

Ну и напоследок. Вам никто не запрещает использовать grep. Например, чтобы отследить количество обращений к одной странице или количество хитов с определенного адреса.
Делать это просто:
root@debian:~# tail -f /var/log/nginx/access.log | grep 192.168.0.10 | pv -lr -i 30 >/dev/null
[0.125/s ]
Здесь мы видим, что хост 192.168.0.10 последние 30 секунд обращался к нам с частотой 0.125 запроса в секунду.

Или так:
root@debian:~# tail -f /var/log/nginx/access.log | grep "\"-\"" | pv -lr -i 30 >/dev/null
[137.124/s ]
137.124 запроса в секунду с пустым реферером. Имеет смысл запретить на время коннекты с пустым реферером, не правда ли?

И grep -v тоже никто не запрещает использовать:
root@debian:~# tail -f /var/log/nginx/access.log | grep -v "/index.php" | pv -lr -i 30 >/dev/null
[15.541/s ]
Здесь мы видим 15.541 запроса в секунду к страницам, кроме index.php (в т.ч. и без index.php?чтототам).

Пользуйтесь на здоровье и поменьше вам ddos’ов, по которым нужно писать отчеты.


Комментарии (1):

  1. viert :

    Круто! Даже в голову не приходило.. Правда обычно юзкейс другой, посмотреть цифры на каждую секунду определенного периода, всплеск найти. Тут проще однострочник написать на grep -c

Написать комментарий