如何强制Logstash重新分析文件?
我安装了Logstash来parsingapache文件。 我花了相当多的时间来设置正确的,我总是尝试真正的日志。 我注意到(正如文档所述)logstash“记住”它在文件中的位置。 现在我的setings是好的,我想Logstash“忘记”。 这似乎比我更难。 我已经做了以下几点:
-
used:
start_position => "beginning"
-
从elastissearch中删除完整的“数据”文件夹(并先停止)
-
用
lsof -p PID
查看哪些文件被logstash打开,并删除了所有有希望的东西(在我的例子中是/tmp/jffi*.tmp
)
仍Logstash不会忘记和parsing日志文件夹中的“新鲜”文件
有任何想法吗?
默认情况下,logstash将位置最后一次写入通常驻留在$HOME/.sincedb
的日志文件中。 Logstash可以被愚弄为相信它从未通过将/dev/null
指定为sincedb_path
来parsing日志文件。
这里是文档input文件的一部分。
自写数据库的位置(跟踪受监控日志文件的当前位置)。 缺省为环境variables“$ SINCEDB_PATH”或“$ HOME / .sincedb”的值。
configuration示例
input { file { path => "/tmp/logfile_to_analyse" start_position => "beginning" sincedb_path => "/dev/null" } }
在sincedb文件中的插件文件存储“tailing”的历史,默认:在$ HOME / .sincedb *之下,参见http://logstash.net/docs/1.3.3/inputs/file#sincedb_path
因为db文件包含行如下所示:
[inode] [major device number] [minor device number] [byte offset]
所以,如果你想再parsing一个完整的文件,你需要:
- 删除sindedb文件
- 或者只删除sincedb文件中的相应行,检查文件之前的inode号(
ls -i yourFile | awk '{print $1}'
) - 并重新启动Logstash
使用关键start_position =>“开始,Logstash将分析所有文件。
一个sincedb文件的例子:
- 名称:.sincedb_7a7413a84171aa550d5318c17fd756e9:该名称包含关键path( http://logstash.net/docs/1.3.3/inputs/file#path )中所有目录的sincedb_和MD5(Digest :: MD5.hexdigest)。 查看插件的代码文件: https : //github.com/logstash/logstash/blob/master/lib/logstash/inputs/file.rb#L105
Logstash将logging在$ HOME / .sincedb_ *中。 您可以删除所有.sincedb并重新启动logstash,Logstash将重新分析该文件。
综合所有答案,猜测这是parsing文件的最好方法。 我做了同样的testing。
input { file { path => "/tmp/access_log" start_position => beginning sincedb_path => "/dev/null" ignore_older => 0 } }
要进行快速testing,您也可以touch /tmp/access_log
来更改文件的时间戳,而不是ignore_older
。
如果你正在使用logstash-forwarder,请检查你的家.logstash-forwarder
文件:
{ "/var/log/messages": { "source": "/var/log/messages", "offset": 43715, "inode": 12967, "device": 51776 } }
删除$ HOME / .sincedb_ *后,仍然没有为我摄入数据。
在尝试了一堆东西之后,我从/etc/logstash/conf.d中删除了所有主要的.conf文件,并重新启动了logstash,一切正常。 我只能假定logstash默默地挂在.conf文件中的某个东西上。
如果文件中有大量的数据,实际上每次重新计算都是非常昂贵的。 所以你在做这个之前要小心。 如果我们想强制它重新parsing,那么在input块内设置参数
sincedb_path => "/dev/null"
该选项不会存储.sincedb文件,每次都会重新parsinglogstash。 但是,如果你偶尔要重新进行重新分析,那么你可以做的是手动删除parsing文件时创build的.sinceDbpath。 一般来说,如果你不是根目录下的root用户,它将作为隐藏文件存在于主目录中。 您还可以将sincedb_path设置为其他位置来轻松地跟踪此文件。
sincedb_path => "/home/shubham/sinceDB/productsSince.db"
我发现它在我的家庭目录,但删除后,logstash拒绝重新挑选现有的日志文件。 我得到它的工作方式是补充
sincedb_path => "/opt/elk/sincedb/"
到我的文件插件。 我想重置每一次,只是改变sincedb_path的path
如果你想避免混淆logstash选项,我发现重命名或删除现有的日志文件,并从旧的文件内容创build一个新的文件将欺骗logstash重新索引。
logstash版本5的新目录在
/插件/input/文件
path.data定义在logstash.yml中