我们正在研究向云的长期迁移。该计划是从小处着手,逐步将基础架构中不太重要的部分迁移到云中。到目前为止一切都很好。
此迁移的一部分包括来自 Web 服务器的日志文件等。请记住,服务器仍位于云外部的数据中心中。在每天结束时让 cron 作业抓取日志文件,压缩它们,然后将它们推送到 Amazon S3 中,并可能备份到 Glacier 应该很容易。这很容易。
当 S3 是您存储日志的唯一位置并且您想要在日志中搜索各种事件时,就会出现此问题。如果您不知道时间间隔,您可能必须从 S3 下载所有日志以进行全面搜索,结果证明这很昂贵- 将数据移动到云中很便宜,将其从那里取出很昂贵。
或者我可以设置一个 EC2 实例模板。当有人想要进行日志搜索时,启动实例,将日志从 S3 下载到它,然后 grep 离开。将文件从 S3 下载到 EC2 很便宜。但是下载可能需要一段时间;同样,如果您不知道要查找的内容,则需要下载大量日志,这意味着在 EBS 中使用大量空间。
另一种方法是将日志上传到 DynamoDB 之类的。价格可能是个问题。另一个问题是日志是完全非结构化的 Apache 和 Squid 日志等 - 因此查询可能需要很长时间。
我们说的是 500GB/年的压缩日志,最多可存储 5 年。
对我来说,像这样将日志存储在云中开始听起来不是一个好主意。也许只是使用 Glacier 作为“磁带备份”,但现在将日志保存在本地,在几个硬盘驱动器上。
你向哪个方向倾斜?
Logstash + ElasticSearch + Kibana。这就是您需要的组合。
听起来您正在寻找 AWS,因此为此构建一个适度的 EC2 集群 - 可能是一个 logstash“路由器/代理”框和两个 Elasticsearch 集群节点。
在 ES 索引中保持合理数量的数据“在线”,然后将旧索引归档到 S3。ElasticSearch 开箱即用地支持这一点,并且能够(相对无缝地)从 S3 导出和导入数据。
至于如何将日志发送到 EC2,我只需使用从您的自托管服务器到 EC2 集群的 IPsec 隧道,并使用您喜欢的任何协议发送日志。Logstash 广泛支持多种输入格式。
如果在云中运行 splunk 服务器,在小型实例上始终保持运行,可以使用 EBS 卷,或者如果 I/O 不会成为瓶颈,甚至可以尝试 S3 卷。
我们推出了一项云日志管理服务 (slicklog.com),它可能会解决您的问题。当您的日志到达平台时,
在可通过 UI 配置的一段时间(最少 1 个月)后,归档日志(未压缩 0.001 美元/GB),当日志归档时
鉴于您的要求,如果您可以接受存档日志文件不可搜索的事实,它可能会被视为一种解决方案。
希望这可以帮助。