Есть ли команда Unix / Linux для подсчета строк в секунду от стандартного ввода?


22

Я пытаюсь подсчитать количество запросов SQL в секунду из файла журнала, и я хочу сделать это в режиме реального времени, передав поток stdout из grep в какую-то команду. (Я делаю некоторые тесты производительности)

Я мог бы написать это сам, но думал наверняка, что это будет.

Я посмотрел на туалет, но не увидел возможности разрешить это.

Я также мог бы использовать его для подсчета запросов в секунду, передавая хвост из журнала доступа.



Я ищу что-то более общее, полезное, к чему относится этот вопрос.
— Digidigo

Ответы:


2
watch -n 3 "wc -l logfile"

справочная страница

watch - периодически запускать программу, отображая вывод в полноэкранном режиме. По умолчанию программа запускается каждые 2 секунды; используйте -n или --interval, чтобы указать другой интервал.


45

pvэто ваша команда! P фе V iewer печатает статистику о прохождении данных через него, и может работать в любом месте трубопровода, так как это трубы стандартного ввода непосредственно через стандартный вывод. Например:

tail -f /var/log/nginx/access.log | pv --line-mode --rate > /dev/null

Команда pvвыводит в stderr текущее количество строк в секунду (по умолчанию - байты в секунду), что для данного конкретного источника данных (файл журнала по умолчанию Nginx) соответствует входящим веб-запросам в секунду. Я забочусь только о счетах, так что я в трубу /dev/null. Есть также варианты, такие как:

  • -b (общее количество строк),
  • --average-rate (средняя скорость с начала), и
  • --timer (отслеживает, как долго труба идет).

Если вы не скажете --line-mode, он будет считать байты, что, вероятно, не то, что вы хотите для журналов сервера, но может быть удобно в другом месте.

Последнее замечание: ... | pv -lb > file.txtочень похоже ... | tee file.txt | awk '{printf "\r%lu", NR}', что также удобно для подсчета строк, но pvвызов намного короче, хотя вывод не такой захватывающий - pvобновляется каждую секунду по умолчанию, в то время как эта awkкоманда обновляется непрерывно.


Можно ли получить только одно значение из PV? Мне нужно среднее значение за период времени для целей мониторинга. Поэтому мне нужно присвоить значение переменной.
— Sonique

@ Sonique - это клочок, потому что это не то, pvдля чего он создан (я бы достиг этого на awkвашем месте), но, конечно, это возможно. Предположим twilight stream --timeout 5, это команда, которая в течение 5 секунд будет выполнять выборку из спритцера Twitter, а затем завершать работу RATE="$(twilight stream --timeout 5 | pv --line-mode --rate --force 2>&1 1>/dev/null | tr -s '\r\n' '\n' | tail -1)", а затем echo $RATEвыдает что-то вроде «[40,8 / s]» (обратите внимание на дополнительный --forceфлаг, поскольку pvs stderrбольше не является TTY).
— февраля

Кажется, не работает для меня надежно для всех программ; удаление > /dev/nullпоказывает, что выходные данные теперь «блочные» и больше не передаются плавно. Возможно, unbufferэто необходимо для некоторых производящих программ, чтобы они не переключались на выходную буферизацию блоков, когда обнаруживали, что они передаются по каналу?
— nh2

13

Может стоит попробовать logtop?

tail -f foobar.log |logtop

Это вершина журнала, на которую вы ссылаетесь? github.com/JulienPalard/logtop
— digidigo

Да, если вы используете debian, в хранилище пакетов
— package.debian.org/wheezy/logtop

черт, я думаю, что это то, что мне нужно, но я не смог заставить его скомпилировать в CentOs
— digidigo

1
watch -n 5 "mysqladmin status | awk -F'  ' '{ print \$NF }'"

Я не мог заставить это работать. Вы уверены в синтаксисе?
— Digidigo

Какую ошибку вы получаете? Вы настроили ~/.my.cnfдля запуска mysqladminбез запроса пароля?
— кванты
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.