1

多数のログファイルからデータを抽出できるようにしたいと考えています。抽出されたデータは、zabbix に送信されます。

例を挙げると、(巨大な) ログファイルに次のような情報が含まれているとします。

date: processed 566766 lines
date: processed 324523 lines
date: processed 546747 lines
date: processed 005643 lines

このデータをZabbixに送信できるようにしたいです。

awk を使用すると、単純に次のようなことができます

cat logfile | awk '/processed \d+ lines/ { system("zabbix command " $3) }'

私の問題は、ファイルが大きく、重複したデータが必要ないため、前回の実行が中断された場所からログ ファイルの読み取りを開始する方法を見つける必要があることです。

そのため、前回までに読み取ったポイントを記憶し、新しく追加された行のみの処理を開始する必要があります。

fetchlogを試してみたのですが、なぜかうまくいかず、メンテされていません。

増大するログ ファイルを追跡できる優れたユーティリティ、またはそれに対する Pythonic アプローチを知っていますか?

syslog-ng または rsyslog にはこれに対する何かがあったことを覚えているようですが、それらは syslog スタイルのログ専用であると思いますが、私のものは標準に従っていません。

よろしく

アレッサンドロ

4

2 に答える 2

0

Zabbix の担当者は、私の祈りを聞いてくれたようです。

http://blog.zabbix.com/zabbix-2-2-features-part-7-value-extracting-from-logfiles-and-more/2272/#more-2272

于 2013-05-08T15:34:57.170 に答える
0

Zabbix 2.0 では、ログ ファイルの監視が改善されました。こちらを参照してください。

フォーマット:

log[file,<regexp>,<encoding>,<maxlines>,<mode>]

正規表現には、ログ ファイルのすべての行にある単語を指定できます。

mode の場合、skipは Zabbix に古いデータを処理しないように指示します。

例:

log[logfile,processed,,,skip]

これもスクリプト化できます。実行した各スクリプトの最後の行番号をファイルに保存し、それを変数としてスクリプトに保存します。次に、次のようにします。

tail -n +$line_number logfile | awk '{print $3}'

wc で最後の行番号を取得できます。

wc -1 logfile > /tmp/number_file

最後の行を 2 回解析しないように +1 する必要があります。

すべての値をファイルに保存し、各行にホスト名と項目キーを追加して、zabbix_senderを使用することはおそらく価値があります。

それが役立つことを願っています。

于 2012-07-28T08:52:50.413 に答える