【问题标题】:Where does logstash persist state?logstash 在哪里持久化状态?
【发布时间】:2017-10-27 17:01:20
【问题描述】:

我想利用 logstash 和 Csv filter plugin 来监视目录中的新文件并将它们处理到 Elasticsearch 中。这很容易通过类似的配置实现:

input {
    file {
        path => "/csv/*.csv"
        start_position => "beginning"
        sincedb_path => "/dev/null"
    }
}

filter {
    csv {
        separator => ","
    }
}

output {
    elasticsearch {
        hosts => "${ELASTICSEARCH_URL}"
        index => "myData"
        document_type => "auto"
    }
}

我主要关心的是弹性诚信

弹性 - 我观看了 João Duarte 的演讲,他在一年前解释了这方面的挑战。他解释说,logstash(当时)将所有状态都保存在内存中,并且对失败没有弹性。这仍然是真的吗?他暗示可能将状态存储在一个文件中,这个文件现在存在吗?如果 logstash 在读取 Csv 文件的过程中崩溃,我需要它在重新启动时从中断的地方继续。这可能吗?

诚信 - 经过大量谷歌搜索后,Logstash is still incapable of deleting (or renaming) the Csv file after it's read 似乎。我的数据可能不是幂等的,我不能容忍两次读取相同的 Csv。然而,logstash 似乎不会继续尝试一遍又一遍地读取同一个文件,因此有一些机制可以防止读取同一个文件(至少立即)。目前建议什么策略在读取 csv 文件(删除、重命名、移动)后“做某事”,如果这是不可能的,那么清理 csv 文件的最佳实践是什么,因为它们不能永远闲逛。

【问题讨论】:

  • 不知道为什么这会被否决?

标签: elasticsearch logstash kibana elastic-stack


【解决方案1】:

Persistent Queues 从 5.2 开始就在代码中,到 5.6 时,它们被视为生产质量。这会将管道中的事件保存到本地文件中,该文件将在重新启动时读取。

至于不重读文件,这多年来一直是 Logstash 的核心部分。这个机制被称为sincedb,你指定的文件插件有sincedb参数来配置它。 sincedb_path 指定将使用的 sincedb_file 本身,sincedb_write_interval 指定它使用文件偏移量更新数据库的频率。

为了清理您的文件,Logstash 绝对没有为此提供机制,而是故意将其留给操作员。为此有多种机制,其中只有一种是 cron 作业,它每小时运行一次,如下所示:

find /var/log/csv-archive/ -atime 0.083 -type f |xargs rm

用于删除一小时内未访问的所有文件。还有其他方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-09
    • 1970-01-01
    • 2021-05-20
    • 1970-01-01
    • 1970-01-01
    • 2022-11-07
    • 1970-01-01
    • 2020-07-17
    相关资源
    最近更新 更多