web-dev-qa-db-ja.com

Logstashにファイルを再解析させるにはどうすればよいですか?

Logstashをインストールして、Apacheファイルを解析しました。設定を正しくするまでにかなりの時間がかかり、常に実際のログを試しました。 (ドキュメントに書かれているように)logstashがファイル内の場所を「記憶」していることに気付きました。現在、私の設定はOkであり、Logstashに「忘れる」ことを望みます。これは私よりも難しいようです。私はすでに次のことをしました:

  • 使用済み:start_position => "beginning"

  • elastissearchから完全な「データ」フォルダーを削除しました(最初に停止しました)。

  • lsof -p PIDを使用してlogstashで開いたファイルを調べ、有望なものをすべて削除しました(私の場合は/tmp/jffi*.tmp

それでもLogstashは、ログが存在するフォルダー内の「新鮮な」ファイルのみを忘れて解析しません

何か案は?

88

デフォルトでは、logstashは通常、$HOME/.sincedbにあるログファイルに最後にあった位置を書き込みます。 Logstashは、/dev/nullsincedb_pathとして指定することにより、ログファイルを解析しないと信じ込ませられます。

ここにドキュメントの一部 入力ファイル

Sinceデータベースを書き込む場所(監視対象のログファイルの現在の位置を追跡します)。デフォルトは、環境変数「$ SINCEDB_PATH」または「$ HOME/.sincedb」の値です。

設定例

input {
    file {
        path => "/tmp/logfile_to_analyse"
        start_position => "beginning"
        sincedb_path => "/dev/null"
    }
}
131
flazzarini

プラグインファイルは、「テーリング」の履歴をsincedbファイルに保存します。デフォルト:$ HOME/.sincedb *の下で、 http://logstash.net/docs/1.3.3/inputs/file#sincedb_path を参照してください

Dbファイルには次のような行が含まれています。

[inode] [major device number] [minor device number] [byte offset]

したがって、完全なファイルを再度解析する場合は、次のことを行う必要があります。

  • sindedbファイルを削除する
  • またはsincedbファイルの対応する行のみを削除し、ファイルの前にiノード番号を確認します(ls -i yourFile | awk '{print $1}'
  • Logstashを再起動します

キーstart_position => "beginning"を使用して、Logstashはすべてのファイルを分析します。

Sincedbファイルの例:

19
yesnault

Logstashは$HOME/.sincedb_*にレコードを保持します。すべての.sincedbを削除してlogstashを再起動すると、Logstashはファイルを再解析します。

10
Ben Lim

すべての回答を組み合わせて、これがファイルを解析する最良の方法だと思います。テストでも同じことをしました。

input {
  file {
    path => "/tmp/access_log"
    start_position => beginning
    sincedb_path => "/dev/null"
    ignore_older => 0
  }
}

クイックテストでは、ignore_olderの代わりにtouch /tmp/access_logを使用して、ファイルのタイムスタンプを変更することもできます。

9
vikas027

Logstash-forwarderを使用している場合は、代わりに.logstash-forwarderファイルのホームを確認してください。

{
  "/var/log/messages": {
    "source": "/var/log/messages",
    "offset": 43715,
    "inode": 12967,
    "device": 51776
  }
}
5
elwarren

$HOME/.sincedb_*を削除した後、まだデータを取得していません。

たくさんのことを試した後、.confからメインの/etc/logstash/conf.dファイルを除くすべてを削除し、Logstashを再起動しましたが、すべてが機能しました。 logstashが静かに停止している.confファイルの1つに何かがあったと推測できます。

3
Seth

ファイルに大きなデータが含まれている場合、実際に毎回再解析するのは非常にコストがかかります。そのため、これを行う前に注意する必要があります。再解析を強制する場合は、入力ブロック内にパラメーターを設定します

sincedb_path => "/dev/null" 

このオプションは.sincedbファイルを保存せず、logstashは毎回再解析します。ただし、毎回ではなくときどき再解析する場合は、ファイルの解析時に作成される.sinceDbパスを手動で削除することができます。通常、ルートディレクトリ以外のルートユーザーでない場合は、ホームディレクトリに隠しファイルとして存在します。 sincedb_pathを他の場所に設定して、このファイルを簡単にトレースすることもできます。

sincedb_path => "/home/shubham/sinceDB/productsSince.db"
1
Shubham Gupta

Logstashオプションの混乱を避けたい場合は、既存のログファイルの名前を変更または削除し、古いファイルの内容からnewファイルを作成すると、logstashが再インデックス付けされることがわかりました。

1
GreensterRox

ホームディレクトリで見つけましたが、削除した後、logstashは既存のログファイルの再選択を拒否しました。私がそれを動作させる方法は、追加することでした

sincedb_path => "/opt/elk/sincedb/"  

私のファイルプラグインに。毎回リセットし、sincedb_pathのパスを変更するだけだと思います

0
Dan

tar.gz install filebeatを使用する場合、このファイル$FilebeatPath/data/registry/filebeat/data.jsonを削除して、filebeatを再実行できます

0
L.T