ログファイルから1秒あたりのSQLクエリの数を数えようとしていますが、grepからstdoutをコマンドにパイプすることでリアルタイムでそれを行いたいと思っています。(私はいくつかのパフォーマンステストを行っています)
私は自分でそれを書くことができましたが、これは確かに存在すると考えました。
wcを見ましたが、これを許可するオプションが見つかりませんでした。
また、アクセスログからテールをパイプすることで、1秒あたりのリクエストをカウントするために使用できます。
ログファイルから1秒あたりのSQLクエリの数を数えようとしていますが、grepからstdoutをコマンドにパイプすることでリアルタイムでそれを行いたいと思っています。(私はいくつかのパフォーマンステストを行っています)
私は自分でそれを書くことができましたが、これは確かに存在すると考えました。
wcを見ましたが、これを許可するオプションが見つかりませんでした。
また、アクセスログからテールをパイプすることで、1秒あたりのリクエストをカウントするために使用できます。
回答:
pvあなたの命令です!Pの IPEのVそれを通過するデータについてのプリントの統計iewer、および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コマンドは継続的に更新されます。
pvは構築されたものではないからです(awk私があなただったら手を伸ばすでしょう)が、もちろんそれは可能です。仮定twilight stream --timeout 55秒間の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、一部のプロデュースプログラムでは、パイプされていることを検出したときに出力バッファリングのブロックに切り替えないようにする必要がありますか?
たぶんあなたは試してみるべきlogtopですか?
tail -f foobar.log |logtop