我一直在看ELK堆栈或RabbitMQ来取代一个自制的系统,摄取大量的文件(每小时200-300万),然后根据名称和内容将它们发送到各个位置,在本地存储一个副本。 (基本上,ELK)
不过,我在所需的复杂性和硬件足迹方面还有一点偏差。
RabbitMQ和ELK栈在这种任务上有什么优势? 在我看来,ELK可能是过分的,但我对RabbitMQ并不熟悉。
我的math说这是每秒83K事件。 好多啊。
我不太清楚为什么要分开RMQ和ELK,因为RMQ可以是ELK的一个组件。 事实上,我所知道的非常大型的部署肯定使用像Rabbit这样的AQMP解决scheme,或者像Kafka这样的解决scheme来提供事件生成和parsing层之间的缓冲区,以及提供多个消费者。
可以处理事件stream的一般高规模pipe道就像你正在考虑的那样:
这种架构的优势在于,您不会将过滤逻辑放在正在进行生产工作的资源上。 它还将ElasticSearch的接收问题减less到大部分来自Logstashparsing层的批量请求,而不是来自生产资源的较小的接收批次。
这也在您的日志归档(ElasticSearch)和您的生产资源之间提供了一些安全分离。 如果其中一个人在他们身上得到一个邪恶的人,拥有队列缓冲区意味着他们不能直接擦除ElasticSearch的存在。 当你在公司里有一个安全组织时,这个问题就很重要,而在每小时300M的事件中,你可能已经足够大了。
针对兔子系统的要点更多的是缺less的function。 兔子是一个排队系统,本身并不提供任何方式来转换数据(ELK中的L)或存储它(ELK中的E和K)。 无法显示其存储内容的日志归档系统不是一个好的日志归档系统。
与@ sysadmin1138一起去大部分,但我想警告你比较两个不同的东西。 ELK是三个独立的应用程序的实现,提供了一个日志聚合解决scheme(F / OSS竞争对手Splunk),其中RabbitMQ是一个消息队列。
这听起来像你有一个非常具体的应用程序工作stream程,而你所做的任何事情都将需要重大的工程。 你也许可以弯曲ELK来满足你的需求,但正如sysadmin1138所说,任何有这个工作负载的系统都需要适当的扩展来满足容量和HA要求。
ELK和RabbitMQ的规模非常好,但需要一些专业知识才能有效pipe理。 这样说的话,如果你没有使用和pipe理任何规模的ELK集群(比如说至less有 5个ES节点),你可能希望避免使用ELK作为一个非法的黑客行为系统。
根据进入的消息types以及结果的处理位置,对于我来说,听起来像是使用MQ群集以及将作业closures并对其执行操作的应用程序池。 但在这一点上,您正在谈论一个重要的项目,可能需要软件架构师和操作系统架构师的参与,熟悉您的业务需求和工作stream程。 (即比ServerFault问题更复杂)。