9

我们在 AWS ECS Fargate 中部署了多个运行 NodeJS 服务(节点:11-alpine docker 映像)的容器。

我们已经有一个正在运行的 ElasticSearch 实例从非 Fargate 应用程序收集日志。我想将 Fargate 容器中的日志传递到这个 ElasticSearch 实例中,但我很难弄清楚什么是最好的方法。

1)似乎一种方法是从 Cloudwatch --> Lambda --> ElasticSearch 流式传输日志。这似乎有点矫枉过正-没有其他方法可以做到这一点吗?

2)我希望我可以运行一个可以从容器中收集日志的 Logstash docker 实例,但我不确定在运行 Fargate 时这是否可行?

3)我应该在每个容器上安装类似 FileBeat 的东西并让它发送日志吗?

任何帮助表示赞赏。

4

1 回答 1

7
  1. 似乎一种方法是从 Cloudwatch --> Lambda --> ElasticSearch 流式传输日志。这似乎有点矫枉过正-没有其他方法可以做到这一点吗?

如果您正在寻找基于 AWS 的托管解决方案,这是其中一种方法。您实际上不需要编写 Lambda 函数,AWS 会为您完成。不过,您需要承担 AWS CloudWatch 日志的费用。

AWS 推荐了另一种解决方案,即使用 fluent-bit 作为 sidecar 容器,将日志从服务中运行的其他容器直接导出到 Elasticsearch/OpenSearch。使用此解决方案,您可以通过不使用 AWS CloudWatch 来节省资金。此解决方案还提供了关于失败时丢失日志的更好结果。

  1. 我希望我可以运行一个可以从容器中收集日志的 Logstash docker 实例,但我不确定在运行 Fargate 时这是否可行?

是的,如果您将该容器与另一个容器一起运行,这是可能的。

  1. 我应该在每个容器上安装 FileBeat 之类的东西并让它发送日志吗?

您可以随意使用 Fluent Bit、Filebeat、Fluentd、Functionbeat 或 Logstash。

注意:如果您正在考虑运行自己的日志导出器容器,例如 Logstash、Fluent Bit 等,请不要启用 CloudWatch 日志记录以节省资金,因为您不会使用它。

于 2019-09-03T14:18:29.777 回答