代码之家  ›  专栏  ›  技术社区  ›  F_SO_K

弹性豆茎不会流到CloudWatch

  •  0
  • F_SO_K  · 技术社区  · 7 年前

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

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

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

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

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

    我不知道接下来该怎么办。我没有要处理的错误消息,也没有下一步要检查的好主意。

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

    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.*
    
    0 回复  |  直到 7 年前
        1
  •  1
  •   Roy    7 年前

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

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

    对于Elastic Beanstalk,EC2实例使用的IAM角色可能是 aws-elasticbeanstalk-ec2-role .授予该角色访问新策略的权限: ec2-cloudwatch-logs-stream (如果有人知道更好的名字,请告诉我)使用JSON(如建议的那样) here ):

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

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

        2
  •  0
  •   RobbiewOnline    4 年前

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

    我在一个新的 Medium blog 这一切是如何运作的,还有一个例子。ebextensions文件及其放置位置。

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

    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