在logstash中,对于逻辑上不同的应用程序日志,我是否需要单独的文件输入?

时间:2014-12-22 14:47:06

标签: logstash

(Windows上的Logstash 1.4.2)

在我们的系统中,“产品”是相关Web应用程序的高级别分组。每个Web应用程序都配置为编写以应用程序名称命名的专用日志文件(例如MyProduct.ApplicationA.log和MyProduct.ApplicationB.log)。给定产品的所有Web应用程序都将其日志文件写入同一文件夹(c:\ Logs \ MyProduct \; c:\ Logs \ MyOtherProduct)。

我需要设置logstash来监控所有产品的所有应用程序的所有日志文件。我原本希望使用:

input {
    file {
        path => "c:/Logs/**/*.log"
        exclude => ["Info.*", "Warn.*", "Error.*"]
        sincedb_path => "c:/logstash/.sincedb"
        sincedb_write_interval => 1
    }
}

首次运行时,我可以看到很多输出转到stdout输出,我认为这是文档所称的“第一次接触”。

一旦最初解析了所有日志文件(来自多个应用程序),如果应用程序生成日志条目,它们就会被拾取并输出。一切都很好。

但是,如果我重新启动logstash,所有的日志文件似乎都会再次被解析 - 好像sincedb没有被尊重。我已经查看了详细说明重复和重新分析的类似经验的其他SO问题(例如logstash + elasticsearch : reloads the same data),但是我相信我有额外的信息可能表明我实际上是在错误地使用文件输入。

如果我改为设置多个文件输入:

file {
    path => "c:/Logs/MyProduct/MyProduct.ApplicationA.log"
    exclude => ["Info.*", "Warn.*", "Error.*"]
    sincedb_path => "c:/logstash/.sincedb_A"
    sincedb_write_interval => 1
}
file {
    path => "c:/Logs/MyProduct/MyProduct.ApplicationB.log"
    exclude => ["Info.*", "Warn.*", "Error.*"]
    sincedb_path => "c:/logstash/.sincedb_B"
    sincedb_write_interval => 1
}

然后重新启动logstash不会重新解析现有文件,并且会对sincedb进行逻辑分组。这让我相信也许我一直在以错误的方式思考文件输入:我是否必须为每个应用程序配置单独的文件输入?

(看看sincedb的内容,只有一行,例如

0 0 2 661042

很明显无法跟踪多个文件)

我是否遗漏了一些允许我拥有通用球形样式全局声明的内容,而无需对每个应用程序进行单独配置?

1 个答案:

答案 0 :(得分:3)

您似乎遇到了known sincedb bug on Windows

在修复错误之前,为每个文件添加带有单独sincedb_path的文件{}块的解决方法可能是最佳解决方案。

相关问题