Ich habe Logstash installiert, um Apache-Dateien zu analysieren. Ich habe ziemlich lange gebraucht, um die Einstellungen richtig zu machen, und ich habe immer echte Protokolle anprobiert. Ich habe festgestellt (wie in der Dokumentation angegeben), dass sich logstash "merkt", wo es sich in einer Datei befindet. Jetzt sind meine Einstellungen in Ordnung und ich möchte, dass Logstash "vergisst". Das scheint schwieriger als ich. Ich habe schon folgendes gemacht:
gebraucht:
start_position => "beginning"
löschte den kompletten "Daten" -Ordner aus elastissearch (und stoppte ihn zuerst)
schaute nach, welche Dateien von logstash mit geöffnet wurden
lsof -p PID
und löschte alles, was vielversprechend war (in meinem Fall/tmp/jffi*.tmp
)
Trotzdem vergisst und analysiert Logstash nicht nur "frische" Dateien in dem Ordner, in dem sich die Protokolle befinden
Irgendwelche Ideen?
/opt/logstash/data/plugins/inputs/file
Antworten:
Standardmäßig schreibt logstash, dass die Position zuletzt in einer Protokolldatei war, in der sich normalerweise befindet
$HOME/.sincedb
. Logstash kann getäuscht werden, wenn es glaubt, dass es die Protokolldatei nie analysiert hat, indem es/dev/null
als angibtsincedb_path
.Hier der Teil der Dokumentation Input File .
Konfigurationsbeispiel
quelle
sincedb_path => "NUL"
den gleichen Effekt erzielen. Details hieringnore_older => 0
24 Stunden ), ist es sehr nützlich, eine Option hinzuzufügen, damit Logstash sie unabhängig vom Datum übernimmt. Wenn die Dateien älter als 24 Stunden sind, werden sie standardmäßig ignoriert.ignore_older => 0
Arbeiten in Logstash! Ich habe das gleiche Problem wie der Fragesteller. Scheint ein nicht offensichtlicher Fund zu sein! (googeln "ignore_older" und "logstash" rufen nur Seiten auf filebeat auf, ich konnte keine Spur finden, wie man damit in logstash umgeht)ignore_older
in Ihrer Filebeat-Konfiguration weglassen, wird Filbeat gezwungen, die gesamte Datei erneut zu lesen. Elastic.co/guide/en/beats/filebeat/current/…Der Plugin-Dateispeicherverlauf von "tailing" in der sincedb-Datei, Standard: unter $ HOME / .sincedb *, siehe http://logstash.net/docs/1.3.3/inputs/file#sincedb_path
Die Da-Datenbank-Datei enthält folgende Zeilen:
Wenn Sie also eine vollständige Datei erneut analysieren möchten, müssen Sie:
ls -i yourFile | awk '{print $1}'
)Mit dem Schlüssel
start_position => "beginning"
analysiert Logstash die gesamte Datei.Beispiel einer sincedb-Datei:
.sincedb_7a7413a84171aa550d5318c17fd756e9
:: Der Name enthält sincedb_ und ein MD5 (Digest :: MD5.hexdigest) aller Verzeichnisse im Schlüsselpfad ( http://logstash.net/docs/1.3.3/inputs/file#path ). Siehe Code der Plugin-Datei: https://github.com/logstash/logstash/blob/master/lib/logstash/inputs/file.rb#L105quelle
start_position => "beginning"
der Dokumentation heißt es:> Diese Option ändert nur "Erstkontakt" -Situationen, in denen eine Datei neu ist und zuvor nicht gesehen wurde. Wenn eine Datei bereits zuvor gesehen wurde, hat diese Option keine Auswirkung.Logstash speichert die Aufzeichnung
$HOME/.sincedb_*
. Sie können alle löschen.sincedb
und logstash neu starten. Logstash analysiert die Datei erneut.quelle
Wenn Sie alle Antworten kombinieren, ist dies der beste Weg, um Dateien zu analysieren. Ich habe das gleiche für meine Tests getan.
Für einen schnellen Test können Sie stattdessen
ignore_older
auchtouch /tmp/access_log
den Zeitstempel der Datei ändern.quelle
ignore_older => 0
das Gegenteil bewirkt .Wenn Sie logstash-forwarder verwenden, überprüfen Sie
.logstash-forwarder
stattdessen Ihr Zuhause auf Datei:quelle
/var/lib/logstash-forwarder/
.Nach dem Löschen wurden
$HOME/.sincedb_*
für mich immer noch keine Daten aufgenommen.Nachdem ich einige Dinge ausprobiert hatte, entfernte ich alle außer der Hauptdatei
.conf
aus/etc/logstash/conf.d
Logstash und startete sie neu, und alles funktionierte. Ich kann nur vermuten, dass sich in einer der.conf
Dateien etwas befand, an dem logstash stillschweigend hing.quelle
Tatsächlich ist eine erneute Überprüfung jedes Mal sehr kostspielig, wenn die Datei große Datenmengen enthält. Sie müssen also vorsichtig sein, bevor Sie dies tun. Wenn wir eine erneute Analyse erzwingen möchten, setzen Sie den Parameter im Eingabeblock
Diese Option speichert die .sincedb-Datei nicht und logstash wird jedes Mal neu analysiert. Wenn Sie jedoch gelegentlich nicht jedes Mal eine Analyse durchführen möchten, können Sie den .sinceDb-Pfad, der beim Parsen der Datei erstellt wird, manuell löschen. Im Allgemeinen ist es im Home-Verzeichnis als versteckte Datei vorhanden, wenn Sie kein Root-Benutzer sind, andernfalls im Root-Verzeichnis. Sie können den sincedb_path auch auf einen anderen Speicherort setzen, um diese Datei einfach zu verfolgen.
quelle
Wenn Sie vermeiden möchten, mit den Logstash-Optionen herumzuspielen, habe ich festgestellt, dass das Umbenennen oder Entfernen der vorhandenen Protokolldatei und das Erstellen einer neuen Datei aus dem alten Dateiinhalt Logstash zur Neuindizierung verleitet.
quelle
Ich habe es in meinem Home-Verzeichnis gefunden, aber nach dem Löschen weigerte sich logstash, die vorhandenen Protokolldateien erneut auszuwählen. Die Art und Weise, wie ich es zum Laufen brachte, war hinzuzufügen
zu meinem Datei-Plugin. Ich denke, jedes Mal zurückzusetzen, ändern Sie einfach den Pfad von sincedb_path
quelle
Wenn Sie tar.gz install filebeat verwenden, können Sie diese Datei löschen
$FilebeatPath/data/registry/filebeat/data.json
und den Filebeat erneut ausführenquelle
Versuchen Sie es, indem Sie den
/var/lib/logstash
Ordner in Ihrer ENV löschenquelle
Das neue Verzeichnis von logstash Version 5 befindet sich in
Die Definition von path.data befindet sich in logstash.yml
quelle