Elastic Beanstalk未流式传输到CloudWatch



我已经有一个Elastic Beanstalk实例将我的日志流式传输到Cloud Watch大约一年了。本周日志停止了流式传输。这可能是因为我在Beanstalk中"重建"了环境。同时没有进行任何配置更改。

我已经仔细检查了我的Beanstalk角色在IAM中是否具有正确的权限(它具有CloudWatchFullAccess(。

我还尝试删除所有现有的组日志。然后,我进入Beanstalk的"实例日志流到CloudWatch日志"区域,更改了日志保留期,并重新启动了应用服务器。果不其然,我的日志组被重新创建了(有了新的保留期(,所以我很确定权限看起来还可以。尽管如此,日志组中没有出现任何日志消息。

我已经通过Beanstalk请求了最近的日志,我可以看到消息正在写入应用服务器上的日志OK。

我的平台是Tomcat 8 with Java 8 running on 64bit Amazon Linux/2.6.2

我不知道从这里到哪里去。我没有错误消息要处理,也没有任何好主意要检查下一步要检查什么。

编辑:这是我在这里定义的CloudWatch的自定义配置

files:
  "/etc/awslogs/config/company_log.conf" :
    mode: "000600"
    owner: root
    group: root
    content: |
      [/var/log/tomcat8/company.log]
      log_group_name = `{"Fn::Join":["/", ["/aws/elasticbeanstalk", { "Ref":"AWSEBEnvironmentName" }, "var/log/tomcat8/company.log"]]}`
      log_stream_name = {instance_id}
      file = /var/log/tomcat8/company.*

这可能是因为不允许。请确保EC2实例使用的角色可以访问:

logs:CreateLogGroup
logs:CreateLogStream
logs:GetLogEvents
logs:PutLogEvents
logs:DescribeLogGroups
logs:DescribeLogStreams
logs:PutRetentionPolicy

使用Elastic Beanstalk,EC2实例使用的IAM角色可能是aws-elasticbeanstalk-ec2-role。使用JSON(如这里所建议的(为该角色提供对新策略的访问权限:ec2-cloudwatch-logs-stream(如果有人知道更好的名称,请告诉我(:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:GetLogEvents",
        "logs:PutLogEvents",
        "logs:DescribeLogGroups",
        "logs:DescribeLogStreams",
        "logs:PutRetentionPolicy"
      ],
      "Resource": [
        "*"
      ]
    }
  ]
}

并且它应该在用sudo services awslogs restart重新启动awslogs服务之后工作。如果没有;检查日志。你可以在这里找到:/var/log/awslogs.log

您可能已经升级了AWS AMI平台,因此Tomcat的位置不同(例如/var/log/Tomcat而不是/var/log/ttomcat8(。

我在一个新的Medium博客中详细介绍了这一切是如何工作的,以及一个.eextensions文件的例子和放在哪里。

以下是您可能可以使用的摘录,尽管本文解释了如何确定要流式传输的正确文件夹/文件。

packages:
  yum:
    awslogs: []
option_settings:
  - namespace: aws:elasticbeanstalk:cloudwatch:logs
    option_name: StreamLogs
    value: true
  - namespace: aws:elasticbeanstalk:cloudwatch:logs
    option_name: DeleteOnTerminate
    value: false
  - namespace: aws:elasticbeanstalk:cloudwatch:logs
    option_name: RetentionInDays
    value: 90
files:
  "/etc/awslogs/awscli.conf" :
    mode: "000600"
    owner: root
    group: root
    content: |
      [plugins]
      cwlogs = cwlogs
      [default]
      region = `{"Ref":"AWS::Region"}`
  "/etc/awslogs/config/logs.conf" :
    mode: "000600"
    owner: root
    group: root
    content: |
      [/var/log/tomcat/localhost.log]
      log_group_name = `{"Fn::Join":["/", ["/aws/elasticbeanstalk", { "Ref":"AWSEBEnvironmentName" }, "var/log/tomcat/localhost.log"]]}`
      log_stream_name = {instance_id}
      file = /var/log/tomcat/localhost.*
      [/var/log/tomcat/catalina.log]
      log_group_name = `{"Fn::Join":["/", ["/aws/elasticbeanstalk", { "Ref":"AWSEBEnvironmentName" }, "var/log/tomcat/catalina.log"]]}`
      log_stream_name = {instance_id}
      file = /var/log/tomcat/catalina.*
      [/var/log/tomcat/localhost_access_log.txt]
      log_group_name = `{"Fn::Join":["/", ["/aws/elasticbeanstalk", { "Ref":"AWSEBEnvironmentName" }, "var/log/tomcat/access_log"]]}`
      log_stream_name = {instance_id}
      file = /var/log/tomcat/access_log.*
commands:
  "01":
    command: systemctl enable awslogsd.service
  "02":
    command: systemctl restart awslogsd

最新更新