当前位置: 首页 > 面试题库 >

Logstash和ElasticSearch之间丢失的文档

鲁财
2023-03-14
问题内容

我正在运行基本的ELK堆栈。在vm中运行的所有三个html" target="_blank">组件。Logstash正在侦听TCP 9140,以获取其输入通过NxLog代理从大约30个Windows
Server 2008s和30个Windows Server 2003事件(evts)中接收的信息,并将其输出到elasticsearch。

这个已经运行了好几个星期了。我可以看到ElasticSearch每天都在创建索引,并且可以浏览文档,创建图形,这一切都很好。

经过一个周末,我意识到在星期五晚上9点,所有新活动都停止了。 没有网络问题,
所有服务器都在发送日志,我只能看到很多与Watcher(弹性插件)有关的错误/警告,但没有许可,但没什么有趣的事。我什至可以看到与新索引相关的日志已自动创建。

所以我删除了插件,重新启动了弹性,一切都很好。我认为这不是真正的问题,我认为Elasticsearch挂断了。

我有两个问题:

1)我应该如何解决这些情况。(所有服务都打开,没有索引文件)?

2)如果Logstash处于启动状态并接受输入,而Elastic处于关闭状态,那么从Windows服务器发出的那些事件会如何处理?从Nxlog的角度来看,那些日志已正确发送到logstash,因此没有理由重试并且这些日志将丢失,“永远”?

谢谢!罗德里戈。


问题答案:

如果ES由于某种原因(忙于GC处理等)而关闭或挂断,则logstash将重试几次,然后放开它,这意味着您将丢失这些事件。

有很多方法可以缓解这种情况,但是一个好的实践是持久地存储事件(在DB或消息队列系统中),并仅在事件成功发送到ES后才弹出它们。这样的消息传递系统包括Redis(使用列表或通道作为队列),Apache
Kafka
(分布式日志),Rabbitmq(分布式消息队列)等

有很多方式与logstash一起配置这些技术,一个例子是这一个,显示Logstash正在与卡夫卡使用。在您的情况下,这意味着Nxlog将其日志发送到kafka,而不是直接发送到Logstash。然后Logstash使用来自Kafka主题的日志。

您的里程会有所不同,但是这里的主要思想是,如果您的日志无法发送到Elasticsearch,则不会丢失。这将回答您的第二个问题。

至于您的第一个,我建议您安装其他ES插件,例如bigdesk和HQ和/或官方的Marvel插件,这些插件都可以深入洞悉Elasticsearch内部正在发生的事情。您将能够快速检测出问题所在并采取措施。



 类似资料:
  • 问题内容: 有什么方法可以使用Logstash和csv文件从ElasticSearch删除文档?我阅读了Logstash文档,却一无所获,并尝试了一些配置,但是使用操作“删除”却没有任何反应 有人尝试过吗?我应该在配置的输入和过滤器部分添加一些特殊的东西吗?我使用文件插件作为输入,使用csv插件作为过滤器。 问题答案: 绝对可以按照您的建议去做,但是如果您使用的是Logstash 1.5,则需要使

  • 我读到elasticsearch Rivers/River插件不推荐使用。所以我们不能直接进行elasticsearch-kafka积分。如果我们想这样做,那么我们需要在两者之间有一个java(或任何语言)层,使用它的API将数据从kafka放到弹性搜索。 另一方面,如果我们有kafka-logstash-elasticsearch,那么我们可以去掉上面的中间层,并通过logstash来实现,只需

  • 因此,当使用logstash中的JDBC导入器并导出到elasticsearch时,我试图对文档类型与文档id进行思考。 我终于把我的头缠在索引上了。但让我们假设我正在从传感器数据表(如温度/湿度等)中提取数据有传感器id的。。。温度/湿度(与天气相关的数据),并记录时间。(所以这是一张大桌子) 而且我希望每隔X频繁地轮询数据库。 在这个例子中,document_type和document_id是

  • 问题内容: 我们正在定义一种架构,以通过安装在各种计算机上的Logstash托运人收集日志信息,并在一个Elasticsearch服务器中集中索引数据,并使用Kibana作为图形层。我们需要在Logstash托运人和elasticsearch之间建立可靠的消息传递系统,以准许交货。在Logstash托运人与elasticsearch之间选择Redis over RabbitMQ作为数据代理/消息传

  • 假设Oracle模式有以下表和列: 我有我的Elasticsearch文档,其中根元素是一个国家,它包含该国家的所有部门,而这些部门又包含各自部门的所有员工。 因此,文档结构如下所示: 我希望能够在每个表上运行单独的输入jdbc查询,并且每当基表中的数据被添加/更新/删除时,它们应该在elasticsearch文档中创建/更新/删除数据。 这是一个示例问题,实际的表和数据结构更加复杂。所以我不是在

  • 我的spring boot应用程序总是在早上向我显示这个白标签错误:无法打开JPA EntityManager进行事务处理;嵌套异常为javax.persistence.persistenceException:org.hibernate.transactionException:JDBC begin transaction Failed: 对于数据源,我使用spring Data的存储库: 下面