Я пытаюсь подсчитать количество SQL-запросов в секунду из файла журнала, и я хочу делать это в реальном времени, передавая stdout из grep в какую-то команду. (Я провожу тестирование производительности)
Я мог бы написать это сам, но думал наверняка, что это будет.
Я посмотрел на wc, но не нашел возможности разрешить это.
Я также мог бы использовать его для подсчета запросов в секунду, передавая хвост из журнала доступа.
pv
твоя команда! пипе Viewer печатает статистику о данных, проходящих через него, и может работать в любом месте вашего конвейера, поскольку он передает stdin напрямую в stdout. Например:
tail -f /var/log/nginx/access.log | pv --line-mode --rate > /dev/null
В pv
команда выводит в stderr текущее количество строк в секунду (по умолчанию - байтов в секунду), что для этого конкретного источника данных (файл журнала Nginx по умолчанию) соответствует входящим веб-запросам в секунду. Меня интересует только счетчик, поэтому я передаю stdout в /dev/null
. Также есть такие варианты, как:
-b
(общее количество строк), --average-rate
(средняя скорость с момента запуска), и --timer
(отслеживает, как долго шла труба).Если ты не скажешь --line-mode
, он будет считать байты, что, вероятно, не то, что вам нужно для журналов сервера, но может пригодиться в другом месте.
Заключительное примечание: ... | pv -lb > file.txt
очень похоже ... | tee file.txt | awk '{printf "\r%lu", NR}'
, что также удобно для подсчета строк, но pv
звонок намного короче, хотя результат не такой захватывающий - pv
обновляется каждую секунду по умолчанию, в то время как awk
команда постоянно обновляется.
Может тебе стоит попробовать logtop
?
tail -f foobar.log |logtop
watch -n 3 "wc -l logfile"
страница руководства
смотреть - периодически выполнять программу, выводя ее в полноэкранный режим. По умолчанию программа запускается каждые 2 секунды; используйте -n или --interval, чтобы указать другой интервал.
watch -n 5 "mysqladmin status | awk -F' ' '{ print \$NF }'"