AWS Elastic Beanstalk:将自定义日志添加到CloudWatch?

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.dtaillogs.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)

  • @Joël谢谢.这对我来说仍然不起作用,但我想出了一种方法可以让这项工作在以后进行.我必须附加或扩展Elastic Beanstalk服务角色(实例配置文件)的策略,以添加更多权限来处理CloudWatch日志.之后,他们神奇地出现在Cloudwatch中. (5认同)
  • 你能解释一下`log_group_name`的复杂功能吗?[(找到一些文档)](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-join.html).并且请告诉我,部分`{"Ref":"AWSEBEnvironmentName"}`是否可以以某种方式用在`log_stream_name`中,这是我需要做的.还有哪些"参考"值可能? (2认同)
  • @TorstenEngelbrecht可以让您了解您附加到Elastic Beanstalk服务角色的策略.我和你的问题面临同样的问题. (2认同)
  • @Arun我认为这个链接涵盖了使用的政策:https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/AWSHowTo.cloudwatchlogs.html. (2认同)

ADT*_*DTC 12

应付给Sebastian HsuAbhyudit 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)

log_group_name

我们的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)

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*
Run Code Online (Sandbox Code Playgroud)


Abh*_*ain 5

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.您可以在配置中执行任何操作.