elasticsearch 基于elasticsearch连接的Logstash输出条件,elasticsearch,logstash,logstash-configuration,elasticsearch,Logstash,Logstash Configuration" /> elasticsearch 基于elasticsearch连接的Logstash输出条件,elasticsearch,logstash,logstash-configuration,elasticsearch,Logstash,Logstash Configuration" />

elasticsearch 基于elasticsearch连接的Logstash输出条件

elasticsearch 基于elasticsearch连接的Logstash输出条件,elasticsearch,logstash,logstash-configuration,elasticsearch,Logstash,Logstash Configuration,我目前正在使用logstash解析几个类似命令的结果,并将其输出到elasticsearch,如下所示: input { exec { type => 'hist' command => '/usr/bin/somecommand' interval => 900 codec => "json" } exec { type => 'hist' command => '/usr/bin/somecom

我目前正在使用logstash解析几个类似命令的结果,并将其输出到elasticsearch,如下所示:

input {
  exec {
    type => 'hist'
    command => '/usr/bin/somecommand'
    interval => 900
    codec => "json"
  }

  exec {
    type => 'hist'
    command => '/usr/bin/somecommand'
    interval => 900
    codec => "json"
  }

  exec {
    type => 'hist'
    command => '/usr/bin/somecommand'
    interval => 900
    codec => "json"
  }
}

output {
        if [type] == "hist" {
                elasticsearch {
                        hosts => ["hostname.domain.com:9200"]
                        index => "monitor-hist-%{+YYYY-MM-dd}"
                }
        }
}
如果与elasticsearch的连接失败,我希望能够输出到stdout或文件,如:

if _connectionfails_ {
    stdout {
          codec => rubydebug
    }
}

这可能吗?或在弹性不可用时管理数据的任何其他建议?

Logstash在处理期间将所有事件保存在主内存中。Logstash通过尝试停止输入并在关闭前等待挂起事件完成处理来响应SIGTERM。当由于输出或过滤器卡住而无法刷新管道时,Logstash将无限期地等待。例如,当管道将输出发送到Logstash实例无法访问的数据库时,该实例在收到SIGTERM后会无限期等待。

当输入失败时,您是否会收到事件?否则,将没有任何内容可供过滤或输出。它将记录故障,因此您可以将logstash日志摄取到另一个弹性堆栈中,并以这种方式查找故障。通常,如果连接失败,它将进行无限次重试。@Priyansgoel我注意到了这一点:但我不清楚的是它如何“缓冲”数据。假设集群停机30分钟以上。可能会有两次运行失败,这两次都会一直重试直到集群启动吗?重试时数据是否保存在堆中?或者,也许是暂时的,我希望我的答案能消除你的疑惑,我想知道的是,我们的弹力搜索集群在半夜下降,我们8小时没有注意到。因为我在上面发布的logstash配置每15分钟运行一次,所以可能有多达32次的数据需要重试。这可能是几GB。所以,如果logstash一直试图传递这些数据,并且数据不断堆积,我会在某个时候出现OutOfMemory错误吗?这就是我问题的第二部分。如果我可以让logstash在一段时间后中止连接尝试并将数据输出到磁盘,我可以阻止这种情况发生?如果发生这种情况,它也将停止接收输入。“Logstash通过尝试停止输入来响应SIGTERM”这一行在我的回答中表明了相同的观点。啊,好的,那么它只会重试交付第一次错过的运行?以下运行将被删除或忽略?是的,在您的情况下会发生。好的,很高兴知道。那么,如何“缓冲”这些重试数据呢?我正在考虑将其输出到一个文件,因此是问题的第二部分。如果弹性输出失败,有没有一种方法可以输出到文件,或者有没有其他方法可以缓冲数据?如果弹性连接成功,也许我可以始终输出一个文件,然后删除该文件?