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


91

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

  • 中古: start_position => "beginning"

  • elastissearchから「data」フォルダ全体を削除しました(そして最初に停止しました)

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

それでもLogstashは、ログが保存されているフォルダ内の「新しい」ファイルのみを忘れず、解析しません

何か案は?


私がそれを見つけた最新のlogstashバージョン:/opt/logstash/data/plugins/inputs/file
Tim Smith

回答:


135

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

ここでは、ドキュメントの入力ファイルの一部です。

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

設定例

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

28
Windows sincedb_path => "NUL"では、同じ効果を得るために使用できます。詳細はこちら
クリスマグナソン

11
ファイルがかなり古い場合(24時間以上)、オプションを追加するingnore_older => 0と、日付に関係なくlogstashがファイルを取得するので非常に便利です。デフォルトでは、ファイルが古い場合、24時間は無視されます。
mtfk 2016年

1
@mtfk:すごい発見!ignore_older => 0logstashで作品を指摘していただきありがとうございます。質問者と同じ問題で困っています。明らかではない発見のようです!(「ignore_older」と「logstash」をグーグルすると、filebeatにページが表示されるだけで、logstashでこれに対処する方法の痕跡は見つかりませんでした)
Mike Lutz

filebeatの使用中にこれを追加する方法
Sunilkumar Ramamurthy

@SunilkumarRamamurthy ignore_olderファイルビート構成のオプションを省略した場合、filbeatはファイル全体を再度読み取ることを強制されます。elastic.co
guide/

19

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

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

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

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

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

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

sincedbファイルの例:


1
start_position => "beginning"ドキュメントは言う:>このオプションは、ファイルが新しく、前に見たことがない「最初の接触」の状況をmodifieds。以前にファイルが表示されている場合、このオプションは効果がありません。
Brad

10

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


9

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

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

簡単なテストでは、の代わりにignore_oldertouch /tmp/access_logファイルのタイムスタンプを変更することもできます。


設定を追加するignore_older => 0と逆になりますのでご注意ください。
パンキコア2018

5

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

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

3
パッケージとしてインストールされている場合は、を確認してください/var/lib/logstash-forwarder/
Wesley Baugh、2015

3

削除$HOME/.sincedb_*した後も、まだデータを取り込めませんでした。

たくさんのことを試した後、メイン.confファイル以外のすべてを削除/etc/logstash/conf.dしてLogstashを再起動すると、すべてが機能しました。.conflogstashが静かにハングしているファイルの1つに何かがあったとしか思えません。


思い出すと、後でデバッグフラグをオンにすると、黙ってハングするのではなく怒っている理由がわかりました。データでバージョン番号を探していたと思いますが、データに番号が含まれていない場合がありました。数値ではない場合、その数値が何であるかを確認するためのチェックなので、最初にそれが数値であるかどうかをテストしてから、その数値を尋ねる必要がありました。
Seth

1

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

sincedb_path => "/dev/null" 

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

sincedb_path => "/home/shubham/sinceDB/productsSince.db"

1

logstashオプションをいじるのを避けたい場合は、既存のログファイルの名前を変更または削除し、古いファイルの内容から新しいファイルを作成すると、logstashが再インデックス化されるようになります。


0

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

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

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


0

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



-1

logstashバージョン5の新しいディレクトリは

<path.data>/plugins/inputs/file

path.dataの定義はlogstash.ymlにあります

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.