如何在 AWS ECS 任务定义中配置日志

Posted

技术标签:

【中文标题】如何在 AWS ECS 任务定义中配置日志【英文标题】:How to configure logentries in AWS ECS Task definition 【发布时间】:2020-08-19 00:45:24 【问题描述】:

我正在尝试为 Task Definition on AWS ECS 配置日志 如您所见,here“logentries”可用于容器实例。

但是我找不到任何关于如何配置它的文档或示例。我看过其他驱动的例子:https://docs.aws.amazon.com/AmazonECS/latest/userguide/example_task_definitions.html

所以我尝试在 aws 控制台中设置this documentation 中定义的所需参数:

但是,当我尝试使用此配置运行任务时,我得到:

service my-service 无法放置任务,因为没有容器 实例满足其所有要求。最接近的匹配 容器实例缺少必需的属性 由你的任务。有关详细信息,请参阅故障排除部分。

有什么想法吗?

【问题讨论】:

你试过了吗? aws.amazon.com/premiumsupport/knowledge-center/… 是的,我得到“com.amazonaws.ecs.capability.logging-driver.logentries”作为缺失属性 【参考方案1】:

对于 ECS 中的 splunk 日志记录(EC2 实例作为具有 ECS 优化映像的主机,而不是 Fargate),您必须通过在启动时设置 ENV 变量 ECS_AVAILABLE_LOGGING_DRIVERS 显式启动启用了 splunk 日志记录的实例(您可以为此使用userdata)。 logentries 也有类似的选项。

见https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-agent-config.html

您的错误消息不是关于 logentries 的配置不正确,而是 logentries 在环境中完全不可用。

【讨论】:

我已包含:# 将 ECS 配置文件 cat /etc/ecs/ecs.config ECS_AVAILABLE_LOGGING_DRIVERS=["json-file","awslogs","logentries"] EOF 写入EC2 的用户数据(已使用 ECS 优化图像启动),我得到了相同的结果 @ilopezluna 你一直有它,还是你添加了它? userData 仅在实例第一次启动时被调用,因此重启它是不够的。您需要终止它并启动一个新的。您如何启动您的 EC2 实例?通过自动扩缩组? 我正在使用 Cloud Formation 脚本启动 EC2 实例。但是,在我之前的测试中,我尝试过您提到的,只是重新启动。现在我尝试将用户数据包含在 CloudFormation 脚本本身中,然后再次启动所有堆栈并且它可以工作。所以你是对的,唯一缺少的就是在用户数据中包含 ECS_AVAILABLE_LOGGING_DRIVERS 是否有一个选项可以让我指定要与此“ECS_AVAILABLE_LOGGING_DRIVERS”一起流式传输到 CloudWatch 的文件? @BabarBaig ECS 仅适用于标准输出日志,不适用于文件。如果您需要将文件转发到日志服务,则需要以某种方式将其作为单独的应用程序运行,并且超出了此问题的范围。

以上是关于如何在 AWS ECS 任务定义中配置日志的主要内容,如果未能解决你的问题,请参考以下文章

ECS 任务。如何在容器中使用 AWS CLI

用于 ECS 任务/容器的 Terraform AWS CloudWatch 日志组

如何从 AWS Lambda 函数运行 ECS 任务?

aws 如何从生产环境中的 lambda 函数访问 ECS 服务

AWS ECS - 如何将任务的执行角色传递给 Boto3?

AWS - ECS - 如何在现有 ECS(带有 1 个 EC2)实例上重新部署更新的 Docker 映像?