我安装了Logstash来解析apache文件。我花了很多时间来设置正确的,我总是尝试真正的日志。我注意到(正如文档所说)logstash“记住”它在文件中的位置。现在我的设置很好,我希望Logstash“忘记”。这似乎比我更难。我已经做了以下事情:
使用:start_position => "beginning"
从elastissearch中删除了完整的“数据”文件夹(并先将其停止)
查看了使用lsof -p PID
的logstash打开的文件,并删除了所有有希望的内容(在我的情况下为/tmp/jffi*.tmp
)
仍然Logstash不会忘记并解析日志所在文件夹中的“新鲜”文件
有什么想法吗?
答案 0 :(得分:127)
默认情况下,logstash将最后一个位置写入日志文件,该日志文件通常位于$HOME/.sincedb
中。通过将/dev/null
指定为sincedb_path
,Logstash可能会误以为它从未解析过日志文件。
这是文档Input File的一部分。
从哪里写入自己的数据库(跟踪当前位置 受监视的日志文件)。默认为环境变量的值 " $ SINCEDB_PATH"或" $ HOME / .sincedb"。
配置示例
input {
file {
path => "/tmp/logfile_to_analyse"
start_position => "beginning"
sincedb_path => "/dev/null"
}
}
答案 1 :(得分:18)
插件文件存储sincedb文件中“拖尾”的历史记录,默认:在$ HOME / .sincedb *下,见http://logstash.net/docs/1.3.3/inputs/file#sincedb_path
自db文件以来包含如下行:
[inode] [major device number] [minor device number] [byte offset]
因此,如果要再次解析完整文件,则需要:
ls -i yourFile | awk '{print $1}'
)使用密钥start_position => "beginning"
,Logstash将分析所有文件。
sincedb文件的示例:
.sincedb_7a7413a84171aa550d5318c17fd756e9
:名称包含sincedb_和密钥路径(http://logstash.net/docs/1.3.3/inputs/file#path)中所有目录的MD5(Digest :: MD5.hexdigest)。请参阅插件文件的代码:https://github.com/logstash/logstash/blob/master/lib/logstash/inputs/file.rb#L105 答案 2 :(得分:9)
Logstash会将记录保存在$HOME/.sincedb_*
中。您可以删除所有.sincedb
并重新启动logstash,Logstash将重新解析该文件。
答案 3 :(得分:9)
结合所有答案,猜猜这是解析文件的最佳方法。我的测试也做了同样的事情。
input {
file {
path => "/tmp/access_log"
start_position => beginning
sincedb_path => "/dev/null"
ignore_older => 0
}
}
要进行快速测试,您还可以ignore_older
代替touch /tmp/access_log
来更改文件的时间戳。
答案 4 :(得分:5)
如果您使用的是logstash-forwarder,请检查您家的.logstash-forwarder
文件:
{
"/var/log/messages": {
"source": "/var/log/messages",
"offset": 43715,
"inode": 12967,
"device": 51776
}
}
答案 5 :(得分:3)
删除$HOME/.sincedb_*
后,它仍然没有为我提取数据。
在尝试了很多事情之后,我从.conf
删除了除/etc/logstash/conf.d
主文件以外的所有文件,然后重新启动了Logstash,一切正常。我只能假设其中一个.conf
文件中存在logstash默默挂起的内容。
答案 6 :(得分:1)
如果文件中包含大量数据,实际上每次重新分析都会非常昂贵。所以在这之前你需要小心。 如果我们想强制它再次重新分析,那么在输入块
中设置参数sincedb_path => "/dev/null"
此选项不会存储.sincedb文件,每次都会重新解析logstash。但是如果你想每次都不重新解析那么你可以做的就是手动删除解析文件时创建的.sinceDb路径。通常,如果您不是root用户,则它在主目录中作为隐藏文件存在,否则在根目录中。 您还可以将sincedb_path设置为其他位置以轻松跟踪此文件。
sincedb_path => "/home/shubham/sinceDB/productsSince.db"
答案 7 :(得分:0)
我在我的家庭目录中找到了它但删除后,logstash拒绝重新选择现有的日志文件。我开始工作的方式是添加
sincedb_path => "/opt/elk/sincedb/"
到我的文件插件。我想每次重置一次,只需改变sincedb_path的路径
答案 8 :(得分:0)
如果您使用tar.gz install filebeat,则可以删除此文件$FilebeatPath/data/registry/filebeat/data.json
,然后重新运行filebeat
答案 9 :(得分:0)
尝试通过删除ENV中的/var/lib/logstash
文件夹
答案 10 :(得分:0)
您可以看到 Logstash 将保存一个 sincedb 文件,跟踪它已经看到并处理了哪个文件,直到哪一行。
如果您想删除现有的sincedb文件并且您没有自己定义sincedb_path,您可以在
<path.data>/plugins/inputs/file
默认情况下
LOGSTASH_HOME/data
默认情况下 LOGSTASH_HOME 保存该值
/var/lib/logstash
如果你想完全控制它,最好定义sincedb_path
答案 11 :(得分:0)
我建议:
sincedb_clean_after => 0
start_position => "beginning"
答案 12 :(得分:-1)
logstash版本5新目录位于
<path.data>/plugins/inputs/file
path.data定义在logstash.yml
中