ログファイルから1秒あたりのSQLクエリの数を数えようとしています。grepからstdoutをいくつかのコマンドにパイプ処理することで、リアルタイムで計算したいと考えています。 (私はいくつかのパフォーマンステストを行っています)
自分で書くこともできましたが、確かにあると思いました。
私はトイレを見てみましたが、これを許可するオプションが表示されませんでした。
また、アクセスログからテールをパイプすることで、1秒あたりのリクエスト数をカウントするためにも使用できます。
watch -n 3 "wc -l logfile"
man page
watch-プログラムを定期的に実行し、出力を全画面で表示しますデフォルトでは、プログラムは2秒ごとに実行されます。別の間隔を指定するには、-nまたは--intervalを使用します。
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
コマンドは継続的に更新されます。
多分あなたはlogtop
を試すべきですか?
tail -f foobar.log |logtop
watch -n 5 "mysqladmin status | awk -F' ' '{ print \$NF }'"