Я пытаюсь подсчитать количество запросов SQL в секунду из файла журнала, и я хочу сделать это в режиме реального времени, передав поток stdout из grep в какую-то команду. (Я делаю некоторые тесты производительности)
Я мог бы написать это сам, но думал наверняка, что это будет.
Я посмотрел на туалет, но не увидел возможности разрешить это.
Я также мог бы использовать его для подсчета запросов в секунду, передавая хвост из журнала доступа.
linux
performance
digidigo
источник
источник
Ответы:
справочная страница
watch - периодически запускать программу, отображая вывод в полноэкранном режиме. По умолчанию программа запускается каждые 2 секунды; используйте -n или --interval, чтобы указать другой интервал.
источник
pv
это ваша команда! P фе V iewer печатает статистику о прохождении данных через него, и может работать в любом месте трубопровода, так как это трубы стандартного ввода непосредственно через стандартный вывод. Например:Команда
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
для чего он создан (я бы достиг этого на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
флаг, посколькуpv
sstderr
больше не является TTY).> /dev/null
показывает, что выходные данные теперь «блочные» и больше не передаются плавно. Возможно,unbuffer
это необходимо для некоторых производящих программ, чтобы они не переключались на выходную буферизацию блоков, когда обнаруживали, что они передаются по каналу?Может стоит попробовать
logtop
?источник
источник
~/.my.cnf
для запускаmysqladmin
без запроса пароля?