5

サーバー上のネットワーク トラフィックをログに記録するために tcpflow を使用しています。このデータをファイルに記録したいのですが、すべてではありません。監視プロセスは、バックグラウンドでデーモンとして無期限に実行されます。

ストリームの一部の行にはバイト カウントが含まれており、そのバイト カウント (たとえば 800 バイト) が表示された場合は、次の 800 バイトをファイルに記録する必要があります。そうでない場合は、ファイルに書き込みたくありません。

ログファイルに何をリダイレクトするかを決定するために、ストリームのこの種の「オンザフライ前処理」を行う最良の方法は何ですか? ストリームをリッスンしているある種の 2 番目のデーモン スクリプトは、そのスクリプトにパイプされますか?

例:

ストリームに次の行が表示されます。

1343932842: 010.079.091.189.35856-010.104.001.199.11211: set i:1:20163484235 0 0 1429

まず、「セット」があることを確認する必要があります。次に、行の最後の部分 (1429) を調べ、次の 1429 バイトを読み取り、それらをファイルに書き込みます。

4

3 に答える 3

1

はい、ストリームを入力として受け取り、説明したことを実行するデーモンプログラムを使用してください。スクリプトの代わりに C をお勧めします。これは、入力/出力が非常に単純で、オーバーヘッドが非常に少ないためです。

「キャプチャ」と呼ばれる実行可能ファイルと「フィルター」と呼ばれるフィルタリングプログラムがあると仮定すると、次を使用してbashシェルからそれらをチェーンできます

bash-prompt$ capture capture-params | filter

capturestdout に書き込むものはすべて、stdin からの入力として利用できますfilter。フィルターの観点からすると、行を読み取り、 end ... size パターンが見つかったときに、出力を出力ファイル (または標準出力) に書き込むのは簡単なことです。標準出力に書き込む場合は、次を使用してそれをファイルにリダイレクトできます

bash-prompt$ capture capture-params | filter > output-file.txt
于 2012-08-02T19:34:52.713 に答える
0

あなたが説明している最も洗練されたアプリケーションは、フットプリントの少ないラウンド ロビン データベースを使用することです。RRDtool は、オープンソースの業界標準であり、高性能のデータ ロギングとグラフ作成を行います。

bash コマンドを使用すると、データをデータベースに入力できます。必要に応じて、データをグラフ化することも非常に簡単です。

参照: http://oss.oetiker.ch/rrdtool/gallery/index.en.html

于 2012-12-28T04:45:54.753 に答える
0

awk を使用すると、その場でテキスト処理を行うことができます。言語を学ぶ必要がありますが、私はライブ ログの解析で同様のタスクに使用します。tail -f file.log | を実行します。awk -f myscript.awk

各行は、作成した awk スクリプトによって分析され、if-then-else を使用して、行に存在するいくつかの単語を検出し、awk コードの他の部分をアクティブにして行を別の方法で解析したり、外部プログラムを実行したりすることもできます。

于 2012-08-12T06:16:34.637 に答える