如何CloudWatch在AWS Elastic Beanstalk中部署的Laravel日志?

问题描述 投票:0回答:2

我在 AWS Elastic Beanstalk 中部署了一个 PHP Laravel Worker,并希望将

/var/app/current/storage/logs/*.log
流式传输到 CloudWatch。然而,我遇到的解决方案要么适用于 Forge 部署,要么适用于普通 EC2 实例。

非常感谢在此事上的任何帮助。

amazon-web-services laravel-5 amazon-cloudwatch
2个回答
11
投票

您需要按照此处所述配置 CloudWatch 代理:

  • 授予 CloudWatch Logs 代理的 IAM 权限;
  • 部署与 .ebextensions/logs.config 文件一起压缩的应用程序。

我认为logs.config应该看起来像这样

option_settings:
  - namespace: aws:elasticbeanstalk:cloudwatch:logs
    option_name: StreamLogs
    value: true
  - namespace: aws:elasticbeanstalk:cloudwatch:logs
    option_name: DeleteOnTerminate
    value: false
  - namespace: aws:elasticbeanstalk:cloudwatch:logs
    option_name: RetentionInDays
    value: 7

packages:
  yum:
    awslogs: []

files:
  "/etc/awslogs/awscli.conf" :
    mode: "000600"
    owner: root
    group: root
    content: |
      [plugins]
      cwlogs = cwlogs
      [default]
      region = `{"Ref":"AWS::Region"}`

  "/etc/awslogs/awslogs.conf" :
    mode: "000600"
    owner: root
    group: root
    content: |
      [general]
      state_file = /var/lib/awslogs/agent-state

  "/etc/awslogs/config/logs.conf" :
    mode: "000600"
    owner: root
    group: root
    content: |
      [/var/app/current/storage/logs]
      log_group_name = `{"Fn::Join":["/", ["/aws/elasticbeanstalk", { "Ref":"AWSEBEnvironmentName" }, "var/app/current/storage/logs"]]}`
      log_stream_name = {instance_id}
      file = /var/app/current/storage/logs/*.log

commands:
  "01":
    command: chkconfig awslogs on
  "02":
    command: service awslogs restart

请参阅您的 ec2 实例上的 /var/log/awslogs.log 进行故障排除。


0
投票

我使用 Amazon Linux 2023 Elastic Beanstalk 平台以不同的方式实现了这一目标,因为他们的文档建议使用平台挂钩而不是 .ebextensions

您需要在 CloudWatch 中创建一个 LogGroup,并首先授予您的 ElasticBeanstalk EC2 服务角色对其进行写入的权限。提供的默认角色仅具有写入前缀为

/aws/elasticbeanstalk
的 LogGroup 的权限。因此,您要创建的示例 LogGroup 名称可以是
/aws/elasticbeanstalk/app

.platform/files/app_log.json

{
    "logs": {
        "logs_collected": {
            "files": {
                "collect_list": [
                    {
                        "file_path": "/var/app/current/storage/logs/*.log",
                        "log_group_name": "/aws/elasticbeanstalk/app",
                        "log_stream_name": "{instance_id}_current"
                    },
                    {
                        "file_path": "/var/app/staging/storage/logs/*.log",
                        "log_group_name": "/aws/elasticbeanstalk/app",
                        "log_stream_name": "{instance_id}_staging"
                    }
                ]
            }
        }
    }
}

.platform/hooks/predeploy/configure-cloudwatch.sh

#!/bin/sh
cp .platform/files/app_log.json /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d/laravel.json
systemctl restart amazon-cloudwatch-agent.service
© www.soinside.com 2019 - 2024. All rights reserved.