应归功于Sebastian Hsu和Abhyudit Jain的学分。
这是我为我们的特定用例config
提出的最终文件。.ebextensions
解释某些方面的注释位于代码块下方。
files:
"/etc/awslogs/config/beanstalklogs_custom.conf" :
mode: "000600"
owner: root
group: root
content: |
[/var/log/tomcat8/catalina.out]
log_group_name = `{"Fn::Join":["/", ["/aws/elasticbeanstalk", { "Fn::Select" : [ "1", { "Fn::Split" : [ "-", { "Ref":"AWSEBEnvironmentName" } ] } ] }, "var/log/tomcat8/catalina.out"]]}`
log_stream_name = `{"Fn::Join":["--", [{ "Ref":"AWSEBEnvironmentName" }, "{instance_id}"]]}`
file = /var/log/tomcat8/catalina.out*
services:
sysvinit:
awslogs:
files:
- "/etc/awslogs/config/beanstalklogs_custom.conf"
commands:
rm_beanstalklogs_custom_bak:
command: "rm beanstalklogs_custom.conf.bak"
cwd: "/etc/awslogs/config"
ignoreErrors: true
日志组名
我们的 EB 环境有一个标准命名方案,即environmentName-environmentType
. 我{ "Fn::Split" : [ "-", { "Ref":"AWSEBEnvironmentName" } ] }
用来将其拆分为两个字符串(名称和类型)的数组。
然后我{ "Fn::Select" : [ "1", <<SPLIT_OUTPUT>> ] }
用来获取类型字符串。您的需求显然会有所不同,因此您可能只需要以下内容:
log_group_name = `{"Fn::Join":["/", ["/aws/elasticbeanstalk", { "Ref":"AWSEBEnvironmentName" }, "var/log/tomcat8/catalina.out"]]}`
log_stream_name
我正在使用该Fn::Join
函数将 EB 环境名称与实例 ID 连接起来。请注意,实例 ID 模板是一个字符串,它完全按照给定的方式回显。
服务
部署自定义文件时,awslogs
服务会自动重新启动。conf
命令
当files
块覆盖现有文件时,它会创建一个备份文件,例如beanstalklogs_custom.conf.bak
. 此块会擦除该备份文件,因为awslogs
服务会读取这两个文件,这可能会导致冲突。
结果
如果您登录到 EC2 实例和sudo cat
文件,您应该会看到类似这样的内容。请注意,所有Fn
功能都已解决。如果您发现某个Fn
函数没有解析,请检查它是否存在语法错误。
[/var/log/tomcat8/catalina.out]
log_group_name = /aws/elasticbeanstalk/environmentType/var/log/tomcat8/catalina.out
log_stream_name = environmentName-environmentType--{instance_id}
file = /var/log/tomcat8/catalina.out*