如何处理 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
我在 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