Joë*_*oël 19 amazon-web-services amazon-cloudwatch amazon-elastic-beanstalk amazon-cloudwatchlogs
如何将自定义日志添加到CloudWatch?发送默认日志但是如何添加自定义日志?
我已经添加了这样一个文件:(在.ebextensions中)
files:
"/opt/elasticbeanstalk/tasks/bundlelogs.d/applogs.conf" :
mode: "000755"
owner: root
group: root
content: |
/var/app/current/logs/*
"/opt/elasticbeanstalk/tasks/taillogs.d/cloud-init.conf" :
mode: "000755"
owner: root
group: root
content: |
/var/app/current/logs/*
Run Code Online (Sandbox Code Playgroud)
正如我所做的bundlelogs.d和taillogs.d这些自定义日志现在已经从控制台或网络中添加或检索,这很好但是它们不会持久存在且不会在CloudWatch上发送.
在CloudWatch中,我有默认日志,
/aws/elasticbeanstalk/InstanceName/var/log/eb-activity.log
而我希望有另一个这样的日志
/aws/elasticbeanstalk/InstanceName/var/app/current/logs/mycustomlog.log
小智 26
无论bundlelogs.d和taillogs.d从管理控制台中检索日志.您要做的是将默认日志(例如eb-activity.log)扩展到CloudWatch Logs.为了扩展日志流,您需要在其下添加其他配置/etc/awslogs/config/.配置应遵循代理配置文件格式.
我已成功扩展我的自定义ubuntu/nginx/php平台的日志.这是我的扩展文件 FYI.这是FYI 的官方样本.
在你的情况下,它可能是
files:
"/etc/awslogs/config/my_app_log.conf" :
mode: "000600"
owner: root
group: root
content: |
[/var/app/current/logs/xxx.log]
log_group_name = `{"Fn::Join":["/", ["/aws/elasticbeanstalk", { "Ref":"AWSEBEnvironmentName" }, "var/app/current/logs/xxx.log"]]}`
log_stream_name = {instance_id}
file = /var/app/current/logs/xxx.log*
Run Code Online (Sandbox Code Playgroud)
ADT*_*DTC 12
应付给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
Run Code Online (Sandbox Code Playgroud)
我们的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"]]}`
Run Code Online (Sandbox Code Playgroud)
我正在使用该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*
Run Code Online (Sandbox Code Playgroud)
该awslogs代理查找其它应该发送日志文件中的配置文件中 它有一些默认值.您需要编辑它并指定文件.
您可以检查和编辑位于以下位置的配置文件:
/etc/awslogs/awslogs.conf
Run Code Online (Sandbox Code Playgroud)
确保重启服务:
sudo service awslogs restart
Run Code Online (Sandbox Code Playgroud)
您可以在那里指定自己的文件并创建不同的组,而不是.
请参阅以下链接,您将能够立即获取日志.
资源:
https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AgentReference.html
编辑:
由于您不想编辑实例上的文件,因此可以将相关代码添加到代码根目录中的.ebextensions文件夹中.例如,这是我的01_cloudwatch.config:
packages:
yum:
awslogs: []
container_commands:
01_get_awscli_conf_file:
command: "aws s3 cp s3://project/awscli.conf /etc/awslogs/awscli.conf"
02_get_awslogs_conf_file:
command: "aws s3 cp s3://project/awslogs.conf.${NODE_ENV} /etc/awslogs/awslogs.conf"
03_restart_awslogs:
command: "sudo service awslogs restart"
04_start_awslogs_at_system_boot:
command: "sudo chkconfig awslogs on"
Run Code Online (Sandbox Code Playgroud)
在此配置中,我将从S3存储桶中获取相应的配置文件,具体取决于NODE_ENV.您可以在配置中执行任何操作.
| 归档时间: |
|
| 查看次数: |
6948 次 |
| 最近记录: |