如何处理在 Spot 实例上运行的应用程序生成的日志和调试信息

如何处理在 Spot 实例上运行的应用程序生成的日志和调试信息

我正在使用 Amazon Spot 实例来抓取大量数据。大多数实例都会一直运行,直到当前价格超过我们的最高出价时 Amazon 才会终止它们。

我需要监控并主要归档这些 Spot 实例中生成的日志。这些日志对于调试和分析非常重要。我们有应用程序日志、系统日志(如 syslog)、安全日志。以下是我能想到的选项:

  • 使用 Chukwa/Flume。这里没有列出 Facebook 的记录员,因为我认为该项目已经失败了。使用这种方法,很少可能会丢失一些日志。
  • 将 EBS 卷附加到这些竞价实例。但是,当竞价实例终止时,管理这些卷将是一件麻烦事。
  • 挂载 NFS 卷,以便我们将日志写入该卷。这种方法有时性能非常差。

另外,我认为在这些存档文件上运行 Linux 命令(例如 grep、awk)的能力也很重要。在这种情况下人们会使用什么?

PS 我们已经在使用 splunk,但我不会在 splunk 中存档日志。

答案1

我使用过的两种方法:

  • 使用 Syslog 将日志发送到另一个位置。在 AWS 中,我们使用 VPC 和 VPN 连接到本地数据中心的私有机架。我们所有的实例都在运行Syslog NG并将他们的日志发送到我们数据中心的服务器。数据存储在 MongoDB 中。

  • 使用日志旋转将日志存档到 S3。它不像使用 Syslog 那样实时,但设置和维护起来更简单,尤其是在生成大量数据的情况下。AWS 新宣布的数据管道也可以是这个解决方案的一个很好的补充,因为您可以使用它来使用 Elastic Map Reduce 作业自动处理您的日志。

答案2

正如您已经写的,您可以选择使用 Chkwa/Flume。

我相信这是进行日志处理和存储的最佳和最有效的方法,但我建议使用 logstash 来实现相同的目的。

Logstash 非常高效,支持多种内部消息格式。Logstash 还提供了一个前端,您可以在其中使用正则表达式并检查结果。

虽然对于前端我建议使用graylog2,与logstash前端相比它具有很多功能。

不过,如果你已经有了 Splunk,我不明白为什么你不想将数据存储在那里。可能是因为许可费吗?我不确定他们的费用结构,但我知道费用很高 :)

相关内容