AWS弹性豆茎Java应用程序的默认CloudWatch日志位置
我已使用负载均衡器和最多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
中。到目前为止一切顺利。
.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
相关文章