Chciałbym monitorować duży plik dziennika (blisko 1 GB) pod kątem błędów. Chcę, aby było to blisko czasu rzeczywistego (kilka sekund opóźnienia jest w porządku). Mój plan to wykorzystanie tail -f | grep
. Czy są jakieś problemy z wydajnością przy stosowaniu takiej metody, gdy jest ona uruchomiona przez długi czas, np. Od zera do 1 GB? Czy istnieją jakieś standardowe praktyki stosowane do takiego monitorowania. Zauważ, że chciałbym to zrobić za pomocą standardowych poleceń unix dostępnych w systemie Solaris 10.
Jeśli to możliwe, mój plik nawet przewraca się i mam jeszcze jeden problem do rozwiązania :). using tail -F
( --follow=name
) nie jest dla mnie opcją, ponieważ -F
nie jest obsługiwane na serwerze, na którym chcę to uruchomić. Moim planem jest użycie skryptu, który uruchomi ten ogon i sonduje, aby sprawdzić, czy plik jest zwinięty. Jeśli tak, zabij ogon i uruchom go ponownie. Jakieś lepsze podejście?
źródło
tail
”, prawda?Odpowiedzi:
W moim systemie Linux (GNU coreutils 8.12) mogłem sprawdzić (za pomocą
strace
), żetail -f
¹ używalseek
wywołania systemowego do szybkiego pominięcia większości plików:Oznacza to, że rozmiar śledzonego pliku i tak nie powinien mieć znaczenia.
Może możesz sprawdzić, czy to samo dotyczy twojego systemu. (Oczywiście tak powinno być.)
-
1. Próbowałem również wyłączyć obsługę inotify
---disable-inotify
w przypadku nieudokumentowanych , na wszelki wypadek.źródło
strace
;)tail -F
nie jest obsługiwany, są szanse, żestrace
nie będzie dostępny…truss
jest odpowiednim narzędziem w systemie Solaris.Jeśli jest wywoływany na zwykłym pliku (w przeciwieństwie do potoku), zarówno GNU, jak i OpenBSD (jeśli nie są wywoływane z
-n +N
) szukają końca pliku, a następnie działają wstecz, aby znaleźć linię, w której powinien rozpocząć drukowanie. Nie wiem, czy Solaris robi to samo, ale jest to rozsądne podejście, więc spodziewam się, że większość jednorożców zrobi to samo. Dlatego rozmiar pliku nie ma znaczenia dla wydajności.źródło
Robię to codziennie. Generalnie skanuję kilkanaście dzienników na naszych serwerach testowych i produkcyjnych
tail -f logs/*.{log,err,out}
. Początkowe ładowanie jest nieco większe (w zależności od liczby globowanych plików), ale potem strumieniowanie odbywa się w czasie rzeczywistym.Zamiast wysyłać do grep, używam tej
exec
funkcji,screen
ponieważ chcę ogólnie zobaczyć wszystkie dane wyjściowe (w celu uzyskania pełnych informacji zwrotnych i komunikatów związanych z problemem). Na przykład,Powoduje, że terminal emituje sygnał dźwiękowy (lub miga) za każdym razem, gdy zostanie znalezione słowo Wyjątek.
źródło