【问题标题】:Log streaming and premissions with .ebextensions使用 .ebextensions 记录流式传输和权限
【发布时间】:2020-08-19 21:11:10
【问题描述】:

我正在尝试流式传输我的应用程序写入的日志文件。我使用https://github.com/awsdocs/elastic-beanstalk-samples/blob/master/configuration-files/aws-provided/instance-configuration/logs-streamtocloudwatch-linux.config 作为起点。不幸的是,/etc/awslogs 似乎不再是添加额外 CloudWatch 配置的正确路径。

我发现我可以将文件放在/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d/my.json 中以使其工作。但我无法创建此文件并让 CloudWatch 使用 .ebextensions 解析它。我尝试使用具有以下内容的文件来执行此操作。部署后文件不存在。如果我使用 awsdocs 建议的文件名,则该文件已创建。

.ebextensions/02-logs-streamtocloudwatch.config:

files:
  "/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d/my.json" :
    mode: "000644"
    owner: root
    group: root
    content: |
        {
            "logs": {
                "logs_collected": {
                    "files": {
                        "collect_list": [
                            {
                                "file_path": "/var/log/eb-docker/containers/eb-current-app/my.log",
                                "log_group_name": "/aws/elasticbeanstalk/my-env/var/log/eb-docker/containers/eb-current-app/my.log",
                                "log_stream_name": "{instance_id}"
                            }
                        ]
                    }
                }
            }
        }

另外,我的日志文件现在应该有666 权限(我知道这不是想法)。使用.ebextensions/opt/elasticbeanstalk/hooks/appdeploy/post/99_permissions.sh 中创建包含以下内容的文件似乎也不起作用。

.ebextensions/04-permissions.config:

files:
  "/opt/elasticbeanstalk/hooks/appdeploy/post/99_dbg_permissions.sh":
    mode: "000755"
    owner: root
    group: root
    content: |
      #!/usr/bin/env bash
      chmod 666 /var/log/eb-docker/containers/eb-current-app/dbg.log

关于如何在 Beanstalk 中使用 .ebextensions 和/或 CloudWatch 配置,我缺少什么?

我不仅想解决这个问题,还想了解问题(何时/如何创建/修改文件)。感谢您的帮助...

【问题讨论】:

  • "。但我无法创建此文件并让 CloudWatch 使用 .ebextensions 对其进行解析。"为什么?你是如何尝试这样做的?你得到什么错误?
  • @Marcin:我在帖子中添加了我使用的文件。我的问题的很大一部分是我不明白为什么我似乎能够在某些位置创建文件和更改权限,但不能在任何地方。我猜我遇到了某种时间问题(使用错误的钩子),也许..?

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


【解决方案1】:

感谢@Marcin 的回答,我能够将我的日志文件添加到日志流配置中:

.platform/hooks/postdeploy/02-logs-streamtocloudwatch.sh

#!/bin/bash

echo '{
    "logs": {
        "logs_collected": {
            "files": {
                "collect_list": [
                    {
                        "file_path": "/var/log/eb-docker/containers/eb-current-app/my.log",
                        "log_group_name": "/aws/elasticbeanstalk/my-env/var/log/eb-docker/containers/eb-current-app/my.log",
                        "log_stream_name": "{instance_id}"
                    }
                ]
            }
        }
    }
}' > "/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d/my.json"
/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a append-config
/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a stop
/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a start

【讨论】:

    【解决方案2】:

    正如您正确指出的那样,文件夹 /opt/elasticbeanstalk/hooks/ 不存在。原因是您可能使用的是基于 Amazon Linux 2 (AL2) 的 EB 环境,而不是 AL1。该文件夹仅在基于 AL1 的旧 EB 中可用。

    在 AL2 上,有 新的挂钩机制,如 Application deployment platform hooks 中所述。

    因此,您必须调整代码以使用新的挂钩,或者切换回基于 AL1 的 EB 环境。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-13
      • 1970-01-01
      • 1970-01-01
      • 2017-09-20
      • 1970-01-01
      • 1970-01-01
      • 2021-12-04
      • 1970-01-01
      相关资源
      最近更新 更多