有没有办法配置logstash来忽略特定输出插件的失败?

时间:2016-01-07 02:46:51

标签: elasticsearch logstash

我有一个logstash管道,其中日志被传输到我的日志服务器并存储在磁盘上(最高优先级)。然后在单独的服务器(最低优先级)上的elasticsearch中将日志编入索引。我今天意识到,如果弹性搜索变得无法访问,整个管道就会受到损害,我不能冒一些阻止日志存储在磁盘上的风险。

如何告诉logstash忽略特定输出插件的错误,例如elasticsearch的连接错误?

更新

我当前的设置以伐木工人输入开始,接受来自所有其他实例的转发日志。然后文件不受影响到文件输出(最高优先级)。然后,一切都通过他们的特定过滤器(syslog,nginx等)。最后,过滤后的日志会进入弹性搜索输出(最低优先级),其中每个日志类型都在其自己的索引中编制索引。

在阅读了一些logstash文档之后,我知道管道中的任何错误都会影响其他插件。

1 个答案:

答案 0 :(得分:0)

听起来你已经完成了:     (客户端) - > Logstash->文件< -Logstash-> Elasticsearch

这似乎是您尝试在出现问题时将文件用作代理的方式。

以下是2.5种替代方案:

  1. 运行两个logstash进程 - 一个用于从客户端接收日志并将其写入文件,第二个用于读取文件并将其写入elasticsearch。您仍然面临其他事情危及此流程的风险(如磁盘空间不足等)。
  2. 使用像redis或rabbitmq这样的真实经纪人。对于我的瞬态数据,如果不处理会丢失(snmptrap,syslog),我会运行一个小的logstash来获取该输入并将其写入redis。第二个logstash从redis读取并应用所有logstash魔法。
  3. 如果可能,请使用更好的托运人。例如,Filebeat(logstash-forwarder的替代品,也称为lumberjack)将在检测到logstash的反压时停止发送日志。这为您提供免费的分布式缓存。当然,对于某些输入(参见#2),这是不可能的。