Verwendet Filebeat tail -f, um nach neuen Inhalten in einer Datei zu suchen und sie dann an die gewünschte Ausgabe zu senden? Oder gibt es eine andere Möglichkeit, nach neuen Inhalten in einer Datei zu suchen?Wie Dateibeats nach neuen Inhalten in einer Datei sucht?
Antwort
Da filebeat Open Source ist, können Sie immer go look yourself
Hier ist der Go-Code aus der oben verlinkten Datei, die überprüft, ob eine Datei aktualisiert wurde.
ich diesen Code stark gekürzt habe, überall Sie sehen ...
ein Codeblock, der nicht genau relevant war, ermutige ich jemand liest diese auch in der gesamten Datei schauen zu gehen, seine paar ziemlich gut geschrieben gehen.
// Scan starts a scanGlob for each provided path/glob
func (p *ProspectorLog) scan() {
newlastscan := time.Now()
// Now let's do one quick scan to pick up new files
for _, path := range p.config.Paths {
p.scanGlob(path)
}
p.lastscan = newlastscan
}
Die obige Funktion wird jeden n
-Länge Zeitblock genannt, wo n
in der Konfiguration festgelegt wird. ScanGlob wird aufgerufen und wird unten angezeigt.
// Scans the specific path which can be a glob (/**/**/*.log)
// For all found files it is checked if a harvester should be started
func (p *ProspectorLog) scanGlob(glob string) {
...
// Evaluate the path as a wildcards/shell glob
matches, err := filepath.Glob(glob)
...
// Check any matched files to see if we need to start a harvester
for _, file := range matches {
...
Für alle Dateien, die die glob abgestimmt, überprüfen Sie die Statistiken über die Datei würde den OS-spezifischen Aufruf, für Linux mit diesem stat <file>
// Stat the file, following any symlinks.
fileinfo, err := os.Stat(file)
...
Basierend auf dem stat-Aufruf sein, wird entschieden, ob Ein Harvester, der Teil dieser Go-Anwendung, der die Dateien liest, muss gestartet werden.
// Conditions for starting a new harvester:
// - file path hasn't been seen before
// - the file's inode or device changed
if !isKnown {
p.checkNewFile(h)
} else {
h.Stat.Continue(&lastinfo)
p.checkExistingFile(h, &newFile, &oldFile)
}
// Track the stat data for this file for later comparison to check for
// rotation/etc
p.prospectorList[h.Path] = *h.Stat
}
}
TL; DR: Filebeat die Dateien Statistiken der OS gemeldet verwendet, um zu sehen, ob die Datei seit dem letzten Mal aktualisiert wurde die Datei geerntet.