代码之家  ›  专栏  ›  技术社区  ›  Mirage

如何使用docker ecs容器设置aws cloudwatch日志

  •  1
  • Mirage  · 技术社区  · 6 年前

    我使用的是亚马逊ECS,docker image使用的是php应用程序。

    在我使用的入口点中 supervisord 在前台,这些日志当前被发送到cloudwatch日志。

    在我的docker映像中,我将日志发送到文件

    /var/log/apache2/error.log
    /var/log/apache2/access.log
    /var/app/logs/dev.log
    /var/app/logs/prod.log
    

    现在我想把这些日志发送到aws cloudwatch。最好的办法是什么。 另外,我有多个容器用于单个应用程序,所以所有的foour容器都会有这些日志。

    最初我想在容器中安装aws日志代理,但我必须在本地、ci和非棒环境中使用相同的Dock笠美,所以我不想在那里使用cloudwatch日志。

    3 回复  |  直到 6 年前
        1
  •  2
  •   Muhammad Soliman    5 年前

    在任务定义中,按以下方式指定日志记录配置:

    "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

        2
  •  1
  •   John Nicely    6 年前

    你必须做两件事:

    1. here , here here
    2. 与其将日志写入容器中的文件,不如将其写入 /dev/stdio /dev/stdout /dev/stderr . 您只需在Apache配置中使用这些路径,就可以看到输出到容器日志的Apache日志消息。
        3
  •  1
  •   Nune Isabekyan    6 年前

    您可以使用Docker的awslogs日志记录驱动程序

    https://docs.aws.amazon.com/AmazonECS/latest/developerguide/using_awslogs.html

        4
  •  0
  •   Jwf    4 年前

    • 从容器中的4个不同文件收集日志
    • 应用docker日志驱动程序 奥斯洛

    在前面的答案中,您已经看到,awslog将标准输出应用为日志机制。此外,已经声明,awslog应用于每个容器,这意味着每个正在运行的容器都有一个aws云日志流。

    在切换到stdout进行所有日志记录时,要实现您的目标不是您的选择:

    • 您可以为主容器应用一个单独的容器作为日志机制(记住每个容器有一个日志流)
    • 这将导致一个单独的容器,它应用awslogs驱动程序,并按顺序从另一个容器读取文件(也可能是异步的,更复杂),并将它们推送到您选择的单独的aws云日志流中

    先决条件:

    查看此问题如何实现容器之间的共享卷 Docker Compose - Share named volume between multiple containers

    1. 日志容器需要与主机docker守护进程对话。不推荐在docker中运行docker,这里也不需要!

    下面是一个链接,查看如何使日志记录容器与主机docker守护进程通信 https://itnext.io/docker-in-docker-521958d34efd

    1. 使用Dockerfile创建日志docker容器,如下所示:



      入口点[“猫”]
      CMD[“loggingfile.txt”]

    2. 日志文件名 要写入标准输出并直接写入aws Cloudwatch:

      docker run-it--log driver=awslogs

      --log opt awslogs group=您定义的组名

      --log opt awslogs create group=true
      <日志记录\u Docker\u图像>&书信电报;日志记录\u文件\u名称>


    enter image description here