使用持久队列

时间:2017-02-10 13:23:54

标签: elasticsearch logstash logstash-configuration filebeat

我已使用以下配置启动了logstash:

logstash.yml

queue.type: persisted
queue.max_bytes: 8gb
queue.checkpoint.writes: 1

配置文件:

input {
    beats {
        port => "5043"
    }
}
filter {
    grok {
        match => {
            "message" => "%{COMBINEDAPACHELOG}"
        }
    }
    geoip {
        source => "clientip"
    }
}
output {
    elasticsearch {
        hosts => ["localhost:9200"]
        index => "test"
        document_type => "tw"
    }
}

我有这样的情况。

  1. 想象一下,弹性搜索已关闭

  2. 现在想象一下,当关闭elasticsearch时,logstash会收到记录事件

  3. 现在想象一下我们也关闭了logstash
  4. 现在,如果我打开logstash和elasticsearch,则logstash不会发送在步骤2中收到的消息 - 即弹性搜索关闭且logstash正在接收事件

2 个答案:

答案 0 :(得分:0)

现在,Logstash持久队列的行为如下:
“启用持久队列功能后,Logstash会将事件存储在磁盘上。Logstash通过一种称为检查点的机制提交到磁盘。”

https://www.elastic.co/guide/en/logstash/current/persistent-queues.html https://www.elastic.co/guide/en/logstash/current/persistent-queues.html#durability-persistent-queues

答案 1 :(得分:0)

这是您在 logstash.yml 中为您的管道准备的全部内容吗?您应该在 logstash.yml 或 pipelines.yml 中定义您的管道设置。例如,它应该如下所示:

- pipeline.id: Beats
  path.config: "/LogStash/pipelines/beatspipeline.yml"
  queue.type: persisted
  path.queue: /Logstash/data/queue
  queue.max_bytes: 10gb

文档没有明确说明您必须配置每个管道设置,但我知道这种方法一直有效。