Zainstalowałem Logstash, aby przeanalizować pliki Apache. Prawidłowe ustawienie zajęło mi sporo czasu i zawsze próbowałem na prawdziwych dziennikach. Zauważyłem (jak mówi dokumentacja), że logstash „pamięta” gdzie był w pliku. Teraz moje ustawienia są OK i chciałbym, żeby Logstash „zapomniał”. Wydaje się to trudniejsze niż myślałem. Zrobiłem już następujące rzeczy:
używany:
start_position => "beginning"
usunął cały folder „data” z elastissearch (i najpierw go zatrzymał)
sprawdziłem, które pliki zostały otwarte przez logstash
lsof -p PID
i usunąłem wszystko, co było obiecujące (w moim przypadku/tmp/jffi*.tmp
)
Mimo to Logstash nie zapomina i analizuje tylko „świeże” pliki w folderze, w którym znajdują się dzienniki
Jakieś pomysły?
/opt/logstash/data/plugins/inputs/file
Odpowiedzi:
Domyślnie logstash zapisuje ostatnią pozycję w pliku dziennika, w którym zwykle znajduje się
$HOME/.sincedb
. Logstash można oszukać, wierząc, że nigdy nie przeanalizował pliku dziennika, określając/dev/null
jakosincedb_path
.Tutaj część dokumentacji Input File .
Przykład konfiguracji
źródło
sincedb_path => "NUL"
aby uzyskać ten sam efekt. Szczegóły tutajingnore_older => 0
aby logstash je pobierał bez względu na datę. Domyślnie, jeśli pliki są starsze, 24 godziny będą ignorowane.ignore_older => 0
prac w logstash! Zostałem zablokowany przez ten sam problem, co pytający. Wydaje się, że to nieoczywiste znalezisko! (googlowania „ignore_older” i „logstash” tylko wychowywać stron na filebeat, nie mogłem znaleźć żadnego śladu, jak radzić sobie z tym w logstash)ignore_older
w konfiguracji filebeat, filbeat zmuszona jest odczytać cały plik ponownie elastic.co/guide/en/beats/filebeat/current/...Plik wtyczki przechowuje historię „tailingu” w pliku sincedb, domyślnie: w $ HOME / .sincedb *, zobacz http://logstash.net/docs/1.3.3/inputs/file#sincedb_path
Ponieważ plik db zawiera linię wygląda następująco:
Tak więc, jeśli chcesz ponownie przeanalizować cały plik, musisz:
ls -i yourFile | awk '{print $1}'
)Za pomocą klucza
start_position => "beginning"
Logstash przeanalizuje cały plik.Przykład pliku sincedb:
.sincedb_7a7413a84171aa550d5318c17fd756e9
nazwa zawiera sincedb_ i MD5 (Digest :: MD5.hexdigest) całego katalogu w ścieżce klucza ( http://logstash.net/docs/1.3.3/inputs/file#path ). Zobacz kod pliku wtyczki: https://github.com/logstash/logstash/blob/master/lib/logstash/inputs/file.rb#L105źródło
start_position => "beginning"
o dokumentację, mówi się:> Ta opcja modyfikuje tylko sytuacje „pierwszego kontaktu”, w których plik jest nowy i nie był wcześniej widziany. Jeśli plik był już wcześniej widziany, ta opcja nie działa.Logstash zachowa zapis w formacie
$HOME/.sincedb_*
. Możesz usunąć wszystkie.sincedb
i ponownie uruchomić logstash, Logstash ponownie przeanalizuje plik.źródło
Łącząc wszystkie odpowiedzi, myślę, że jest to najlepszy sposób analizowania plików. Zrobiłem to samo podczas testów.
W celu szybkiego testu
ignore_older
możesz zamiast tegotouch /tmp/access_log
zmienić sygnaturę czasową pliku.źródło
ignore_older => 0
będzie miało odwrotny skutek.Jeśli używasz logstash-forwarder, poszukaj
.logstash-forwarder
pliku w katalogu domowym :źródło
/var/lib/logstash-forwarder/
.Po usunięciu
$HOME/.sincedb_*
nadal nie przetwarzał danych dla mnie.Po wypróbowaniu wielu rzeczy usunąłem z niego wszystko oprócz głównego
.conf
pliku/etc/logstash/conf.d
i ponownie uruchomiłem Logstash i wszystko działało. Mogę tylko założyć, że w jednym z.conf
plików było coś, na czym logstash po cichu wisiał.źródło
Właściwie naprawianie za każdym razem jest bardzo kosztowne, jeśli plik zawiera duże ilości danych. Więc zanim to zrobisz, musisz być ostrożny. Jeśli chcemy zmusić go do ponownej analizy, ustaw parametr wewnątrz bloku wejściowego
Ta opcja nie będzie przechowywać pliku .sincedb, a logstash będzie ponownie analizował za każdym razem. Ale jeśli chcesz od czasu do czasu dokonać ponownej analizy, a nie za każdym razem, możesz ręcznie usunąć ścieżkę .sinceDb, która jest tworzona podczas analizowania pliku. Zwykle jest obecny w katalogu domowym jako plik ukryty, jeśli nie jesteś użytkownikiem root, w przeciwnym razie w katalogu głównym. Możesz również ustawić sincedb_path na inną lokalizację, aby łatwo śledzić ten plik.
źródło
Jeśli chcesz uniknąć mieszania się z opcjami logstash, odkryłem, że zmiana nazwy lub usunięcie istniejącego pliku dziennika i utworzenie nowego pliku ze starej zawartości pliku spowoduje, że logstash zostanie ponownie zindeksowany.
źródło
Znalazłem go w moim katalogu domowym, ale po usunięciu go, logstash odmówił ponownego pobrania istniejących plików dziennika. Sposób, w jaki to działało, polegał na dodawaniu
do mojej wtyczki pliku. Myślę, że za każdym razem resetuję, po prostu zmień ścieżkę sincedb_path
źródło
jeśli używasz tar.gz install filebeat, możesz usunąć ten plik
$FilebeatPath/data/registry/filebeat/data.json
i ponownie uruchomić plik filebeatźródło
Spróbuj, usuwając
/var/lib/logstash
folder w swoim ENVźródło
logstash w wersji 5 nowy katalog jest w
Definicja path.data znajduje się w logstash.yml
źródło