如何将自定义日志从 AL2023 实例流式传输到 cloudwatch

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

我们使用 amazon-elastic-beanstalk 来部署我们的堆栈的一部分。 我们刚刚将我们的基础平台从使用 Amazon linux 2 的 PHP 7.4 迁移到使用 Amazon linux 2023 的 PHP 8.2。

默认系统日志正在正确流式传输(/var/log/nginx/access.log、/var/log/eb-hooks.log 等),但自定义日志流式传输到 cloudwatch 不起作用。

我遵循本指南 https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/AWSHowTo.cloudwatchlogs.html 以便在 amazon-linux-2 中启用日志流

(指南尚未更新至 amazon-linux-2023)

在 AL2 中,我们声明要发送的日志,创建一个 ebextension,在

/etc/awslogs/config/logs.conf
中添加文件,如来自 awsdocs 的示例中所述

此外,我还必须通过创建另一个 ebextension 来启用 Cloudwatch 日志流:

.ebextension/95-logs-streamtocloudwatch.config

option_settings:
  aws:elasticbeanstalk:cloudwatch:logs:
    StreamLogs: true
    DeleteOnTerminate: false
    RetentionInDays: 30

最后,我创建了一个策略并将其添加到 EC2 实例配置文件中定义的角色中,如官方指南中所述: 将 Elastic Beanstalk 与 Amazon CloudWatch Logs 结合使用

{
 "Version": "2012-10-17",
 "Statement": [
 {
   "Effect": "Allow",
   "Action": [
     "logs:CreateLogGroup",
     "logs:CreateLogStream",
     "logs:PutLogEvents",
     "logs:DescribeLogStreams"
   ],
   "Resource": [
   "*"
   ]
 }
 ]
}

来自:官方来源

该配置在 amazon-linux-2 实例中运行良好。但在 Amazon linux 2023 实例中不起作用

amazon-elastic-beanstalk amazon-cloudwatch amazon-cloudwatchlogs amazon-linux-2023
1个回答
0
投票

我找到了解决方案,感谢这个现有的答案

我所做的是编辑 .ebextension 文件,以便在 /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d/ 文件夹下设置 cloudwatch 代理的配置。

这是我生成的 .ebextension 文件

option_settings:
  aws:elasticbeanstalk:cloudwatch:logs:
    StreamLogs: true
    DeleteOnTerminate: false
    RetentionInDays: 30

packages:
  yum:
    amazon-cloudwatch-agent: []

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
  "/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d/custom_logs.json":
    mode: "000600"
    owner: root
    group: root
    content: |
      {
        "logs": {
          "logs_collected": {
            "files": {
              "collect_list": [
                {
                  "file_path": "/var/log/php-fpm/mycustomlog.log",
                  "log_group_name": "/aws/elasticbeanstalk/erp-prod-php8/var/log/php-fpm/mycustomlog.log",
                  "log_stream_name": "{instance_id}"
                }
              ]
            }
          }
        }
      }

commands:
  "01":
    command: systemctl enable amazon-cloudwatch-agent.service
  "02":
    command: systemctl restart amazon-cloudwatch-agent

© www.soinside.com 2019 - 2024. All rights reserved.