filebeat如何检查文件中的新内容?

时间:2016-04-17 22:01:16

标签: elasticsearch go logstash elastic-stack filebeat

filebeat是否使用tail -f来检查文件中的新内容,然后将其刷新到所需的输出?或者它是否有其他方式检查文件中的新内容?

1 个答案:

答案 0 :(得分:1)

由于filebeat是开源的,因此您始终可以go look yourself

以下是上述链接文件中的go代码,用于检查文件是否已更新。

我严重删节了这段代码,你看到的任何地方Team都是一个不完全相关的代码块,我鼓励任何读这篇文章的人都去查看整个文件,其中写得很好。< / p>

var x = connection.Set<Team>().Include(t => t.Level).ToList();
var level = x[0].Level;

每个... - 长度时间块调用上述函数,其中在配置中指定 // 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 } 。 ScanGlob被调用,如下所示。

n

对于匹配glob的所有文件,使用OS特定的调用检查文件的统计信息,对于linux,这将是n

// 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 {
        ...

根据stat调用,决定是否需要启动一个收集器,即读取文件的应用程序的一部分。

stat <file>

TL; DR:Filebeat使用操作系统报告的文件统计信息来查看自上次收集文件以来文件是否已更新。