我正在尝试找到可以用来构建类似于 Splunk 的最佳组件,以便从计算网格中的大量服务器聚合日志。它也应该分发,因为我每天都有大量的日志,没有一台机器能够存储日志。
我对可以与 Ruby 一起使用并且可以在 Windows 和最新的 Solaris 上工作的东西特别感兴趣(是的,我有一个动物园)。
我将架构视为:
- 日志爬虫(Ruby 脚本)。
- 分布式日志存储。
- 分布式搜索引擎。
- 轻量级前端。
日志爬虫和分布式搜索引擎没有问题 - 日志将由 Ruby 脚本解析,ElasticSearch 将用于索引日志消息。前端也很容易选择——Sinatra。
我的主要问题是分布式日志存储。我查看了 MongoDB、CouchDB、HDFS、Cassandra 和 HBase。
- MongoDB 被拒绝,因为它不能在 Solaris 上运行。
- CouchDB 不支持分片(需要 smartproxy 才能使其工作,但这是我什至不想尝试的东西)。
- Cassandra 工作得很好,但它只是占用磁盘空间,并且需要每天运行自动平衡以在 Cassandra 节点之间分散负载。
- HDFS 看起来很有希望,但 FileSystem API 只是 Java,而 JRuby 很痛苦。
- HBase 看起来是一个最好的解决方案,但部署它和监控只是一场灾难——为了启动 HBase,我需要先启动 HDFS,检查它是否启动没有问题,然后启动 HBase 并检查它,然后启动 REST 服务和也检查一下。
所以我被困住了。有人告诉我 HDFS 或 HBase 是用作日志存储的最佳选择,但 HDFS 只能与 Java 一起顺利运行,而 HBase 只是部署/监控的噩梦。
任何人都可以分享使用我上面描述的组件或完全不同的东西构建类似系统的想法或经验吗?