【问题标题】:How to use fluentd log driver on Elastic Beanstalk Multicontainer docker如何在 Elastic Beanstalk 多容器 docker 上使用 fluentd 日志驱动程序
【发布时间】:2016-06-17 18:41:14
【问题描述】:

我尝试将 fluentd 日志驱动程序与以下 Dockerrun.aws.json 一起使用,

{ “AWSEBDockerrunVersion”:2, “容器定义”:[ { “名称”:“阿帕奇”, "图像": "php:5.6-apache", “基本”:是的, “记忆”:128, “端口映射”:[ { “主机端口”:80, “容器端口”:80 } ], “日志配置”:{ “logDriver”:“流利的”, “选项”: { “流利地址”:“127.0.0.1:24224” } } } ] }

但出现以下错误。

ERROR: Encountered error starting new ECS task: {cancel the command.
    "failures": [
        {
            "reason": "ATTRIBUTE",
            "arn": "arn:aws:ecs:ap-northeast-1:000000000000:container-instance/00000000-0000-0000-0000-000000000000"
        }
    ],
    "tasks": []
}
ERROR: Failed to start ECS task after retrying 2 times.
ERROR: [Instance: i-00000000] Command failed on instance. Return code: 1 Output: beanstalk/hooks/appdeploy/enact/03start-task.sh failed. For more detail, check /var/log/eb-activity.log using console or EB CLI.

我应该配置什么?

【问题讨论】:

    标签: amazon-web-services docker amazon-elastic-beanstalk


    【解决方案1】:

    看来你也可以通过你的应用环境目录下的.ebextensions/01-fluentd.config文件来完成,内容如下:

    files:
      "/home/ec2-user/setup-available-log-dirvers.sh":
        mode: "000755"
        owner: root
        group: root
        content: |
          #!/bin/sh
          set -e
          if ! grep fluentd /etc/ecs/ecs.config &> /dev/null
          then
            echo 'ECS_AVAILABLE_LOGGING_DRIVERS=["json-file","syslog","fluentd"]' >> /etc/ecs/ecs.config
          fi
    
    container_commands:
      01-configure-fluentd:
        command: /home/ec2-user/setup-available-log-dirvers.sh
    

    现在你必须部署一个新的应用版本(还没有 fluentd 配置),重建你的环境,添加 fluentd 配置:

      logConfiguration:
        logDriver: fluentd
        options:
          fluentd-address: localhost:24224
          fluentd-tag: docker.myapp
    

    现在部署更新的应用程序,现在一切正常。

    【讨论】:

    • 谢谢迈克尔。几天后我会尝试并在这里报告结果。
    • 我已经确认它工作正常。再次感谢。
    • 这与哪个解决方案堆栈有关?我已将该文件添加到 .ebextensions 并验证 /etc/ecs/ecs.config 正在更新,但 ecs 代理未使用更新的日志记录驱动程序运行。我猜想 ecs 代理在该配置更改之前正在启动。
    • @matheeeny 在添加 .ebextensions 文件并使用该文件部署版本之后,您是否完成了环境重建(通过进入 beanstalk -> 环境 -> 操作 -> 重建环境)?我已经将它与Multi-container Docker 1.9.1 (Generic) 的一些早期版本一起使用。
    • 我没有重建环境,但我做了一个不可变的部署,它拆除了实例并启动了新的实例。
    【解决方案2】:

    我自己解决了这个问题。

    首先,我准备了一个包含以下用户数据的自定义 ami。

    #cloud-config
    repo_releasever: 2015.09
    repo_upgrade: none
    runcmd:
      - echo 'ECS_AVAILABLE_LOGGING_DRIVERS=["json-file","syslog","fluentd"]' >> /etc/ecs/ecs.config
    

    其次,我定义了在我的环境 EC2 设置中创建的自定义 ami 的 ami id。最后,我将我的应用程序部署到 Elastic Beanstalk。之后,我环境中的fluentd log driver就可以正常工作了。

    为了在 Elastic Beanstalk Multicontainer Docker 中使用 fluentd 日志驱动程序,需要在 /etc/ecs/ecs.config 中定义 ECS_AVAILABLE_LOGGING_DRIVERS 变量。 Elastic Beanstalk Multicontainer Docker 内部使用 ECS,因此相关设置在 ECS 文档中。 请阅读以下文档中的logConfiguration 部分: http://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html

    【讨论】:

      【解决方案3】:

      我已经在接受的答案中添加了一条评论,只需添加我用来让它为我工作的完整 ebextension 文件

      files:
      "/home/ec2-user/setup-available-log-dirvers.sh":
      mode: "000755"
      owner: root
      group: root
      content: |
        #!/bin/sh
        set -e
        if ! grep fluentd /etc/ecs/ecs.config &> /dev/null
        then
          echo 'ECS_AVAILABLE_LOGGING_DRIVERS=["json-file","syslog","fluentd"]' >> /etc/ecs/ecs.config
        fi
      
      container_commands:
       00-configure-fluentd:
        command: /home/ec2-user/setup-available-log-dirvers.sh
       01-stop-ecs:
        command: stop ecs
       02-stop-ecs:
        command: start ecs
      

      我们只是在设置日志驱动程序后重述 ecs

      【讨论】:

        猜你喜欢
        • 2017-06-18
        • 1970-01-01
        • 2015-12-17
        • 2018-12-05
        • 2021-11-25
        • 2020-07-04
        • 2018-06-20
        • 2017-10-14
        • 2017-07-26
        相关资源
        最近更新 更多