Elastic Beanstalk 未流式传输到 CloudWatch

问题描述 投票:0回答:3

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

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

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

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

我的平台是

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.*
amazon-web-services amazon-cloudwatch amazon-elastic-beanstalk
3个回答
1
投票

可能是因为不允许。确保允许 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(如建议此处):

{
  "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


0
投票

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

我在新的 Medium 博客中详细介绍了这一切的工作原理以及示例 .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

0
投票

使用最新版本的elastic beanstalk部署时,配置文件不起作用。

“Yum 没有可供安装的 awslogs”

如何解决?

© www.soinside.com 2019 - 2024. All rights reserved.