AWS弹性豆茎Java应用程序的默认CloudWatch日志位置

人气:951 发布:2022-10-16 标签: amazon-web-services java amazon-elastic-beanstalk amazon-cloudwatchlogs

问题描述

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

我的环境似乎正在使用新的统一CloudWatch代理,而不是传统的CloudWatch日志代理

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

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

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

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

在短期内,我不想创建.ebextensions文件。关于…的部分A Location…默认配置…的一部分引起我的兴趣。

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

推荐答案

在新的统一云监控代理中可以非常轻松地进行配置。代理拾取目录中存在的所有配置文件-/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}"
                    }
                ]
            }
        }
    }
}

您可以像这样拥有multiple config files。这些日志将与默认日志组一起出现在CloudWatch日志中。

注意-查看EB-Eng.log,Elastic Beanstrik在从.eb扩展名和每个耗尽的prebuild钩子运行commands之后,重新设置了统一的Cloud Watch代理,因此在这些步骤中创建的任何文件都将被删除。因此,我建议您使用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

652