我想从一个日志文件中计算每秒SQL查询的数量,我想通过从grepinputstdout到某些命令来实时执行它。 (我正在做一些性能testing)
我可以自己写,但肯定会存在。
我看着wc,但没有看到允许这个选项。
我也可以使用它通过从访问日志中输出一个尾部来每秒钟计数请求。
也许你应该尝试logtop
?
tail -f foobar.log |logtop
pv
是你的命令! P ipe V iewer打印关于通过它的数据的统计信息,并且可以在pipe道中的任何位置运行,因为它将stdin直接传递到stdout。 例如:
tail -f /var/log/nginx/access.log | pv --line-mode --rate > /dev/null
pv
命令打印stderr当前每秒行数(默认值是每秒字节数),对于这个特定的数据源(Nginx的默认日志文件),它等于每秒传入的web请求数。 我只关心计数,所以我把stdoutpipe入/dev/null
。 还有像下面这样的选项:
-b
(总行数), --average-rate
平均汇率(自启动以来的平均汇率)和 --timer
(跟踪pipe道走了多久)。 如果你不说--line-mode
,它会计算字节数,这可能不是你想要的服务器日志,但可以在其他地方得心应手。
最后说明: ... | pv -lb > file.txt
... | pv -lb > file.txt
与... | tee file.txt | awk '{printf "\r%lu", NR}'
很相似 ... | tee file.txt | awk '{printf "\r%lu", NR}'
... | tee file.txt | awk '{printf "\r%lu", NR}'
,这对计数行也很方便,但是pv
调用的方式更短,尽pipe输出并不令人兴奋 – pv
默认每秒更新一次, awk
命令不断更新。
watch -n 5 "mysqladmin status | awk -F' ' '{ print \$NF }'"