我们有大量的应用程序分布在多个数据中心的多台机器上。
在一天中,我们将接收到信号(内部或外部),这些信号会在每个应用程序中引发一系列事件。
因此,每个信号都会产生大量的事件日志数据。日志本身并不是特别结构化的,并且它们在应用程序之间也有很大不同。他们确实遵循基本约定:
<timestamp> <calling function/method> <payload>
我们在日志行中有 ID 号,可以帮助将事件与信号联系起来——然而,这些并不是万无一失的,我们有时需要使用其他方式来尝试将事件拼凑在一起。
我一直在阅读有关 Twitter 的 Storm 系统的信息,我对尝试使用它来实时分析大量日志数据并将其拼凑起来非常感兴趣。
我想做这样的事情:
- 根据实时数据趋势生成报告和流图。
- 查询一个信号,然后在所有应用程序中调出与该信号相关的整个事件链,包括链中步骤之间的延迟。(这个很重要)。
- 查看相关事件,并深入了解应用程序在某个事件发生时还做了什么。
输入数据?
日志数据存储在本地日志文件中(这不太可能改变),所以我们需要一种方法将数据吞入 Storm 本身。日志文件也可以被压缩。我已经考虑过使用 Flume 或 Logstash - 人们对这些有什么看法?或者是否有其他方法可以很好地与 Storm 配合使用?
存储事件?
我还需要一种方法来存储实时报告和图表的数据,以及事件数据本身。
第二部分我觉得有点棘手——什么样的存储后端适合存储事件,以及它们之间的链接?某种图形数据库是否合适,是那些新奇的无模式 NoSQL 数据库之一,还是更传统的东西?
风暴合适吗?
最后,Storm 适合这个角色,还是其他更适合的角色?
如果我确实选择了 Storm,我可以采取什么样的方法来解决这个问题?我希望其他人有类似问题的经验。
干杯,维克多