将日志从 ECS Fargate 发送到 Elasticsearch 的最佳方法

Best approach for sending logs from ECS Fargate into Elasticsearch

我们有一个包含多个容器的设置 运行ning NodeJS 服务(节点:11-alpine docker 图像)部署在 AWS ECS Fargate 中。

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

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

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

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

感谢任何帮助。

  1. It seems one way is to stream the logs from Cloudwatch --> Lambda --> ElasticSearch. It seem a bit overkill - isn't there another way to do this?

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

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

  1. I was hoping I could run a Logstash docker instance that could collect the logs from the containers but I am not sure if this is possible when running Fargate?

是的,如果您 运行 将那个容器与另一个容器一起使用,那是可能的。

  1. Should I install something like FileBeat on each container and let that send the logs?

您可以根据需要使用 Fluent Bit、Filebeat、Fluentd、Functionbeat 或 Logstash。

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