我有一个 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.*
可能是因为不允许。确保允许 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
您可能已经升级了 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
使用最新版本的elastic beanstalk部署时,配置文件不起作用。
“Yum 没有可供安装的 awslogs”
如何解决?