【问题标题】:Logstash - reading only appended data in fileLogstash - 仅读取文件中的附加数据
【发布时间】:2021-05-17 09:42:01
【问题描述】:

我正在学习如何使用 logstash,但在使用不断更新的 logstash 读取文件时遇到了一些问题。这是我的测试:

  • logstash.conf
input {
    file {
        path => ["/usr/share/logs_data/first_log_test.log"]
        start_position => "beginning"
    }
}

filter {
    grok {
        match => ["message", "(?<execution_date>\d{4}-\d{2}-\d{2}) (?<execution_time>\d{2}:\d{2}:\d{2})%{GREEDYDATA}ParaBrutos/configs/pipelines/(?<crawler_category>([^/])+)/(?<crawler_subcategory>([^-])+)-(?<crawler_name>([^.])+).json"]
    }
}

output {
    elasticsearch {
        hosts => "elasticsearch:9200"
        user => "elastic"
        password => "changeme"
        ecs_compatibility => disabled
        index => "logs_second"
    }
}

首先,我使用this repo 的代码,以 dockerized 方式安装 ELK 堆栈。

我从这个空的测试日志文件开始,然后在文本编辑器中一一添加几行匹配该模式的行,同时在 kibana 更新中查看索引模式。但是,我在此测试日志中添加的每一行都不是单独添加的,而且我在 kibana 索引模式中看到了旧条目的命中。

会发生什么?

  • 可能与在创建索引模式时不选择时间过滤器有关吗?

  • 或与since_db 设置相关的内容?但是什么?因为默认情况下,不应该保存文件的最后读取位置吗?

  • 或与start_position 相关的东西?即使通过插件documentation,它应该只有在文件的第一次读取完成时才生效?

我有点迷茫,尝试了很多东西,但仍然不能很好地理解正在发生的事情。你能帮帮我吗?

【问题讨论】:

    标签: elasticsearch logstash kibana elk kibana-7


    【解决方案1】:

    如果您使用的是文本编辑器,那么您可能每次退出时都会创建一个新文件。

    这可能是一个 inode 重用问题。 META 问题211 中有各种问题的链接。尤其是251。

    在文件可以旋转时跟踪哪些文件已被读取是一个非常困难的问题。比大多数人最初想象的要困难得多。一个很好的选择是校验文件内容(尽管这不是万无一失的)。文件输入不会这样做,因为它可能会变得非常昂贵。相反,它实现了一种非常便宜的技术,几乎总是能正确处理(但在少数情况下,它认为它已经读取了一个它尚未读取的文件)。

    在其他情况下,复制数据会出错(这就是您所遇到的问题)。正如我所说,这是一个非常困难的问题。

    【讨论】:

    • 这正是发生的事情!我解决了它用echo 更新我的文件,它工作。谢谢獾!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-31
    • 2022-12-13
    • 1970-01-01
    • 2018-11-26
    • 1970-01-01
    相关资源
    最近更新 更多