首页 > 解决方案 > 使用 .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 配置,我缺少什么?

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

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

解决方案


感谢@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

推荐阅读