95

我安装了 Logstash 来解析 apache 文件。我花了相当多的时间来正确设置设置,而且我总是尝试使用真实的日志。我注意到(如文档所述)logstash“记住”它在文件中的位置。现在我的设置没问题,我希望 Logstash “忘记”。这似乎比我更难。我已经做了以下事情:

  • 用过的:start_position => "beginning"

  • 从 elastissearch 中删除了完整的“数据”文件夹(并首先将其停止)

  • 查看了哪些文件由 logstash 打开lsof -p PID并删除了所有有希望的文件(在我的情况下/tmp/jffi*.tmp

仍然 Logstash 不会忘记并仅解析日志所在文件夹中的“新鲜”文件

有任何想法吗?

4

14 回答 14

137

默认情况下,logstash 将位置最后一次写入日志文件,该日志文件通常位于$HOME/.sincedb. Logstash 可以通过指定/dev/nullsincedb_path.

这里是文档Input File的一部分。

自数据库写入位置(跟踪受监控日志文件的当前位置)。默认为环境变量“$SINCEDB_PATH”或“$HOME/.sincedb”的值。

配置示例

input {
    file {
        path => "/tmp/logfile_to_analyse"
        start_position => "beginning"
        sincedb_path => "/dev/null"
    }
}
于 2014-08-04T13:31:16.540 回答
20

插件文件在 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]

所以,如果你想再次解析一个完整的文件,你需要:

  • 删除 sindedb 文件
  • 或者只删除sincedb文件中的相应行,检查文件之前的inode号(ls -i yourFile | awk '{print $1}'
  • 并重启 Logstash

使用 key start_position => "beginning",Logstash 将分析所有文件。

sincedb 文件示例:

于 2014-01-26T15:14:38.487 回答
11

Logstash 将记录保存在$HOME/.sincedb_*. 您可以删除所有.sincedb并重新启动logstash,Logstash 将重新解析文件。

于 2014-01-27T03:11:54.770 回答
9

综合所有答案,猜猜这是解析文件的最佳方式。我为我的测试做了同样的事情。

input {
  file {
    path => "/tmp/access_log"
    start_position => beginning
    sincedb_path => "/dev/null"
    ignore_older => 0
  }
}

为了快速测试,ignore_older您还touch /tmp/access_log可以更改文件的时间戳,而不是 。

于 2016-12-18T23:23:58.487 回答
5

如果您使用 logstash-forwarder,请检查您的主页以获取.logstash-forwarder文件:

{
  "/var/log/messages": {
    "source": "/var/log/messages",
    "offset": 43715,
    "inode": 12967,
    "device": 51776
  }
}
于 2014-11-25T21:25:23.183 回答
3

删除后$HOME/.sincedb_*它仍然没有为我摄取数据。

在尝试了一堆东西之后,我删除了除主.conf文件之外的所有文件/etc/logstash/conf.d并重新启动了 Logstash,一切正常。我只能假设其中一个.conf文件中有一些东西,logstash 默默地挂在上面。

于 2015-04-03T16:02:49.007 回答
1

如果文件中包含大量数据,则实际上每次重新解析都非常昂贵。因此,在执行此操作之前,您需要小心。如果我们想强制它再次重新解析,那么在输入块内设置参数

sincedb_path => "/dev/null" 

此选项不会存储 .sincedb 文件,logstash 每次都会重新解析。但是,如果您不想每次都偶尔重新解析,那么您可以做的是手动删除在解析文件时创建的 .sinceDb 路径。通常,如果您不是根用户,则它作为隐藏文件存在于主目录中,否则位于根目录中。您还可以将 sincedb_path 设置为其他位置以轻松跟踪此文件。

sincedb_path => "/home/shubham/sinceDB/productsSince.db"
于 2015-07-06T12:39:33.830 回答
1

如果您想避免弄乱logstash 选项,我发现重命名或删除现有日志文件并从旧文件内容创建文件会欺骗logstash 重新索引。

于 2016-08-15T14:21:17.237 回答
0

我在我的主目录中找到了它,但删除它后,logstash 拒绝重新选择现有的日志文件。我让它工作的方式是添加

sincedb_path => "/opt/elk/sincedb/"  

到我的文件插件。我想每次都reset,只要改变sincedb_path的路径

于 2014-08-31T02:35:01.813 回答
0

如果你使用 tar.gz install filebeat,你可以删除这个文件$FilebeatPath/data/registry/filebeat/data.json,然后重新运行 filebeat

于 2019-04-19T09:49:09.637 回答
0

尝试删除/var/lib/logstashENV 中的文件夹

于 2020-01-28T11:24:29.330 回答
0

如上所示: https ://www.elastic.co/guide/en/logstash/current/plugins-inputs-file.html#plugins-inputs-file-sincedb_path

您可以看到 Logstash 将保存一个 sincedb 文件,以跟踪它已经查看和处理到哪一行的文件。

如果您想摆脱现有的 sincedb 文件并且您没有自己定义 sincedb_path ,您可以在

<path.data>/plugins/inputs/file

默认情况下 <path.data> 保存该值

LOGSTASH_HOME/data

默认情况下 LOGSTASH_HOME 保存该值

/var/lib/logstash

如果您想完全控制它,最好定义 sincedb_path

于 2021-03-21T11:28:11.183 回答
0

我会建议:

sincedb_clean_after => 0
start_position => "beginning"
于 2021-04-02T06:47:23.127 回答
-1

logstash 版本 5 新目录在

<path.data>/plugins/inputs/file

path.data 定义在 logstash.yml

于 2017-06-23T23:04:23.207 回答