Logstash'ı bir dosyayı yeniden ayrıştırmaya nasıl zorlayabilirim?


91

Apache dosyalarını ayrıştırmak için Logstash'ı kurdum. Ayarları doğru yapmam epeyce uzun sürdü ve her zaman gerçek günlükleri denedim. Logstash'in dosyanın nerede olduğunu "hatırladığını" fark ettim (dokümantasyonun dediği gibi). Şimdi ayarlarım tamam ve Logstash'ın "unutmasını" istiyorum. Bu benden daha zor görünüyor. Ben zaten şunları yaptım:

  • Kullanılmış: start_position => "beginning"

  • elastissearch'ten tüm "data" klasörünü sildi (ve önce onu durdurdu)

  • logstash tarafından hangi dosyaların nerede açıldığına baktım ve lsof -p PIDümit verici olan her şeyi sildi (benim durumumda /tmp/jffi*.tmp)

Yine de Logstash, günlüklerin bulunduğu klasördeki yalnızca "yeni" dosyaları unutmaz ve ayrıştırmaz

Herhangi bir fikir?


En son logstash sürümü buldum:/opt/logstash/data/plugins/inputs/file
Tim Smith

Yanıtlar:


135

Varsayılan olarak, logstash, konumun en son olduğunu genellikle içinde bulunan bir günlük dosyasına yazar $HOME/.sincedb. Logstash o belirterek logfile'a çözümlenen asla inandırarak aptal olabilir /dev/nullolarak sincedb_path.

Giriş Dosyasının dokümantasyon bölümü burada .

Veritabanının nereye yazılacağı (izlenen günlük dosyalarının mevcut konumunun kaydını tutar). "$ SINCEDB_PATH" veya "$ HOME / .sincedb" ortam değişkeninin değerine varsayılan değer.

Yapılandırma Örneği

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

29
Pencerelerde sincedb_path => "NUL"aynı etkiyi elde etmek için kullanabilirsiniz . Detaylar burada
Chris Magnuson

11
Dosyalar oldukça eskiyse (24 ingnore_older => 0saatten fazla) seçenek eklemek çok kullanışlıdır, böylece logstash bunları tarih ne olursa olsun alacaktır. Varsayılan olarak, dosyalar daha eskiyse, 24 saat göz ardı edilecektir.
mtfk

1
@mtfk: Harika bul! ignore_older => 0Logstash'taki çalışmaları işaret ettiğiniz için teşekkürler ! Soruyu soranla aynı sorundan dolayı sıkıştım. Bariz olmayan bir keşif gibi görünüyor! (googling "ignore_older" ve "logstash" yalnızca dosya atımındaki sayfaları getirir, bununla nasıl başa çıkacağıma dair hiçbir iz bulamadım logstash)
Mike Lutz

Filebeat kullanılırken bu nasıl eklenir
Sunilkumar Ramamurthy

@SunilkumarRamamurthy Sana seçeneği dışarıda bırakın eğer iman ignore_oldersizin filebeat yapılandırmasında, filbeat yine tüm dosyayı okumak zorunda kalır elastic.co/guide/en/beats/filebeat/current/...
flazzarini

19

Sincedb dosyasındaki "kirinde", temerrüt eklenti dosya deposu geçmişi: $ / .sincedb *, bkz ANA altında http://logstash.net/docs/1.3.3/inputs/file#sincedb_path

Db dosyası aşağıdaki gibi satır içerir:

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

Dolayısıyla, eksiksiz bir dosyayı yeniden ayrıştırmak istiyorsanız, yapmanız gerekenler:

  • sindedb dosyalarını sil
  • VEYA yalnızca sincedb dosyasındaki ilgili satırı silin, dosyanızın önündeki inode numarasını kontrol edin ( ls -i yourFile | awk '{print $1}')
  • Ve Logstash'ı yeniden başlatın

start_position => "beginning"Logstash anahtarla tüm dosyayı analiz eder.

Sincedb dosyası örneği:


1
start_position => "beginning"Dokümantasyonla ilgili olarak , dokümanlar şöyle der:> Bu seçenek yalnızca bir dosyanın yeni olduğu ve daha önce görülmediği "ilk temas" durumlarını değiştirir. Bir dosya daha önce görülmüşse, bu seçeneğin bir etkisi yoktur.
Brad

10

Logstash, kaydı içeride tutacaktır $HOME/.sincedb_*. Tüm .sincedblogstash'i silebilir ve yeniden başlatabilirsiniz, Logstash dosyayı yeniden ayrıştırır.


9

Tüm yanıtları birleştirerek, sanırım bu dosyaları çözümlemenin en iyi yolu. Ben de aynısını testim için yaptım.

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

Hızlı bir test için bunun yerine dosyanın zaman damgasını ignore_olderda touch /tmp/access_logdeğiştirebilirsiniz.


yapılandırma eklemenin ignore_older => 0tam tersini yapacağını unutmayın.
panchicore

5

Logstash-forwarder kullanıyorsanız .logstash-forwarderbunun yerine evinizde dosya olup olmadığını kontrol edin :

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

3
Paket olarak kurulmuşsa kontrol edin /var/lib/logstash-forwarder/.
Wesley Baugh

3

$HOME/.sincedb_*Sildikten sonra hala benim için veri almıyordu.

Bir sürü şeyi denedikten sonra, ana .confdosya /etc/logstash/conf.ddışındaki her şeyi kaldırdım ve Logstash'ı yeniden başlattım ve her şey çalıştı. Sadece .confdosyalardan birinde logstash'in sessizce beklediği bir şey olduğunu varsayabilirim.


Hatırladığım kadarıyla, daha sonra bazı hata ayıklama bayrağını açtım ve bana sessizce asmak yerine neden kızgın olduğunu söyledi. Sanırım verilerde bir sürüm numarası arıyordu ancak bazen verilerin içinde bir numara yoktu. Numaranın ne olduğunu bulmak için yapılan kontrol, sayı olmasaydı çökerdi, bu yüzden önce bir sayı olduğunu test etmem ve ardından hangi sayı olduğunu sormam gerekti.
Seth

1

Dosyanın içinde büyük veri varsa, her seferinde yeniden ayrıştırma çok maliyetlidir. Bu yüzden bunu yapmadan önce dikkatli olmalısın. Yeniden ayrıştırmaya zorlamak istiyorsak, parametreyi giriş bloğu içinde ayarlayın.

sincedb_path => "/dev/null" 

Bu seçenek .sincedb dosyasını depolamayacak ve logstash her seferinde yeniden ayrıştırılacaktır. Ancak, her seferinde değil ara sıra yeniden ayrıştırmak istiyorsanız, yapabileceğiniz şey, dosyayı ayrıştırırken oluşturulan .sinceDb yolunu manuel olarak silmektir. Genel olarak, kök dizinde bir kök kullanıcı değilseniz, ana dizinde gizli bir dosya olarak bulunur. Ayrıca sincedb_path'ı bu dosyayı kolayca izlemek için başka bir konuma da ayarlayabilirsiniz.

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

1

Logstash seçenekleriyle uğraşmaktan kaçınmak istiyorsanız, mevcut günlük dosyasını yeniden adlandırmanın veya kaldırmanın ve eski dosya içeriğinden yeni bir dosya oluşturmanın logstash'i yeniden indekslemeye yönlendireceğini fark ettim.


0

Bunu ana sayfamda buldum, ancak sildikten sonra, logstash mevcut günlük dosyalarını yeniden seçmeyi reddetti. Bunu çalıştırma şeklim eklemekti

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

benim dosya eklentisine. Her seferinde sıfırlamayı düşünüyorum, sadece sincedb_path yolunu değiştir


0

tar.gz install filebeat kullanıyorsanız, bu dosyayı silebilir $FilebeatPath/data/registry/filebeat/data.jsonve filebeat'i yeniden çalıştırabilirsiniz.



-1

logstash sürüm 5 yeni dizin içinde

<path.data>/plugins/inputs/file

path.data tanımı logstash.yml içindedir

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.