将EC2实例的Docker容器日志推送到CloudWatch的问题

0

【以下的问题经过翻译处理】 我在免费套餐中拥有一个正在工作的EC2实例,其中一个位于实例内部的docker容器内运行具有响应功能的基于Java的grpc服务器。

我想将容器的日志发送到CloudWatch。

我创建了建议的策略,EC2角色并将角色附加到实例上。

通过该命令从Linux实例的bash中启动容器:

docker run -d -p 9092:9092 -t <<my-container-name>> --log-driver=awslogs --log-opt awslogs-region=us-east-1 --log-opt awslogs-group="gRPC-POC" --log-opt awslogs-stream="gRPC-POC-log" --log-opt awslogs-create-group=true --log-opt awslogs-create-stream=true

我尝试使用不同的用户运行容器,以及不同的log-driver选项(省略各种部分和其他大部分内容)。

我创建的用于使用CloudWatch的策略如下:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "logs:CreateLogStream",
                "logs:CreateLogGroup",
                "logs:PutLogEvents",
                "logs:DescribeLogStreams"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:logs:us-east-1:<<my-account-number>>:log-group:*:*"
        }
    ]
}

截至目前,即使我创建或不创建日志组和/或日志流,也没有发现收集的日志在CloudWatch中的迹象。

也许我错过了某个步骤或某处至关重要的信息?

请问您有任何建议吗?

#Edit 命令aws sts get-caller-identity给出了此结果:

Enter image description here

该命令是从正在运行的实例的bash中使用的。

1 回答
0

【以下的回答经过翻译处理】 您好,

IAM策略是正确的,但您分享的命令中有些问题。以下是一些观察和疑问:

  1. 在发出命令后,您的容器是否实际运行?上述语法不会引发任何错误,但对我来说甚至没有启动容器。您可以使用“docker ps”或“docker ps -a”进行确认。
  2. 在您的命令中,<<my-container-name>>是否意味着使用要启动容器的镜像名称?在这种情况下,请在命令末尾提供镜像的名称。Docker运行命令的用法如下:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

  1. awslogs-create-stream不是一个有效的日志选项参数,并返回“docker: Error response from daemon: unknown log opt 'awslogs-create-stream' for awslogs log driver.” 根据最新的Docker文档和Docker v20.10.17进行了检查。

请尝试使用以下命令:

docker run -d -p 9092:9092 -t --log-driver=awslogs --log-opt awslogs-region=us-east-1 --log-opt awslogs-group="gRPC-POC" --log-opt awslogs-stream="gRPC-POC-log" --log-opt awslogs-create-group=true  <<my-image-name>>

--Syd

profile picture
专家
已回答 5 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则