Ana*_*nda 7 elasticsearch logstash
我有成千上万的日志文件,每天都会下载.我正在使用logstash和ElasticSearch进行解析,索引和搜索.
现在我使用文件输入插件来读取下载的文件并解析它.我没有设置sincedb_path
它的存储$HOME
.但问题是它只读取了一天的日志文件.这是我输入的配置:
input {
file {
path => "/logs/downloads/apacheLogs/env1/**/*"
type => "env1"
exclude => "*.gz"
start_position => "beginning"
}
file {
path => "/logs/downloads/appLogs/env2/**/*"
type => "env2"
exclude => "*.gz"
start_position => "beginning"
}
}
Run Code Online (Sandbox Code Playgroud)
这显然是由文件处理程序中的错误引起的.
当File {}输入法读取日志文件时,处理的最后一个字节将被保存并定期复制到该sincedb
文件中.虽然您可以根据需要将文件设置为/dev/null
,但Logstash仅在启动期间读取文件,并在之后使用内存中表的信息.
问题是内存中的表按inode索引位置,并且永远不会被修剪,即使它检测到给定的文件不再存在.如果删除文件然后添加一个新文件 - 即使它有不同的名称 - 它可能具有相同的inode编号,并且文件处理程序会认为它是同一个文件.
如果新文件较大,则处理程序将仅从之前的最大字节开始读取并更新表.如果新文件较小,则似乎认为该文件以某种方式被截断,并且可能从默认位置再次开始处理.
因此,处理事物的唯一方法是设置sincedb
为/dev/null
,然后重新启动logstash(导致内部表丢失),然后将从头开始重新读取与模式匹配的所有文件 - 这有问题同样,因为一些文件可能不是新的.
归档时间: |
|
查看次数: |
9643 次 |
最近记录: |