我有一个可用的Redis支持的ELK堆栈,但是,偶尔由于某些原因导致ElasticSearch不可用时,我会遇到问题。

日志事件流:

  • 服务器生成日志
  • 服务器运行日志 express ,收集日志,远程推送到Logstash服务器
  • Logstash传入写入本地Redis服务
  • Redis保留要处理的事件,充当缓冲区
  • Logstash发出的日志从Redis队列中读取,运行grok和其他过滤器,然后输出到Elasticsearch集群。

  • 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将尝试3次,然后将批量有效负载黑洞,从而导致数据收集出现漏洞。

    有没有一种方法可以:
  • 将重试时间从3次x 2秒的等待时间扩展到更为慷慨的内容。
  • 将失败的有效负载写入磁盘,以便在问题解决后将它们通过管道传输回ElasticSearch。
  • 理想情况下,两者都是。
  • 最佳答案

    我认为在撰写本文时,两者都不可行。关于第2点,一个死信队列工具已经在路线图上,但是显然还没有发布。查看以下两张票:

  • https://github.com/elastic/logstash/issues/2533
  • https://github.com/elastic/logstash/issues/2607

  • 再见
    马库斯

    关于elasticsearch - Logstash + Elasticsearch故障转移在本地或重试,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36320253/

    10-16 12:39