.ebextensions的日志流和权限

问题描述

我正在尝试流式传输应用程序写入的日志文件。我以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权限(我知道那不是主意)。在/opt/elasticbeanstalk/hooks/appdeploy/post/99_permissions.sh中使用.ebextensions创建包含以下内容文件似乎也不起作用。

.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配置时,我缺少了什么?

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

解决方法

由于@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
,

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

在AL2上,有{strong> Application deployment platform hooks中所述的新钩子机制

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