Java 应用程序的 AWS Elastic Beanstalk 默认 CloudWatch 日志位置

Gar*_*son 2 java amazon-web-services amazon-elastic-beanstalk amazon-cloudwatchlogs

我已使用负载均衡器和最多 2 个 EC2 实例在 AWS Elastic Beanstalk 环境中部署了 JAR 文件。

\n

我的环境似乎正在使用新的统一 CloudWatch 代理,而不是旧版 CloudWatch Logs 代理

\n

在控制台的环境配置中,我打开了“实例日志流式传输到 CloudWatch Logs”,现在在 CloudWatch Logs 中我得到以下组:

\n
    \n
  • /aws/elasticbeanstalk/myapp-myenv/var/log/eb-engine.log
  • \n
  • /aws/elasticbeanstalk/myapp-myenv/var/log/eb-hooks.log
  • \n
  • /aws/elasticbeanstalk/myapp-myenv/var/log/nginx/access.log
  • \n
  • /aws/elasticbeanstalk/myapp-myenv/var/log/nginx/error.log
  • \n
  • /aws/elasticbeanstalk/myapp-myenv/var/log/web.stdout.log
  • \n
\n

这很好。值得注意的是,Web 服务器访问位于 中access.log,甚至我的 JAR 文件的 STDOUT 控制台输出也位于 中web.stdout.log。到目前为止,一切都很好。

\n

现在假设我希望我的 JAR 应用程序生成一个日志文件并在 CloudWatch Logs 中自动获取它。我已阅读Elastic Beanstalk EC2 日志记录文档,其中指出我可以.ebextensions在应用程序中捆绑特殊内容以指示新的日志记录位置“如果您的应用程序在不属于您的默认配置的位置生成日志,环境的平台”。

\n

短期内我宁愿不创建文件.ebextensions。关于“\xe2\x80\xa6 默认配置 \xe2\x80\xa6 的位置 \xe2\x80\xa6 部分”的部分引起了我的兴趣。

\n

Elastic Beanstalk Java 平台日志是否有默认位置?换句话说,是否有一些默认位置,例如/var/log/app/我可以简单地将应用程序日志记录到(例如通过环境变量配置)并让带有新统一代理的 CloudWatch Logs 自动拾取它们,而无需创建文件.ebextensions?(作为第二个最佳解决方案,有没有办法可以使用 AWS 控制台配置位置?)

\n

Gow*_*hat 5

在新的统一 CloudWatch 代理中配置此功能非常容易。代理拾取目录中存在的所有配置文件 -/etc/amazon/amazon-cloudwatch-agent/amazon-cloudwatch-agent.d/

您可以在该目录中创建自定义配置文件,

{
    "logs": {
        "logs_collected": {
            "files": {
                "collect_list": [
                    {
                        "file_path": "path_to_file/app1.log",
                        "log_group_name": "/app/app.log",
                        "log_stream_name": "{instance_id}"
                    }
                ]
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

您可以有多个这样的配置文件。这些日志将与默认日志组一起在 CloudWatch Logs 中提供。

注意 -查看 eb-engine.log,Elastic Beanstalk 在commands从 .ebextension 运行后重新设置统一的 cloudwatch 代理并prebuild为每个部署挂钩,因此在这些步骤中创建的任何文件都将被删除。所以我建议你使用predeploy钩子来配置它。

执行此操作的示例钩子 -

将钩子文件存储在 -.platform/hooks/predeploy/cwa_custom_logs.sh 并确保该文件在 git 中可执行。

#!/bin/sh

filepath="/etc/amazon/amazon-cloudwatch-agent/amazon-cloudwatch-agent.d/custom_logs.json"

# Create the file
cat > $filepath << 'EOL'
{
    "logs": {
        "logs_collected": {
            "files": {
                "collect_list": [
                    {
                        "file_path": "path_to_file/app1.log",
                        "log_group_name": "/app/app.log",
                        "log_stream_name": "{instance_id}"
                    }
                ]
            }
        }
    }
}
EOL

# Change file permissions
chmod 000755 $filepath
chown root:root $filepath

# Restart cloudwatch agent
systemctl restart amazon-cloudwatch-agent.service
Run Code Online (Sandbox Code Playgroud)