我是 Elastic Search
和 logStash
的初学者。在浏览了 n 份文档之后,我仍然无法弄清楚。为什么在日志传送和索引组件之间需要一个代理。我们不能直接将日志发送到 Elastic Search
并开始索引吗?
最佳答案
消息队列
消息队列的作用是充当看门人,保护解析器不因过多的日志消息而过载。这完全是关于您的解析器在一秒钟内可以处理的最大事件数,当这个速率变得太高时,日志解析器将丢弃事件并导致数据丢失。为防止这种情况,必须使用消息队列。
拉与推
当您将日志消息直接从日志发送器发送到日志解析器时,您基本上是在推送消息,并希望解析器能够处理这些事件被推送给它的速率。当您选择使用消息队列时,您允许日志解析器以它可以处理的速率拉取消息。当速率太高,解析器无法拉取所有消息时,它们将堆积在您的消息队列中,一旦速率变低,解析器将拉取这些消息并清空队列。消息队列是防止中央日志记录解决方案出现临时高负载的最佳保护。
数据库危机
在极少数情况下,您的数据库服务器会崩溃,在此期间,解析器将没有可用的目的地来将其已解析的日志消息发送到。从输入端,解析器将从日志传送器接收到越来越多的消息,并将开始丢弃它们。那样的话,这段时间产生的所有日志信息都会消失。 消息队列是解决这种情况的一个很好的解决方案,它将允许解析器停止拉取事件并让它们在消息队列中累积。一旦恢复到数据库的 session ,所有事件将由解析器提取并发送到数据库。解析和写入如此大的队列可能需要一些时间,但最终您将可以完全访问生成的日志数据,并且不会丢失任何数据。
安全层
在某些情况下,您的日志文件可能分散在数据中心外的不同服务器之间,您会希望它们将数据发送到您的集中式日志记录解决方案。通过使用消息队列,您将能够保护数据安全、加密发送数据并限制对消息队列服务器上单个端口的入站访问。考虑集中式日志记录解决方案的安全方面非常重要,尤其是在涉及分布式服务器环境时。
关于logging - 为什么需要 Redis、AMQP 或 0MQ 以及 Elasticsearch 和 logstash?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26930047/