如何处理 ECS 容器代理 docker 容器日志?

How to handle ECS container agent docker container logs?

我在 ECS 上使用 aws batch。

ECS 任务可以在任务定义中配置为使用 awslogs logDriver 并将日志发送到 cloudwatch,这样可以防止它们在 EC2 实例中占用 space。但是 ECS 容器代理本身也存在于 docker 容器中,它的所有 docker 容器日志都存储在 EC2 实例中,这会很快填满内存。无论如何要为 ECS 容器代理本身设置 logDriver?

另外ECS agent将日志存储在/var/log/ecs/ecs-agent.log.timestamp中,也占用了很多space。知道如何将它们重定向到 cloudwatch 吗?

您可以在 UserData 中使用小脚本(作为 LaunchConfiguration 的一部分)来安装 awslogs 并进行配置。请在下面找到示例片段。

        # Install awslogs and the jq JSON parser
        yum install -y awslogs jq

        # Inject the CloudWatch Logs configuration file contents
        cat > /etc/awslogs/awslogs.conf <<- ''EOF''
        [general]
        state_file = /var/lib/awslogs/agent-state

        [/var/log/dmesg]
        file = /var/log/dmesg
        log_group_name = ${EnvName}-${EnvNumber}#ecs#dmesg
        log_stream_name = {cluster}/{container_instance_id}

        [/var/log/messages]
        file = /var/log/messages
        log_group_name = ${EnvName}-${EnvNumber}#ecs#messages
        log_stream_name = {cluster}/{container_instance_id}

        datetime_format = %b %d %H:%M:%S

        [/var/log/docker]
        file = /var/log/docker
        log_group_name = ${EnvName}-${EnvNumber}#ecs#docker
        log_stream_name = {cluster}/{container_instance_id}
        datetime_format = %Y-%m-%dT%H:%M:%S.%f

        [/var/log/ecs/ecs-init.log]
        file = /var/log/ecs/ecs-init.log.*
        log_group_name = ${EnvName}-${EnvNumber}#ecs#ecs-init.log
        log_stream_name = {cluster}/{container_instance_id}
        datetime_format = %Y-%m-%dT%H:%M:%SZ

        [/var/log/ecs/ecs-agent.log]
        file = /var/log/ecs/ecs-agent.log.*
        log_group_name = ${EnvName}-${EnvNumber}#ecs#ecs-agent.log
        log_stream_name = {cluster}/{container_instance_id}
        datetime_format = %Y-%m-%dT%H:%M:%SZ