2015-06-02 26 views
13

Wstęp:Logstash blisko deskryptorów plików?

Mamy rsyslog plików dziennika tworzenia katalogów, takich jak: /var/log/rsyslog/SERVER-NAME/LOG-DATE/LOG-FILE-NAME Tak wiele serwerów są wycieki swoje dzienniki różnych terminach do centralnej lokalizacji.

teraz czytać te dzienniki i przechowywać je w elasticsearch do analizowania mam logstash pliku config coś takiego:

file{ 
    path => /var/log/rsyslog/**/*.log 
} 

PROBLEM:

teraz jako liczby plików dziennika w katalogu zwiększenie, logstash otwiera deskryptory plików (FD) dla nowych plików i nie będzie wydawać FD dla już przeczytanych plików dziennika. Ponieważ pliki dzienników są generowane według daty, po jej przeczytaniu nie ma sensu, ponieważ nie będzie ona aktualizowana po tej dacie.

Mam zwiększył limit otwory plik do 65K w /etc/security/limits.conf

możemy dokonać logstash zamknąć uchwyt po pewnym czasie, tak że ilość uchwytów plik otwarty nie zwiększa zbytnio ??

+0

Co to jest wersja Logstash? Czy możesz wysłać kompletny plik konfiguracyjny? –

+0

Pytanie o to: https://github.com/elastic/logstash/issues/1604. Czy masz te same objawy? Wyjątki w dziennikach po pewnym czasie? Jeśli uruchomisz 'sudo lsof | grep java | wc -l "czy widzisz stale rosnące deskryptory? \ –

Odpowiedz

6

Myślę, że możesz trafić ten błąd: http://github.com/elastic/logstash/issues/1604. Czy masz te same objawy? Wyjątki w dziennikach po pewnym czasie? Jeśli używasz sudo lsof | grep java | wc -l, czy deskryptory stale rosną? (niektóre z nich mogą się zamknąć, ale niektóre pozostaną otwarte, a ich liczba wzrośnie)

0

Od pewnego czasu śledzę ten problem i nie wiem, czy został on poprawnie rozwiązany.

Znajdowaliśmy się na podobnej łodzi, być może większej: Logstash nie mógł otworzyć uchwytów na setki tysięcy plików dziennika na pudełku, mimo że bardzo niewiele z nich napisano aktywnie. LOGSTASH-271 zarejestrował ten problem, a niektóre próby poprawienia Logstash, w tym PR #1260.

Wygląda na to, że poprawka mogła trafić do Logstash 1.5 z PR #1545, ale nigdy nie testowałem tego osobiście. W końcu rozwarliśmy bibliotekę, z której korzysta Logstash, aby zaimplementować plik wejściowy o nazwie FileWatch do FFileWatch, który dodaje "eviction mechanism".

Podstawową ideą tego podejścia jest zachowanie otwartych plików tylko podczas ich pisania. Normalnie Logstash otworzy uchwyt pliku i pozostanie otwarty na zawsze, ale FFileWatch dodaje opcję zamknięcia uchwytu, jeśli plik nie został ostatnio zmieniony (eviction_interval). Następnie utworzyłem niestandardową kompilację Logstash za pomocą rozwidlonego klejnotu.

Oczywiście jest to mniej niż idealne, ale zadziałało dla nas. Ostatecznie całkowicie usunęliśmy Logstash do zbierania plików dziennika, chociaż nadal używamy go dalej w dół do procesu przetwarzania dziennika. Wdrożyliśmy nasz własny lekki spedytor (Franz), który nie cierpi z powodu tego problemu.