elasticsearch Logstash-仅读取文件中的附加数据,elasticsearch,logstash,kibana,elk,kibana-7,elasticsearch,Logstash,Kibana,Elk,Kibana 7" /> elasticsearch Logstash-仅读取文件中的附加数据,elasticsearch,logstash,kibana,elk,kibana-7,elasticsearch,Logstash,Kibana,Elk,Kibana 7" />

elasticsearch Logstash-仅读取文件中的附加数据

elasticsearch Logstash-仅读取文件中的附加数据,elasticsearch,logstash,kibana,elk,kibana-7,elasticsearch,Logstash,Kibana,Elk,Kibana 7,我正在学习如何使用logstash,在使用logstash读取不断更新的文件时遇到了一些问题。这是我的测试: logstash.conf 输入{ 文件{ path=>[“/usr/share/logs\u data/first\u log\u test.log”] 开始位置=>“开始” } } 滤器{ 格罗克{ match=>[“message”,“(?\d{4}-\d{2}-\d{2})(?\d{2}:\d{2}:\d{2})%{GREEDYDATA}ParaBrutos/configs/

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

  • logstash.conf
输入{
文件{
path=>[“/usr/share/logs\u data/first\u log\u test.log”]
开始位置=>“开始”
}
}
滤器{
格罗克{
match=>[“message”,“(?\d{4}-\d{2}-\d{2})(?\d{2}:\d{2}:\d{2})%{GREEDYDATA}ParaBrutos/configs/pipelines/(?([^/])+/(?([^-])+(?([^-])-(?([^.])+)-(?([^.])+).json]
}
}
输出{
弹性搜索{
主机=>“elasticsearch:9200”
用户=>“弹性”
密码=>“更改我”
ecs_兼容性=>已禁用
索引=>“每秒记录”
}
}
首先,我使用repo的代码,以固定方式安装ELK stack

我以这个测试日志文件为空开始,然后在文本编辑器中添加了几行,一行一行地处理模式,同时看到kibana中的索引模式正在更新。然而,我在这个测试日志中添加的每一个新行并不是单独添加的,我在kibana索引模式中看到了旧条目的点击

会发生什么

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

  • 或者与
    相关的东西,因为\u db
    设置?但是什么呢?因为默认情况下,它不应该保存文件的最后读取位置吗

  • 或与
    开始位置相关的内容
    ?尽管如此,通过插件,它应该只在第一次读取文件时生效


我有点迷路了,尝试了很多东西,但仍然不太了解发生了什么。您能帮助我吗?

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

这可能是一个inode重用问题。元问题中有各种问题的链接。特别是见251

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


在其他情况下,它会通过复制数据(这就是您要点击的内容)而出错。正如我所说,这是一个非常困难的问题。

这正是发生的事情!我用
echo
更新了我的文件,解决了这个问题,它成功了。谢谢你,獾!
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"
    }
}