2015-06-02 18 views
13

HINTERGRUND:Logstash Dateideskriptoren schließen?

Wir haben rsyslog Erstellung von Protokolldateien Verzeichnisse wie: /var/log/rsyslog/SERVER-NAME/LOG-DATE/LOG-FILE-NAME So mehrere Server ihre Protokolle von verschiedenen Daten an eine zentrale Stelle sind aus verschütten.

nun diese Protokolle und speichern sie in Elasticsearch lesen für die Analyse ich meine logstash Config-Datei etwas wie diese:

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

PROBLEM:

nun als Anzahl der Log-Dateien im Verzeichnis logstash öffnet Dateideskriptoren (FD) für neue Dateien und gibt keine FDs für bereits gelesene Protokolldateien frei. Da Protokolldateien nach dem Datum generiert werden, nachdem es gelesen wurde, ist es danach nutzlos, da es nach diesem Datum nicht aktualisiert wird.

Ich habe die Datei Öffnungen Grenze zu 65K in /etc/security/limits.conf

Können wir nach einiger Zeit logstash schließen den Griff machen erhöht, so dass Anzahl von Datei-Handles opened erhöhen nicht zu viel ??

+0

Was Logstash Version ist das? Kann man die komplette Konfigurationsdatei auch posten? –

+0

Fragen wegen: https://github.com/elastic/logstash/issues/1604. Haben Sie die gleichen Symptome? Ausnahmen in den Protokollen nach einiger Zeit? Wenn Sie 'sudo lsof | grep java | W -l Siehst du, dass die Deskriptoren im Laufe der Zeit stetig zunehmen? –

Antwort

6

Ich denke, Sie haben diesen Fehler gefunden: http://github.com/elastic/logstash/issues/1604. Haben Sie die gleichen Symptome? Ausnahmen in den Protokollen nach einiger Zeit? Wenn Sie sudo lsof | grep java | wc -l ausführen, sehen Sie, dass die Deskriptoren im Laufe der Zeit stetig zunehmen? (Einige von ihnen könnten schließen, aber einige bleiben offen und ihre Anzahl wird sich erhöhen)

0

Ich habe dieses Problem seit einiger Zeit verfolgt, und ich weiß nicht, dass es richtig gelöst ist.

Wir waren in einem ähnlichen Boot, vielleicht größer: Logstash konnte keine Handles für Hunderttausende von Logfiles auf einer Box öffnen, obwohl nur sehr wenige von ihnen aktiv geschrieben wurden. LOGSTASH-271 erfasst dieses Problem, und es gab einige Versuche, Logstash zu patchen, einschließlich PR #1260.

Es scheint, dass ein Fehler es vielleicht in Logstash 1.5 mit PR #1545 geschafft hat, aber ich habe das nie persönlich getestet. Am Ende haben wir die zugrunde liegende Bibliothek abgezweigt, mit der Logstash die Dateieingabe FileWatch in FFileWatch implementiert, die eine "eviction mechanism" hinzufügt.

Die Grundidee hinter diesem Ansatz besteht darin, Dateien nur während des Schreibens offen zu halten. Normalerweise öffnet Logstash ein Handle für die Datei und hält es für immer offen, aber FFileWatch fügt eine Option hinzu, um das Handle zu schließen, wenn sich die Datei in letzter Zeit nicht geändert hat (eviction_interval). Ich habe dann einen benutzerdefinierten Build von Logstash mit dem gegabelten Juwel erstellt.

Offensichtlich ist dies weniger als ideal, aber es hat für uns funktioniert. Schließlich haben wir Logstash vollständig für die Protokolldateien gelöscht, obwohl wir es immer noch weiter unten in der Protokollverarbeitungspipeline verwenden. Wir haben unseren eigenen Lightweight Log Shipper implementiert (Franz), der nicht unter diesem Problem leidet.