使用 Amazon CloudWatch 日志 - Amazon Kinesis Data Analytics for SQL 应用程序开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

如果我们为英文版本指南提供翻译,那么如果存在任何冲突,将以英文版本指南为准。在提供翻译时使用机器翻译。

使用 Amazon CloudWatch 日志

如果未正确配置 Amazon Kinesis Data Analytics 应用程序,它可能会在应用程序启动期间转变为运行状态。或者它可以更新,但不会处理进入应用程序内部输入流的任何数据。通过在应用程序中添加 CloudWatch 日志选项,您可以监控应用程序配置问题。

Amazon Kinesis Data Analytics 可能会在以下情况下产生配置错误:

  • 用于输入的 Kinesis 数据流不存在。

  • 用于输入的 Amazon Kinesis Data Firehose 传输流不存在。

  • 用作引用数据源的 Amazon S3 存储桶不存在。

  • S3 存储桶的引用数据源中的指定文件不存在。

  • 在管理相关权限的 AWS Identity and Access Management (IAM) 角色中未定义正确的资源。

  • 管理相关权限的 IAM 角色中未定义正确权限。

  • Kinesis Data Analytics 无权代入管理相关权限的 IAM 角色。

有关 Amazon CloudWatch 的更多信息,请参阅Amazon CloudWatch 用户指南

添加 PutLogEvents 策略操作

Amazon Kinesis Data Analytics 需要具有相应的权限以将配置错误写入到 CloudWatch 中。您可以将这些权限添加到 Amazon Kinesis Data Analytics 代入的 IAM 角色中,如下所述。有关将 IAM 角色用于 Amazon Kinesis Data Analytics 的更多信息,请参阅 Kinesis Data Analytics 中的 Identity and Access Management

信任策略

要为 Kinesis Data Analytics 授予权限以代入 IAM 角色,您可以将以下信任策略附加到该角色。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "kinesisanalytics.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

权限策略

要为应用程序授予权限以将日志事件从 Kinesis Data Analytics 资源写入到 CloudWatch 中,您可以使用以下 IAM 权限策略。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt0123456789000", "Effect": "Allow", "Action": [ "logs:PutLogEvents" ], "Resource": [ "arn:aws:logs:us-east-1:123456789012:log-group:my-log-group:log-stream:my-log-stream*" ] } ] }

添加配置错误监控

可以使用以下 API 操作将 CloudWatch 日志选项添加到新的或现有的应用程序中,或者更改现有应用程序的日志选项。

注意

目前,您只能使用 API 操作将 CloudWatch 日志选项添加到应用程序中。您无法使用控制台添加 CloudWatch 日志选项。

在创建应用程序时添加 CloudWatch 日志选项

以下代码示例说明了如何使用 CreateApplication 操作以在创建应用程序时添加 CloudWatch 日志选项。有关 Create_Application 的更多信息,请参阅 CreateApplication

{ "ApplicationCode": "<The SQL code the new application will run on the input stream>", "ApplicationDescription": "<A friendly description for the new application>", "ApplicationName": "<The name for the new application>", "Inputs": [ ... ], "Outputs": [ ... ], "CloudWatchLoggingOptions": [{ "LogStreamARN": "<Amazon Resource Name (ARN) of the CloudWatch log stream to add to the new application>", "RoleARN": "<ARN of the role to use to access the log>" }] }

向现有应用程序添加 CloudWatch 日志选项

以下代码示例说明了如何使用 AddApplicationCloudWatchLoggingOption 操作将 CloudWatch 日志选项添加到现有应用程序中。有关 AddApplicationCloudWatchLoggingOption,参见 AddApplicationCloudWatchLoggingOption.

{ "ApplicationName": "<Name of the application to add the log option to>", "CloudWatchLoggingOption": { "LogStreamARN": "<ARN of the log stream to add to the application>", "RoleARN": "<ARN of the role to use to access the log>" }, "CurrentApplicationVersionId": <Version of the application to add the log to> }

更新现有 CloudWatch 日志选项

以下代码示例说明了如何使用 UpdateApplication 操作修改现有的 CloudWatch 日志选项。有关 UpdateApplication,参见 UpdateApplication.

{ "ApplicationName": "<Name of the application to update the log option for>", "ApplicationUpdate": { "CloudWatchLoggingOptionUpdates": [ { "CloudWatchLoggingOptionId": "<ID of the logging option to modify>", "LogStreamARNUpdate": "<ARN of the new log stream to use>", "RoleARNUpdate": "<ARN of the new role to use to access the log stream>" } ], }, "CurrentApplicationVersionId": <ID of the application version to modify> }

从应用程序中删除 CloudWatch 日志选项

以下代码示例说明了如何使用 DeleteApplicationCloudWatchLoggingOption 操作删除现有的 CloudWatch 日志选项。有关 DeleteApplicationCloudWatchLoggingOption,参见 DeleteApplicationCloudWatchLoggingOption.

{ "ApplicationName": "<Name of application to delete log option from>", "CloudWatchLoggingOptionId": "<ID of the application log option to delete>", "CurrentApplicationVersionId": <Version of the application to delete the log option from> }

配置错误

以下各部分包含您可能在未正确配置的应用程序的 Amazon CloudWatch Logs 中看到的错误的详细信息。

错误消息格式

由应用程序错误配置产生的错误消息将采用以下格式显示。

{ "applicationARN": "string", "applicationVersionId": integer, "messageType": "ERROR", "message": "string", "inputId": "string", "referenceId": "string", "errorCode": "string" "messageSchemaVersion": "integer", }

错误消息中的字段包含以下信息:

  • applicationARN: 生成应用程序的Amazon资源名称(ARN),例如: arn:aws:kinesisanalytics:us-east-1:112233445566:application/sampleApp

  • applicationVersionId: :遇到错误时的应用程序版本。有关更多信息,请参阅 ApplicationDetail。)

  • messageType: :消息类型。目前,此类型只能是 ERROR

  • message: :错误的详细信息,例如:

    There is a problem related to the configuration of your input. Please check that the resource exists, the role has the correct permissions to access the resource and that Kinesis Analytics can assume the role provided.
  • inputId: :与应用程序输入关联的 ID。仅当此输入为错误的原因时,此值才存在。如果 referenceId 存在,则此值不会存在。有关更多信息,请参阅 DescribeApplication。)

  • referenceId: :与应用程序引用数据源关联的 ID。仅当此源为错误的原因时,此值才会存在。如果 inputId 存在,则此值不会存在。有关更多信息,请参阅 DescribeApplication。)

  • errorCode: :错误的标识符。此 ID 为 InputErrorReferenceDataError

  • messageSchemaVersion: 指定当前消息框架版本的值 1。您可以检查此值以查看错误消息架构是否已更新。

Errors

可能在 Amazon Kinesis Data Analytics 的 CloudWatch Logs 日志中显示的错误如下所示。

资源不存在

如果为 Kinesis 输入流指定的 ARN 不存在,但 ARN 在语法上正确,则会产生类似于下面的错误。

{ "applicationARN": "arn:aws:kinesisanalytics:us-east-1:112233445566:application/sampleApp", "applicationVersionId": "5", "messageType": "ERROR", "message": "There is a problem related to the configuration of your input. Please check that the resource exists, the role has the correct permissions to access the resource and that Kinesis Analytics can assume the role provided.", "inputId":"1.1", "errorCode": "InputError", "messageSchemaVersion": "1" }

如果用于引用数据的 Amazon S3 文件键不正确,则会产生类似于下面的错误。

{ "applicationARN": "arn:aws:kinesisanalytics:us-east-1:112233445566:application/sampleApp", "applicationVersionId": "5", "messageType": "ERROR", "message": "There is a problem related to the configuration of your reference data. Please check that the bucket and the file exist, the role has the correct permissions to access these resources and that Kinesis Analytics can assume the role provided.", "referenceId":"1.1", "errorCode": "ReferenceDataError", "messageSchemaVersion": "1" }

角色不存在

如果为不存在的 IAM 输入角色指定了 ARN,但 ARN 在语法上正确,则会产生类似于下面的错误。

{ "applicationARN": "arn:aws:kinesisanalytics:us-east-1:112233445566:application/sampleApp", "applicationVersionId": "5", "messageType": "ERROR", "message": "There is a problem related to the configuration of your input. Please check that the resource exists, the role has the correct permissions to access the resource and that Kinesis Analytics can assume the role provided.", "inputId":null, "errorCode": "InputError", "messageSchemaVersion": "1" }

角色无权访问资源

如果使用的输入角色无权访问输入资源(如 Kinesis 源流),则会产生类似于下面的错误。

{ "applicationARN": "arn:aws:kinesisanalytics:us-east-1:112233445566:application/sampleApp", "applicationVersionId": "5", "messageType": "ERROR", "message": "There is a problem related to the configuration of your input. Please check that the resource exists, the role has the correct permissions to access the resource and that Kinesis Analytics can assume the role provided.", "inputId":null, "errorCode": "InputError", "messageSchemaVersion": "1" }