我想为我的Firehose捕捉Cloudwatch日志,以便在发送数据时发现任何错误。S3
目的地。我创建了一个云表单模板,其中包含日志记录的详细信息
"CloudWatchLoggingOptions" : {
"Enabled" : "true",
"LogGroupName": "/aws/firehose/firehose-dev", -->firehose-dev is my firehosedeliverystream name
"LogStreamName" : "s3logs"
},
我已经给了firehose必要的IAM权限,以便创建 loggroupname
和 streamname
.
{
"Sid": "",
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": [
"arn:aws:logs:*:*:*"
]
}
当我触发模板时,我没有发现任何loggroupname和streamname在cloudwatch日志中被创建。
但当我们将相同的 IAM 权限赋予 AWS::Lambda
资源,它将自动创建一个日志组名(即/aws/lambda/mylambdaname
)并将日志发送到该组。但是为什么这种情况在firehose上不能用呢?
作为一个变通方法
我正在手动创建 AWS::Logs::LogGroup
资源名称为 /aws/firehose/firehose-dev
和 AWS::Logs::LogStream
资源名称为 s3logs
.
如果我们使用控制台配置firehose deliverystream,firehose也会自动创建日志组名和日志流名。
Firehose不能像aws lambda那样通过cloudformation配置时自动创建loggroup名和logstream名吗?
谢谢任何帮助,感激不尽
它依赖于资源。有些资源会为你创建日志组,有些则不会。有时控制台会在后台创建它们。当您使用CloudFormation时,通常您必须自己做所有事情。
在 Firehose 的情况下,您可以在后台创建日志组。AWS::Logs::LogGroup
和 AWS::Logs::LogStream
CloudFormation中的资源。例如(yaml)。
MyFirehoseLogGroup:
Type: AWS::Logs::LogGroup
Properties:
RetentionInDays: 1
MyFirehoseLogStream:
Type: AWS::Logs::LogStream
Properties:
LogGroupName: !Ref MyFirehoseLogGroup
然后当您定义您的 AWS::KinesisFirehose::DeliveryStream
,你可以参考他们。
CloudWatchLoggingOptions:
Enabled: true
LogGroupName: !Ref MyFirehoseLogGroup
LogStreamName: !Ref MyFirehoseLogStream