Logstash + Elasticsearch在本地进行故障转移或重试

时间:2016-03-30 21:41:26

标签: elasticsearch redis logstash

我有一个可以工作的Redis支持的ELK堆栈,但偶尔,当ElasticSearch由于某种原因而无法使用时,我会遇到问题。

日志事件流程:

  1. 服务器生成日志
  2. 服务器运行log-courier,收集日志,远程推送到Logstash服务器
  3. Logstash-incoming写入本地Redis服务
  4. Redis保存要处理的事件,充当缓冲区
  5. Logstash-outgoing从Redis队列读取,运行grok和其他过滤器,然后输出到Elasticsearch集群。
  6. logstash-incoming.conf

    input {
      courier {
        port => 123
        transport => "tcp"
      }
    }
    output {
      redis {
        host => "127.0.0.1"
        data_type => "list" 
        key => "logstash"
      }
    }
    

    logstash-outgoing.conf

    input {
      redis {
        host => "127.0.0.1"
        data_type => "list" 
        key => "logstash"
      }
    }
    output {
      elasticsearch {
        hosts => "elasticsearchcluster.local"
      } 
    }
    

    如果在步骤5中出现故障,则事件将从Redis中弹出,Logstash将尝试三次,然后黑洞化批量有效负载,从而导致数据收集漏洞。

    有没有办法:

    1. 将重试从3次x 2秒等待延伸到更加慷慨的事情。
    2. 将失败的有效负载写入磁盘,允许我在问题解决后将它们重新导入ElasticSearch。
    3. 理想情况下,两者。

1 个答案:

答案 0 :(得分:1)


我认为在写作的那一刻,两者都不可能。关于第2点。一个死信队列设施已经在路线图上,但显然还没有发布。看看这两张票:

再见 马库斯