web-dev-qa-db-ja.com

stdinから1秒あたりの行数をカウントするUnix / Linuxコマンドはありますか?

ログファイルから1秒あたりのSQLクエリの数を数えようとしています。grepからstdoutをいくつかのコマンドにパイプ処理することで、リアルタイムで計算したいと考えています。 (私はいくつかのパフォーマンステストを行っています)

自分で書くこともできましたが、確かにあると思いました。

私はトイレを見てみましたが、これを許可するオプションが表示されませんでした。

また、アクセスログからテールをパイプすることで、1秒あたりのリクエスト数をカウントするためにも使用できます。

23
digidigo
watch -n 3 "wc -l logfile"

man page

watch-プログラムを定期的に実行し、出力を全画面で表示しますデフォルトでは、プログラムは2秒ごとに実行されます。別の間隔を指定するには、-nまたは--intervalを使用します。

2
Nim

pv はあなたのコマンドです! [〜#〜] p [〜#〜]ipe[〜#〜] v [〜#〜] iewerはstdinを直接stdoutにパイプするため、通過するデータに関する統計を出力し、パイプラインのどこでも実行できます。例えば:

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

pvコマンドは、現在の1秒あたりの行数(デフォルトは1秒あたりのバイト数)をstderrに出力します。これは、この特定のデータソース(Nginxのデフォルトログファイル)の場合、1秒あたりの着信Webリクエストに相当します。私はカウントのみを気にしているので、標準出力を/dev/nullにパイプします。次のようなオプションもあります。

  • -b(合計行数)、
  • --average-rate(開始時からの平均レート)、および
  • --timer(パイプの経過時間を追跡します)。

--line-modeを指定しないと、バイト数がカウントされます。これは、おそらくサーバーログに必要な値ではありませんが、他の場所では便利です。

最後の注記:... | pv -lb > file.txt... | tee file.txt | awk '{printf "\r%lu", NR}'によく似ています。これも行を数えるのに便利ですが、pv呼び出しは少し短いですが、出力はそれほど刺激的ではありません— pvはデフォルトで毎秒更新されますが、そのawkコマンドは継続的に更新されます。

49
chbrown

多分あなたはlogtopを試すべきですか?

tail -f foobar.log |logtop
13
klocek
watch -n 5 "mysqladmin status | awk -F'  ' '{ print \$NF }'"
1
quanta