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


22

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

私は自分でそれを書くことができましたが、これは確かに存在すると考えました。

wcを見ましたが、これを許可するオプションが見つかりませんでした。

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



私は、その質問が指すものよりも一般的に有用なものを探しています。
デジディゴ

回答:


2
watch -n 3 "wc -l logfile"

マニュアルページ

watch-プログラムを定期的に実行し、出力をフルスクリーンで表示するデフォルトでは、プログラムは2秒ごとに実行されます。-nまたは--intervalを使用して、異なる間隔を指定します。


45

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から1つの値のみを取得することは可能ですか?監視のために期間の平均値が必要です。だから私は変数に値を割り当てる必要があります。
ソニーク

@Soniqueそれはクラッジです、なぜならそれ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です)。
-chbrown

私にとって、すべてのプログラムで確実に動作するとは思えません。> /dev/nullショーを削除すると、出力が「ブロックチャンク」になり、スムーズにストリーミングされなくなります。おそらくunbuffer、一部のプロデュースプログラムでは、パイプされていることを検出したときに出力バッファリングのブロックに切り替えないようにする必要がありますか?
nh2

13

たぶんあなたは試してみるべきlogtopですか?

tail -f foobar.log |logtop

これはあなたが言及しているログトップですか? github.com/JulienPalard/logtop
digidigo

はい、debianを使用している場合、リポジトリpackages.debian.org/wheezy/logtopにパッケージがあります
klocek

一顧私はこれは私が必要なものだと思うが、私はそれはCentOSの上でコンパイルすることができませんでした
digidigo

1
watch -n 5 "mysqladmin status | awk -F'  ' '{ print \$NF }'"

これを機能させることができませんでした。構文は確かですか?
デジディゴ

どのエラーが発生しますか?パスワードを要求せず~/.my.cnfに実行mysqladminするように構成しましたか?
クォンタ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.