我正在使用Amazon ECS和docker镜像正在使用php应用程序。 一切都很顺利。
在入口点我在前台使用supervisord
,这些日志当前发送到云监视日志。
在我的泊坞窗图片中,我有日志发送到文件
/var/log/apache2/error.log
/var/log/apache2/access.log
/var/app/logs/dev.log
/var/app/logs/prod.log
现在我想将这些日志发送到aws cloudwatch。什么是最好的方式。 此外,我有单个应用程序的多个容器,所以所有的foour容器将有这些日志。
最初我想在容器本身安装aws日志代理,但我必须使用相同的docke rimage用于本地和ci和nonprod环境,所以我不想在那里使用cloudwatch日志。
还有其他办法吗?
答案 0 :(得分:0)
你必须做两件事:
答案 1 :(得分:0)
您可以使用Docker的awslogs日志记录驱动程序
请参阅有关如何设置的文档 https://docs.aws.amazon.com/AmazonECS/latest/developerguide/using_awslogs.html
答案 2 :(得分:0)
在任务定义中,如下指定日志记录配置:
"logConfiguration": {
"logDriver": "awslogs",
"options": {
"awslogs-group": "LogGroup",
"awslogs-region": "us-east-1",
"awslogs-stream-prefix": "Prefix"
}
}
awslogs-stream-prefix
对于EC2
启动类型是可选的,但对于Fargate
是必需的在启动新实例的UserData
部分中,将该实例注册到集群,并确保还指定类型awslogs
的日志记录:
#!/bin/bash
echo 'ECS_CLUSTER=ClusterName' > /etc/ecs/ecs.config
echo ECS_AVAILABLE_LOGGING_DRIVERS='[\"json-file\", \"awslogs\"]' >> /etc/ecs/ecs.config
start ecs
更多信息:
https://docs.aws.amazon.com/AmazonECS/latest/developerguide/using_awslogs.html
答案 3 :(得分:0)
给出您定义的用例:
在您先前已经看到的答案中,awslog将stdout用作日志记录机制。此外,已经指出,每个容器都应用awslog,这意味着每个运行中的容器一个aws云日志流。
要在所有日志切换到标准输出时实现您的目标不是您的选择:
先决条件:
查看此问题,如何实现容器之间的共享卷 通过泊坞窗撰写: Docker Compose - Share named volume between multiple containers
这里是一个链接,用于查看如何使日志记录容器与主机docker守护程序https://itnext.io/docker-in-docker-521958d34efd对话
使用如下所示的Dockerfile创建日志记录Docker容器:
从ubuntu
...
ENTRYPOINT [“ cat”]
CMD [“ loggingfile.txt”]
您可以将此容器作为具有输入参数 logging_file_name 的函数来应用,以写入stdout并直接写入AWS Cloudwatch:
docker run -it --log-driver = awslogs
--log-opt awslogs-region =地区
--log-opt awslogs-group =您定义的组名
--log-opt awslogs-stream =您定义的流名称
--log-opt awslogs-create-group = true
通过此设置,您有一个单独的docker日志记录容器,该容器与docker主机进行通信,并启动另一个docker容器以读取主容器的日志记录文件,并将它们推送到完全由您定制的AWS Cloudwatch。