Saya menginstal Logstash untuk mengurai file apache. Saya butuh waktu cukup lama untuk mendapatkan pengaturan yang benar dan saya selalu mencoba pada log nyata. Saya melihat (seperti yang dikatakan dalam dokumentasi) bahwa logstash "mengingat" di mana ia berada dalam sebuah file. Sekarang pengaturan saya baik-baik saja dan saya ingin Logstash "lupa". Ini tampaknya lebih sulit dari saya. Saya sudah melakukan hal berikut:
bekas:
start_position => "beginning"
menghapus folder "data" lengkap dari elastissearch (dan menghentikannya dulu)
melihat file mana yang dibuka oleh logstash dengan
lsof -p PID
dan menghapus semua yang menjanjikan (dalam kasus saya/tmp/jffi*.tmp
)
Masih Logstash tidak melupakan dan hanya mengurai file "segar" di folder tempat log berada
Ada ide?
/opt/logstash/data/plugins/inputs/file
Jawaban:
Secara default, logstash menulis posisi terakhir pada logfile yang biasanya berada di
$HOME/.sincedb
. Logstash dapat dibodohi dengan meyakini bahwa Logstash tidak pernah mengurai logfile dengan menetapkan/dev/null
sebagaisincedb_path
.Di sini bagian dari File Input dokumentasi .
Contoh Config
sumber
sincedb_path => "NUL"
untuk mendapatkan efek yang sama. Detailes di siniingnore_older => 0
sehingga logstash akan membawanya ke manapun tanggalnya. Secara default jika file lebih lama maka 24 jam akan diabaikan.ignore_older => 0
karya di logstash! Saya telah mengalami masalah yang sama dengan si penanya. Tampaknya penemuan yang tidak jelas! (Googling "ignore_older" dan "logstash" hanya menampilkan halaman di filebeat, saya tidak dapat menemukan jejak bagaimana menangani ini di logstash)ignore_older
dalam konfigurasi filebeat Anda, filbeat dipaksa untuk membaca seluruh file lagi elastic.co/guide/en/beats/filebeat/current/...File plugin menyimpan riwayat "tailing" dalam file sincedb, default: di bawah $ HOME / .sincedb *, lihat http://logstash.net/docs/1.3.3/inputs/file#sincedb_path
File sejak db berisi tampilan baris seperti:
Jadi, jika Anda ingin mengurai kembali file lengkap, Anda perlu:
ls -i yourFile | awk '{print $1}'
)Dengan kuncinya
start_position => "beginning"
, Logstash akan menganalisis semua file.Contoh file sincedb:
.sincedb_7a7413a84171aa550d5318c17fd756e9
nama berisi sincedb_ dan MD5 (Digest :: MD5.hexdigest) dari semua direktori di jalur kunci ( http://logstash.net/docs/1.3.3/inputs/file#path ). Lihat kode file plugin: https://github.com/logstash/logstash/blob/master/lib/logstash/inputs/file.rb#L105sumber
start_position => "beginning"
, dokumentasinya mengatakan:> Opsi ini hanya mengubah situasi "kontak pertama" di mana sebuah file baru dan tidak terlihat sebelumnya. Jika file sudah pernah dilihat sebelumnya, opsi ini tidak berpengaruh.Logstash akan menyimpan catatan tersebut
$HOME/.sincedb_*
. Anda dapat menghapus semua.sincedb
dan restart logstash, Logstash akan mengembalikan file tersebut.sumber
Menggabungkan semua jawaban, tebak ini adalah cara terbaik untuk mengurai file. Saya melakukan hal yang sama untuk pengujian saya.
Untuk pengujian cepat
ignore_older
, Anda jugatouch /tmp/access_log
dapat mengubah stempel waktu file.sumber
ignore_older => 0
akan menghasilkan hal yang sebaliknya.Jika Anda menggunakan logstash-forwarder, periksa
.logstash-forwarder
file rumah Anda :sumber
/var/lib/logstash-forwarder/
.Setelah menghapusnya,
$HOME/.sincedb_*
itu masih tidak menelan data untuk saya.Setelah mencoba banyak hal, saya menghapus semua kecuali
.conf
file utama dari/etc/logstash/conf.d
dan memulai kembali Logstash, dan semuanya berfungsi. Saya hanya bisa berasumsi ada sesuatu di salah satu.conf
file yang logstash diam-diam tergantung.sumber
Sebenarnya melakukan reparsing setiap kali sangat mahal jika file tersebut memiliki data yang besar. Jadi Anda perlu berhati-hati sebelum melakukan ini. Jika kita ingin memaksanya mengulang lagi maka atur parameter di dalam blok input
Opsi ini tidak akan menyimpan file .sincedb dan logstash akan mengulang setiap kali. Tetapi jika Anda ingin mengulang sesekali tidak setiap kali maka yang dapat Anda lakukan adalah menghapus secara manual jalur .sinceDb yang dibuat saat mem-parsing file. Umumnya file ini ada di direktori home sebagai file tersembunyi jika Anda bukan pengguna root, sebaliknya di direktori root. Anda juga dapat menyetel sincedb_path ke beberapa lokasi lain untuk melacak file ini dengan mudah.
sumber
Jika Anda ingin menghindari mengotak-atik opsi logstash, saya telah menemukan bahwa mengganti nama atau menghapus file log yang ada dan membuat file baru dari konten file lama akan menipu logstash untuk mengindeks ulang.
sumber
Saya menemukannya di direktori home saya tetapi setelah menghapusnya, logstash menolak untuk memilih kembali file log yang ada. Cara saya membuatnya bekerja adalah menambahkan
ke plugin file saya. Saya pikir untuk mengatur ulang setiap kali, cukup ubah jalur sincedb_path
sumber
jika Anda menggunakan tar.gz install filebeat, Anda dapat menghapus file ini
$FilebeatPath/data/registry/filebeat/data.json
, dan menjalankan kembali filebeatsumber
Coba dengan menghapus
/var/lib/logstash
folder di ENV Andasumber
logstash versi 5 direktori baru masuk
definisi path.data ada di logstash.yml
sumber