3

私はいくつかのnagiosアラートをシステムに追加することに取り組んでいます-そのうちのいくつかは、nginx / apacheログにヒットする(またはそれらのログから値を解析する)特定のイベントのレートを監視します。これまでの問題にアプローチした方法は単純なシェル スクリプトでログを 25 秒程度一時ファイルに末尾表示し、プロセスを強制終了してから、一時ファイルに対して awk などを実行します。ここでの目標は、25 秒間にわたってログ「サンプル」を取得し、分析を実行することです。

これらの一時ファイルが原因でディスク IO が増加するため、これは明らかに理想的ではありません。私が本当に欲しいのは、特定の秒数の後にパイプをきれいに終了させる「強化された」テール -f です。すなわち:

tail -f --interval '5 秒' | grep "/サーブ"

ログを 5 秒間追跡し、「/serve」を含むすべての行を表示します。

Ruby スクリプトを作成してこれをかなり迅速に行うことができると思いますが、これを実現するためのより unixy な方法がないことを確認したかったのです。大まかに言えば、過去 N 秒からログのサンプルを取得するより良い方法はありますか (いいえ、タイムスタンプなどを解析したくありません)。

4

3 に答える 3

5

解決策を見つけました。「apt-get インストール タイムアウト」:)

編集:実際には、これはテールを殺しますが、正常に終了しないため、パイプ全体が失われます。私が働きたいのは:

タイムアウト -15 5 テール -f /mnt/log/nginx/nginx-access.log | grep '/javascripts' | トイレ -l

過去 5 秒間に提供された JavaScript ファイルの数などを教えてください。

于 2009-06-15T19:08:45.663 に答える
1

少し異なるアプローチ:

(tail -f /var/log/messages & P=$! ; sleep 5; kill -9 $P) | grep /serve
于 2009-06-15T19:13:29.083 に答える
0

私自身 Nagiios ユーザーとして、プローブ プロセスが任意の時間一時停止することは望ましくないと考えています。これは、最悪の場合、Nagios が他のことをあまり頻繁にチェックしないようにするか、チェックを「束ねる」ことになります。

すばやく (瞬時に) 実行され、ファイルの最後の数行を解析して、特定の時間より後のタイムスタンプを持つ興味深いものだけを返すスクリプトはどうでしょうか?

于 2009-06-15T19:15:09.160 に答える